首页 > 其他分享 >使用 GitHub Actions 构建 CosyVoice 项目的运行环境镜像并推送到阿里云容器镜像服务和 GitHub Package Registry

使用 GitHub Actions 构建 CosyVoice 项目的运行环境镜像并推送到阿里云容器镜像服务和 GitHub Package Registry

时间:2025-01-10 17:57:11浏览次数:1  
标签:GitHub name CosyVoice IMAGE ACR 镜像

使用 GitHub Actions 构建 CosyVoice 项目的运行环境镜像并推送到阿里云容器镜像服务和 GitHub Package Registry

概述

本文介绍了如何使用 GitHub Actions 构建 CosyVoice 项目的运行环境 Docker 镜像,并将其推送到阿里云容器镜像服务(ACR)和 GitHub Package Registry。通过挂载本地代码和模型的方式,运行时环境被独立打包为 Docker 镜像,便于分发和部署。这种方式使得项目的依赖和运行环境可控,并且可以在不同环境下保持一致性。

准备工作

1. 配置环境变量

在 GitHub 仓库的设置页面中,添加以下必要的环境变量:

  • ALIYUN_ACR_USERNAME: 登录阿里云容器镜像服务的用户名。
  • ALIYUN_ACR_PASSWORD: 登录阿里云容器镜像服务的密码。
  • ALIYUN_ACR_REGISTRY: 阿里云容器镜像服务的注册表 URL。
  • GHCR_USERNAME: GitHub Packages 的用户名。
  • GHCR_TOKEN: GitHub Packages 的个人访问令牌。
  • IMAGE_NAME: Docker 镜像名称。

这些信息可以通过 GitHub 仓库的 Settings -> Secrets and variables -> Secrets 页面添加。

2. 创建 Dockerfile

CosyVoice 项目中,使用 runtime/python/Dockerfile 文件,该文件定义了构建运行环境 Docker 镜像的指令。确保 Dockerfile 根据项目需求进行了正确配置,特别是镜像中的 Python 环境和依赖。

设置 GitHub Actions

1. 创建通用工作流模板文件

创建一个通用的 GitHub Actions 工作流模板,通过参数化配置使得同一份工作流文件适用于不同项目。对于 CosyVoice 项目,可以根据需求调整工作流中的参数和路径。

2. 编写工作流脚本
name: Build and Push CosyVoice Runtime Environment Docker Image

on:
  push:
    branches:
      - main # 触发推送的主要分支
  workflow_dispatch: # 允许手动触发工作流

jobs:
  build:

    runs-on: ubuntu-latest

    env:
      DOCKERFILE_PATH: ${{ github.event.inputs.dockerfile_path || 'runtime/python' }} # 默认路径
      IMAGE_TAG: ${{ github.sha }}

    steps:
    - name: Checkout the repository
      uses: actions/checkout@v3

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v2

    - name: Log in to GitHub Package Registry
      uses: docker/login-action@v2
      with:
        registry: ghcr.io
        username: ${{ github.actor }}
        password: ${{ secrets.GITHUB_TOKEN }}

    - name: Log in to Aliyun ACR
      run: echo "${{ secrets.ALIYUN_ACR_PASSWORD }}" | docker login --username=${{ secrets.ALIYUN_ACR_USERNAME }} --password-stdin ${{ secrets.ALIYUN_ACR_REGISTRY }}

    - name: Build and push
      uses: docker/build-push-action@v3
      with:
        context: ${{ env.DOCKERFILE_PATH }}
        file: ${{ env.DOCKERFILE_PATH }}/Dockerfile
        push: true
        tags: |
          ${{ secrets.ALIYUN_ACR_REGISTRY }}/${{ github.repository }}:${{ env.IMAGE_TAG }}
          ghcr.io/${{ github.repository }}:${{ env.IMAGE_TAG }}

该工作流文件包含以下关键特性:

  • 参数化配置:通过输入参数指定 Dockerfile 的路径,默认为 runtime/python,从而使得该工作流能够适应不同项目的结构。
  • 手动触发选项:除了基于推送事件触发外,还提供了 workflow_dispatch 选项,使得用户可以手动触发工作流,便于进行测试或按需构建。

配置 Podman 命令

为了将本地代码和模型挂载到容器中并运行,可以使用以下 Podman 命令:

podman run -d \
  --name cosyvoice \
  --device=nvidia.com/gpu=all \
  -v ${LOCAL_PROJECT_PATH}:/opt/CosyVoice \
  -p 9233:9233 \
  ${DOCKER_IMAGE}:${IMAGE_TAG} \
  /bin/bash -c "cd /opt/CosyVoice && python3 api.py"

