Github Workflow汇总视图中CI作业被拆分至两组的问题
GitHub Actions 可重用工作流作业分组异常问题解决
问题背景
我正在打磨GitHub Actions技能,目前用小型可重用工作流搭建一套高级工作流,用于将测试应用部署到生产环境,流程如下:
- 并行运行CI作业
- 执行Lint检查
- 运行单元测试
- 运行E2E测试
- 请求代码所有者审批
- 使用
trstringer/manual-approval等待审批
- 使用
- 部署应用
- 构建Docker镜像并部署到托管服务
整个工作流执行顺序正常,但遇到一个视觉上的小问题:在汇总视图中,CI工作流的三个作业被拆成了两组,test:e2e单独一个框,而侧边栏里它们是正确分组的。
问题细节
| 侧边栏 | 汇总视图 |
|---|---|
| 三个CI作业显示在同一分组下 | test:e2e单独成组,与另外两个CI作业分离 |
CI工作流单独运行时显示正常,但在deploy-stage和deploy-prod这类调用它的部署工作流中,汇总视图就会出现分组异常。
代码结构
我有两个仓库:
仓库1:testorg/devops
- 存放多项目共享的通用工作流
- 包含两个工作流:
request-approval、deploy,均运行正常
仓库2:testorg/myapp
- 目标应用仓库,配置了生产环境CI/CD
- 使用
testorg/devops中的共享工作流 - 包含三个工作流:
ci:PR触发,包含lint、test:unit、test:e2e三个作业,单独运行无异常deploy-stage:main分支推送触发,先调用ci工作流,再调用devops的deploy工作流,存在分组问题deploy-prod:手动触发,先调用ci工作流,再调用devops的request-approval和deploy工作流,同样存在分组问题
| CI工作流 | 部署预发布环境工作流 |
|---|---|
| 单独运行时,三个作业在汇总视图中正常归为一组 | 调用CI工作流时,三个作业被拆分为两组 |
问题原因
GitHub Actions的汇总视图分组默认会根据作业的属性(比如是否使用services、执行环境的细微差异)自动分组。当通过workflow_call调用可重用工作流时,带有services的作业(比如test:e2e)会被识别为与其他无服务的作业属于不同的执行上下文,从而被单独分组。
解决方案
在CI工作流的所有作业中显式添加group属性,指定统一的分组名称,强制GitHub Actions将它们归为同一组。
修改后的myapp/ci.yml如下:
name: CI on: workflow_call: pull_request: branches: [ 'main' ] env: NODE_VERSION: '18.6.0' DB_NAME: app_test DB_USER: postgres DB_PASS: postgres jobs: lint: name: lint group: ci-jobs # 统一分组标识 runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} cache: 'yarn' - name: Install Dependencies run: yarn install --frozen-lockfile - name: Run Linter run: yarn lint unit_tests: name: test:unit group: ci-jobs # 统一分组标识 runs-on: ubuntu-latest services: postgres: image: postgres env: POSTGRES_DB: ${{ env.DB_NAME }} POSTGRES_USER: ${{ env.DB_USER }} POSTGRES_PASSWORD: ${{ env.DB_PASS }} ports: - 5432:5432 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} cache: 'yarn' - name: Install Dependencies run: yarn install --frozen-lockfile - name: Run Unit Tests run: yarn test:unit e2e_tests: name: test:e2e group: ci-jobs # 统一分组标识 runs-on: ubuntu-latest services: postgres: image: postgres env: POSTGRES_DB: ${{ env.DB_NAME }} POSTGRES_USER: ${{ env.DB_USER }} POSTGRES_PASSWORD: ${{ env.DB_PASS }} ports: - 5432:5432 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.NODE_VERSION }} cache: 'yarn' - name: Install Dependencies run: yarn install --frozen-lockfile - name: Run E2E Tests run: yarn test:e2e
原理说明
通过为每个作业指定相同的group值,GitHub Actions会强制将这些作业在汇总视图中归为同一分组,忽略自动分组的逻辑。这个属性不会影响作业的并行执行逻辑,仅改变视觉上的分组展示。
内容的提问来源于stack exchange,提问作者Sheharyar
相关产品推荐
相关产品推荐

