我们的项目包含一些子模块,并遵循以下结构:
main_project
modules/subproject1 (submodule)
modules/subproject2 (submodule)
modules/subproject3 (submodule)
每当我们对任何子项目提出 MR 时,我们都会运行整个项目的 CICD 管道。到目前为止我们所有的工作都有这个规则:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
现在我正在尝试为 CICD 添加一项额外的作业,以便仅在提交到相关子模块的主分支时才运行。我的主要想法是我想启动对
main_project
的自动提交来更新子模块以指向该特定分支的新提交。
现在我只想在有问题的子模块发生提交时启动一个作业:我尝试添加以下作业:
update_submodules:
stage: .post
script:
- echo "Finished updating submodules - dummy "
rules:
- if: $CI_COMMIT_BRANCH == 'main'
when: always
但是,似乎这项工作完全被忽略了 - 我开始想知道 gitlab 是否可以做到这一点?因为这个作业应该独立于 CICD 管道的其余部分执行(基本上只要按下合并按钮就应该执行)
到目前为止我们所有的工作都有这样的规则:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
如果管道仅包含
.pre
或.post
阶段的作业,则管道将不会运行。由于您提到所有其他作业都有此规则,这意味着您的 update_submodules
作业将是分支管道运行时唯一存在的作业,并且由于它处于 .post
阶段,因此管道将不会运行。正如文档中所述:
如果管道仅包含
或.pre
阶段的作业,则它不会运行。不同阶段必须至少有一项其他工作。.post
您可以通过为您的
.post
作业使用实际的阶段名称而不是 update_submodules
来解决此问题,或者确保分支管道中包含至少一项不在 .post
或 .pre
中的其他作业,这将允许您.post
要运行的作业。