DeOldify镜像CI/CD实践:GitHub Actions自动构建+推送CSDN GPU镜像仓库

张开发
2026/4/6 19:13:36 15 分钟阅读

分享文章

DeOldify镜像CI/CD实践:GitHub Actions自动构建+推送CSDN GPU镜像仓库
DeOldify镜像CI/CD实践GitHub Actions自动构建推送CSDN GPU镜像仓库1. 项目概述1.1 什么是DeOldify镜像DeOldify是一个基于深度学习技术的图像上色工具能够将黑白照片自动转换为彩色图像。它使用U-Net架构的深度学习模型通过训练大量彩色图像数据学会了如何为黑白图像添加合理的颜色。传统的深度学习模型部署需要复杂的环境配置和专业知识但通过CSDN GPU镜像仓库我们可以将DeOldify打包成开箱即用的镜像让用户无需了解底层技术细节就能快速使用。1.2 CI/CD自动化的价值手动构建和推送镜像存在诸多问题过程繁琐容易出错、版本管理混乱、测试覆盖不全面、部署效率低下。通过GitHub Actions实现CI/CD自动化我们可以自动触发构建流程减少人工干预确保每次构建环境一致避免在我机器上是好的问题自动化测试验证镜像功能快速推送更新到CSDN GPU镜像仓库实现版本号的自动管理和追踪2. 环境准备与配置2.1 GitHub仓库设置首先需要在GitHub仓库中配置必要的密钥和变量# 在仓库Settings - Secrets and variables - Actions中添加 CSDN_REGISTRY_USERNAMEyour_username # CSDN镜像仓库用户名 CSDN_REGISTRY_PASSWORDyour_password # CSDN镜像仓库密码 CSDN_REGISTRY_URLregistry.csdn.net # CSDN镜像仓库地址2.2 Dockerfile配置创建优化的Dockerfile确保镜像轻量且功能完整FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime # 设置工作目录 WORKDIR /app # 安装系统依赖 RUN apt-get update apt-get install -y \ libglib2.0-0 \ libsm6 \ libxext6 \ libxrender-dev \ rm -rf /var/lib/apt/lists/* # 复制requirements文件并安装Python依赖 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制项目文件 COPY . . # 下载预训练模型 RUN python -c from deoldify import device from deoldify.device_id import DeviceId device.set(deviceDeviceId.GPU0) from deoldify.visualize import get_image_colorizer colorizer get_image_colorizer(artisticTrue) # 暴露端口 EXPOSE 7860 # 启动命令 CMD [python, app.py, --serve, --port, 7860]2.3 requirements.txt配置deoldify0.1.0 fastapi0.95.0 uvicorn[standard]0.21.1 pillow9.5.0 requests2.28.2 numpy1.24.2 torch2.0.1 torchvision0.15.23. GitHub Actions工作流配置3.1 基础工作流结构在.github/workflows/build-push.yml中创建CI/CD工作流name: Build and Push DeOldify Docker Image on: push: branches: [ main ] tags: [ v* ] pull_request: branches: [ main ] env: REGISTRY: registry.csdn.net IMAGE_NAME: ${{ github.repository }} jobs: build-and-push: runs-on: ubuntu-latest permissions: contents: read packages: write steps: # 步骤将在后续章节详细展开3.2 完整的构建推送流程jobs: build-and-push: runs-on: ubuntu-latest if: github.event_name ! pull_request steps: - name: Checkout code uses: actions/checkoutv4 - name: Set up Docker Buildx uses: docker/setup-buildx-actionv2 - name: Log in to CSDN Container Registry uses: docker/login-actionv2 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.CSDN_REGISTRY_USERNAME }} password: ${{ secrets.CSDN_REGISTRY_PASSWORD }} - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-actionv4 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | typeraw,valuelatest typeref,eventbranch typeref,eventpr typesemver,pattern{{version}} typesemver,pattern{{major}}.{{minor}} - name: Build and push Docker image uses: docker/build-push-actionv4 with: context: . push: ${{ github.event_name ! pull_request }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: typegha cache-to: typegha,modemax3.3 添加自动化测试在构建流程中加入测试步骤确保镜像质量- name: Run tests run: | # 构建测试镜像 docker build -t deoldify-test -f Dockerfile.test . # 运行测试 docker run --rm deoldify-test python -m pytest tests/ -v - name: Test built image run: | # 运行容器并测试基本功能 docker run -d --name test-container -p 7860:7860 ${{ steps.meta.outputs.tags }} sleep 30 # 等待服务启动 # 测试健康检查接口 curl -f http://localhost:7860/health || exit 1 # 清理 docker stop test-container docker rm test-container4. 高级CI/CD功能实现4.1 多架构镜像构建支持ARM64和AMD64架构提高兼容性- name: Set up QEMU uses: docker/setup-qemu-actionv2 - name: Set up Docker Buildx uses: docker/setup-buildx-actionv2 with: platforms: linux/amd64,linux/arm64 - name: Build and push multi-arch image uses: docker/build-push-actionv4 with: context: . platforms: linux/amd64,linux/arm64 push: true tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} cache-from: typegha cache-to: typegha,modemax4.2 自动版本管理基于语义化版本控制自动生成版本号- name: Get version from tag id: get_version run: | if [[ ${{ github.ref }} refs/tags/* ]]; then echo VERSION${GITHUB_REF#refs/tags/} $GITHUB_OUTPUT else echo VERSIONdev-${{ github.sha }} $GITHUB_OUTPUT fi - name: Build with version tag run: | docker build \ --build-arg VERSION${{ steps.get_version.outputs.VERSION }} \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.get_version.outputs.VERSION }} \ .4.3 安全扫描与漏洞检测集成安全扫描确保镜像安全性- name: Scan image for vulnerabilities uses: aquasecurity/trivy-actionmaster with: image-ref: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest format: sarif output: trivy-results.sarif - name: Upload Trivy scan results to GitHub Security tab uses: github/codeql-action/upload-sarifv2 with: sarif_file: trivy-results.sarif if: always()5. 部署与验证5.1 CSDN GPU环境部署在CSDN GPU环境中使用推送的镜像# deploy-to-csdn.yml - name: Deploy to CSDN GPU Environment run: | # SSH到CSDN GPU服务器并部署新镜像 ssh ${{ secrets.CSDN_SSH_USER }}${{ secrets.CSDN_SSH_HOST }} EOF docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest docker stop deoldify-app || true docker rm deoldify-app || true docker run -d \ --name deoldify-app \ --gpus all \ -p 7860:7860 \ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest EOF5.2 自动化验证测试部署后自动运行验证测试- name: Run deployment verification tests run: | # 等待服务启动 sleep 30 # 测试服务健康状态 HEALTH_STATUS$(curl -s -o /dev/null -w %{http_code} \ https://your-csdn-deployment-url/health) if [ $HEALTH_STATUS -eq 200 ]; then echo ✅ 服务健康检查通过 else echo ❌ 服务健康检查失败: $HEALTH_STATUS exit 1 fi # 测试图像处理功能 curl -X POST \ -F imagetest-image.jpg \ https://your-csdn-deployment-url/colorize \ -o result.jpg if [ -f result.jpg ]; then echo ✅ 图像处理功能正常 else echo ❌ 图像处理功能异常 exit 1 fi6. 监控与维护6.1 构建状态监控设置构建状态检查和通知- name: Notify on failure if: failure() uses: actions/github-scriptv6 with: script: | github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: Docker镜像构建失败请检查! }) - name: Notify on success if: success() uses: actions/github-scriptv6 with: script: | github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: ✅ Docker镜像构建并推送成功! })6.2 定期清理旧镜像设置定期任务清理旧的镜像版本name: Cleanup Old Images on: schedule: - cron: 0 0 * * 0 # 每周日午夜运行 workflow_dispatch: jobs: cleanup: runs-on: ubuntu-latest steps: - name: Cleanup old images run: | # 保留最近5个版本的镜像删除其他版本 docker run --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ -e REGISTRY_URL${{ env.REGISTRY }} \ -e IMAGE_NAME${{ env.IMAGE_NAME }} \ -e KEEP_LATEST5 \ registry.csdn.net/tools/docker-cleanup:latest7. 总结与最佳实践7.1 关键成功因素通过实践DeOldify镜像的CI/CD自动化我们总结了以下关键成功因素基础设施即代码将Dockerfile、工作流配置等都纳入版本控制确保环境一致性。使用清晰的目录结构和文档说明方便团队协作和维护。安全第一妥善管理敏感信息使用GitHub Secrets存储凭证。定期更新基础镜像和依赖包修复安全漏洞。实施安全扫描提前发现潜在风险。监控与反馈建立完整的监控体系包括构建状态、镜像大小、安全漏洞等指标。设置及时的通知机制确保问题能够快速发现和解决。7.2 持续优化建议性能优化利用构建缓存减少构建时间优化Dockerfile层结构使用多阶段构建减小镜像体积。成本控制合理设置资源限制定期清理无用镜像选择合适的基础镜像减少存储和传输成本。用户体验提供清晰的文档和示例设置版本标签策略方便用户选择保持向后兼容性。通过这套CI/CD实践我们实现了DeOldify镜像的自动化构建、测试、推送和部署大大提高了开发效率和部署可靠性为用户提供了稳定高效的图像上色服务。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章