使用 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 Actions 构建 CosyVoice 项目的运行环境镜像并推送到阿里云容器镜像服务和 GitHub Package Registry的更多相关文章

  1. 经GitHub将kubernetes镜像推送到阿里云

    背景 在安装kubernetes时会出现无法访问镜像站的情况,通过GitHub将kubernetes镜像推送到阿里云之后,即可使用阿里云地址引用所需镜像,现已同步镜像5000+,当前还在陆续同步.仓库 ...

  2. 两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库

    两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...

  3. vuepress-theme-reco + Github Actions 构建静态博客,部署到第三方服务器

    最新博客链接 Github链接 查看此文档前应先了解,vuepress基本操作 参考官方文档进行配置: vuepress-theme-reco VuePress SamKirkland / FTP-D ...

  4. 如何将本地项目推送到码云仓库或者GitHub仓库

    将本地项目推送到码云仓库. 前提: git 和码云   1.在码云上先创建一个仓库. 2.在要被上传的项目的目录右键, 选择 Git Bash Here. 3.在窗口输入命令: git init 这时 ...

  5. Django项目: 项目环境搭建 ---- 三、在码云平台创建项目&推送到码云上

    三.在码云平台创建项目 git服务平台: 主要使用github(最主流) 国内访问速度慢 托管私有项目收费 国内一般使用码云gitee 国内访问速度快 托管私有项目免费(限制开发人数) 公司中使用gi ...

  6. 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序

    小试阿里云容器服务 之后,接下来有一个挡不住的小试冲动--用docker容器运行程序.首先想到的程序是 ASP.NET 5示例程序,于是参考msdn博客中的这篇博文 Running ASP.NET 5 ...

  7. Git实现1个项目2个地址1次推送

    Git实现1个项目2个地址1次推送 考虑到不需要pull操作,因此本方法适用于个人项目分别在两个平台或地址进行部署 给origin 增加一个可以push的地址 git remote set-url - ...

  8. Linux下Jenkins与GitHub自动构建Node项目(Vue)

    根据上篇文章<Linux下Jenkins与GitHub自动构建NetCore与部署>,我们知道了Jenkins的强大功能,自动构建,部署了一个NetCore的Web,让开发人员专注于开发, ...

  9. Jenkins构建项目后发送钉钉消息推送

    前言 钉钉是我们日常工作的沟通工具,在Jenkins构建持续集成项目配合钉钉机器人的功能,可以让我们在持续集成测试环节快速接收到测试结果的消息推送. 一:新建一个钉钉群,选择自定义机器人 二:添加机器 ...

  10. (一)构建基于ubuntu docker MySQL 5.6 镜像并推送到Docker Hub

    一,创建目录二,文件准备三,构建四,使用五,在宿主机上连接docker 中的mysql六,推送镜像到Docker hub 一,创建目录 mkdir -p mysql/5.6 二,文件准备 注意执行脚本 ...

随机推荐

  1. ceph 16.2.15(Pacific)编译

    目录 获取ceph源码 编译 拉取submodule网络问题 安装依赖 do_cmake.sh 编译 vstart启动 问题 编译dashboard 安装nodejs 方法一 下载编译好的源码包 方法 ...

  2. Doris插入数据底层存储测试

    建表语句 CREATE TABLE IF NOT EXISTS base_site_test( site_id INT DEFAULT '10', city_code INT, user_name V ...

  3. Hive表误删恢复

    一.简介 因hive表删除后,hdfs文件会先放入回收站,定期清理回收站.在回收之前可以进行清理数据 二.恢复步骤 2.1 看表存储是否损坏select type from dw.ods_test1 ...

  4. C# TorchSharp 图像分类实战:VGG大规模图像识别的超深度卷积网络

    目录 图像分类 | VGG大规模图像识别的超深度卷积网络 数据集 直接下载 opendatalab 数据集社区 自定义数据集 模型训练 教程名称:使用 C# 入门深度学习 作者:痴者工良 教程地址: ...

  5. WPF DockLayoutManager布局后的布局重置

    初始化布局 Logging.InfoBiz("初始化布局信息"); dockLayoutManager = new DockLayoutManager(); RestoreLayo ...

  6. autMan奥特曼机器人-定时推送的用法

    一.定时推送功能简介 "定时推送"位于"系统管理"目录 主要有两个功能: 一是定时向某人或某群发送信息. 二是定时运行某指令,就是机器人给自己发指令,让自己运行 ...

  7. autMan奥特曼机器人-出现argument list too long报错的解决方法

    当你运行一段时间autMan后,可能会出现argument list too long的报错,那是你主机系统限制了autMan运行插件的参数长度,导致的报错,如下: 查看当前ARG_MAX的值 在 L ...

  8. Typecho 如何开启外链转内链

    把博客中的外部链接转换为网站内链,据说有利于搜索引擎收录.该插件主要由 benzBrake 大佬 编写,同时支持转换文章和评论中的链接. 上传插件 下载 Master Branch Code 后上传到 ...

  9. Processing 使用pixels[]像素数组绘制矩形rect和圆形ellipse

    余温 两次绘制了棋盘格,有了一些经验了,顺着学习态势,我们再接再厉,挖一些技巧.这一次要使用pixels[]数组绘制矩形rect和圆形ellipse,也就是代替rect()和ellipse()两个函数 ...

  10. Blazor Hybrid适配到HarmonyOS系统

    1. 前言 Blazor Hybrid是一个基于Web技术的MVVM开发模式的客户端框架,它只有UI是由Webview渲染,而逻辑均由.NET开发,可以突破浏览器限制访问本地文件,或者发起TCP或者U ...