其中:

  • ${LOCAL_PROJECT_PATH} 是本地项目的路径,可以设置为环境变量。
  • ${DOCKER_IMAGE} 是推送到注册表的镜像名称。
  • ${IMAGE_TAG} 是镜像标签,通常为构建哈希值 ${{ github.sha }}

请确保系统已安装 NVIDIA Container Toolkit,并正确配置本地环境,以支持 Podman 与 NVIDIA GPU 的交互。

未解决的问题

目前,在使用 podman compose 运行容器时,无法通过该方式使用宿主机的 GPU。这是一个已知问题,正在寻找解决方案。

标签:GitHub,name,CosyVoice,IMAGE,ACR,镜像
From: https://www.cnblogs.com/aisong/p/18664386

相关文章

  • 离线服务器迁移安装docker镜像
    场景服务器需要使用容器,但是服务器是离线状态,或者无法直接拉取docker镜像,这时候就需要本篇文章了步骤步骤1:将镜像导出为tar文件首先,在在线服务器上将镜像导出为一个.tar文件。你可以使用dockersave命令来将镜像导出:dockersave-o/path/to/your-image.taryour-im......
  • Zabbix 的 Dockerfile 镜像
    要在CentOS上制作一个Zabbix的Dockerfile镜像,首先需要基于CentOS系统构建一个Docker镜像,并安装和配置Zabbix。下面是一个简单的示例Dockerfile,用于构建Zabbix监控系统的Docker镜像。1.Dockerfile说明在这个Dockerfile中,我们将执行以下步骤:使用CentO......
  • AI编程工具怎么选?GitHub Copilot、AI Assistant与Cursor,谁是你的最佳拍档?
    大家好,欢迎来到程序视点!我是小二哥。在大模型技术迅猛发展的今天,AI编程已经很普遍了!从AI编程插件工具,到AI编程IDE,已经有很多的选择了!小二哥这里主要提及GitHubCopilot,JetBrainsAIAssistant和Cursor。主要原因是:对比多款产品后,这三款工具是目前读者小伙伴中受众最高的,也是小......
  • deepin-Wine 运行器合并打包器和添加从镜像提取 DLL 的功能
    Wine运行器是一个图形化工具,旨在简化Wine环境的管理和使用。它不仅提供了运行和管理Wine容器的功能,还增加了打包器和从镜像提取DLL的功能。以下是该工具的详细介绍和使用方法。一、工具概述Wine运行器是一个使用Python3的tkinter构建的图形化工具,旨在提供一个......
  • docker使用远程节点构建多平台镜像
    当在x86或arm平台使用buildx构建多平台镜像时,会发现buildx在构建与docker所在宿主机异构平台镜像包时,构建速度慢的问题。当你同时有x86和arm服务器的基础上,可以使用远程节点来构建多平台镜像包,使用远程节点构建多平台镜像的好处如下:1.无兼容性问题:在x86平台构建arm或在arm平台构......
  • linux—— 在宿主机上查看生成的ext4格式镜像文件内容
    在制作完成ext4(其他格式的也一样)格式的镜像后,想查看镜像文件的内容时,可以利用以下方法:1、在mnt路径下创建roots,这一步随便挂载到一个目录下即可sudomkdir/mnt/roots2、使用以下命令挂载sudomout-olooproots.ext4/mnt/rootsroot.ext4要挂载的文件系统/mnt/roots创建......
  • SpringCloud 解决 Docker 镜像 虚拟机网卡导致的IP 不准确的问题
    SpringCloud应用可能会使用InetAddress.getLocalHost().getHostAddress()或类似方法来获取当前机器的IP地址。但在Docker容器环境中,这种方法可能会返回容器内部的IP地址,而不是宿主机的IP地址。分布式应用部署到服务上,由于服务器可能存在多张网卡,造成IP地址不准。出......
  • [1087] GitHub Copilot in VSCode
    Ref: QuickstartforGitHubCopilotRef: PromptengineeringforGitHubCopilotRef: ConfiguringGitHubCopilotinyourenvironmentRef:GettingstartedwithpromptsforCopilotChat  ......
  • [1085] GitHub Resources and Tools
    Ref:AboutGitHubandGitAboutGitHubGitHubiscloud-basedplatformwhereyoucanstore,share,andworktogetherwithotherstowritecode.Storingyourcodeina"repository"onGitHuballowsyouto:Showcaseorshareyourwork.Trackand......
  • 《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器
    @目录3.Docker常用命令3.1帮助启动类命令3.2镜像命令3.3有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)3.4容器命令3.4.1新建+启动容器3.4.2列出当前所有正在运行的容器3.4.3退出容器3.4.4启动已停止运行的容器3.4.5重启容器3.4.6停止容器3.4.7强制停止容器3......