[T.10] 团队项目:CI/CD实践

[T.10] 团队项目:CI/CD实践

项目 内容
这个作业属于哪个课程 2026年春季软件工程
这个作业的要求在哪里 [T.10] 团队项目:CI/CD实践
我在这个课程的目标是 接触理解应用现代软件工程常用的开发方式,锻炼自己编写代码以及团队协作的能力
这个作业在哪个具体方面帮助我实现目标 完成CI/CD实践

一、选用方案

CI/CD 实践我们选择 方案 A:GitHub Actions,并选择“打包”作为自动化任务。我们的团队项目是基于 Godot 4.6.2 开发的游戏项目,代码托管在 GitHub 仓库中,因此 GitHub Actions 与当前项目的协作方式最匹配。

选择该方案主要有以下理由:

  • 与仓库平台天然集成:项目已经托管在GitHub上,GitHub Actions可以直接监听push和pull request,不需要额外搭建 CI 服务器。
  • 适合团队协作:相比Git Hooks,GitHub Actions在远端统一执行,所有成员看到的是同一套构建结果,不依赖每个人本地环境是否配置正确。
  • 更贴合 Godot 游戏项目需求:游戏项目最终需要导出可运行产物,因此自动打包Windows与Web版本,比单纯做格式检查更能验证项目是否处于可交付状态。
  • 结果可追溯:每次运行都会保留日志、状态和构建产物,便于在 PR 合并前发现导出失败、资源缺失或配置错误等问题。

二、配置文件

配置文件的位置为.github/workflows/godot-ci.yml,具体内容如下:

name: "HexaVigil CI - Windows & Web Export"

on:
  push:
    branches: [ "dev", "main" ]
  pull_request:
    branches: [ "dev", "main" ]

env:
  GODOT_VERSION: 4.6.2
  EXPORT_NAME: HexaVigil
  PROJECT_PATH: . 

jobs:
  export-windows:
    name: Windows Export
    runs-on: ubuntu-24.04
    container:
      image: barichello/godot-ci:4.6.2
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          lfs: true
      - name: Setup
        run: |
          mkdir -v -p ~/.local/share/godot/export_templates/
          mkdir -v -p ~/.config/
          mv /root/.config/godot ~/.config/godot
          mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
      - name: Windows Build
        run: |
          mkdir -v -p build/windows
          EXPORT_DIR="$(readlink -f build)"
          cd $PROJECT_PATH
          godot --headless --verbose --export-release "Windows Desktop" "$EXPORT_DIR/windows/$EXPORT_NAME.exe"
      - name: Upload Artifact
        uses: actions/upload-artifact@v4
        with:
          name: windows
          path: build/windows

  export-web:
    name: Web Export
    runs-on: ubuntu-24.04
    container:
      image: barichello/godot-ci:4.6.2
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          lfs: true
      - name: Setup
        run: |
          mkdir -v -p ~/.local/share/godot/export_templates/
          mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable
      - name: Web Build
        run: |
          mkdir -v -p build/web
          EXPORT_DIR="$(readlink -f build)"
          cd $PROJECT_PATH
          godot --headless --verbose --export-release "Web" "$EXPORT_DIR/web/index.html"
      - name: Upload Artifact
        uses: actions/upload-artifact@v4
        with:
          name: web
          path: build/web
      - name: Install rsync
        run: |
          apt-get update && apt-get install -y rsync
      - name: Deploy to GitHub Pages
        uses: JamesIves/github-pages-deploy-action@releases/v4
        with:
          branch: gh-pages
          folder: build/web

我们通过这个配置文件定义了一个名为 HexaVigil CI - Windows & Web Export 的 workflow。它使用 barichello/godot-ci:4.6.2 容器作为 Godot 构建环境,并通过 Godot 的 headless 模式执行导出。项目中的 export_presets.cfg 提供了 Windows Desktop 和 Web 两个导出预设,workflow 分别根据这两个预设生成 Windows 可执行文件和 Web 页面产物。

三、执行流程

本 workflow 的分支范围为{dev, main},触发条件包括两类:

  • push到dev或main。
  • 向dev或main发起pull request

一次完整执行流程如下:

  1. 开发者向dev / main分支push,或向这两个分支发起PR。
  2. GitHub Actions自动匹配 .github/workflows/godot-ci.yml 中的触发规则,启动 workflow。
  3. workflow 分别启动两个job:Windows Export和Web Export。
  4. 每个job首先通过actions/checkout@v4 拉取仓库代码,并启用 LFS 支持。
  5. CI容器准备Godot 4.6.2的导出模板,使GitHub远端环境具备Godot导出能力。
  6. Windows Export 执行:godot --headless --verbose --export-release "Windows Desktop" "$EXPORT_DIR/windows/$EXPORT_NAME.exe" 生成Windows构建产物,并上传为名为 windows 的 artifact。
  7. Web Export 执行:godot --headless --verbose --export-release "Web" "$EXPORT_DIR/web/index.html" 生成 Web 构建产物,并上传为名为 web 的 artifact。
  8. Web 构建完成后,workflow 使用 JamesIves/github-pages-deploy-action 将 build/web 部署到 gh-pages 分支,用于 GitHub Pages 展示。

四、结果展示

HexaVigil CI workflow 触发记录

posted @ 2026-04-28 14:41  Fruit_Inc  阅读(39)  评论(0)    收藏  举报