使用 gitlab CICD 自动提交到主分支

问题描述 投票:0回答:1

我们的项目包含一些子模块,并遵循以下结构:

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 管道的其余部分执行(基本上只要按下合并按钮就应该执行)

gitlab gitlab-ci
1个回答
0
投票

到目前为止我们所有的工作都有这样的规则:

- if: $CI_PIPELINE_SOURCE == 'merge_request_event'

如果管道仅包含

.pre
.post
阶段的作业,则管道将不会运行。由于您提到所有其他作业都有此规则,这意味着您的
update_submodules
作业将是分支管道运行时唯一存在的作业,并且由于它处于
.post
阶段,因此管道将不会运行。正如文档中所述:

如果管道仅包含

.pre
.post
阶段的作业,则它不会运行。不同阶段必须至少有一项其他工作。

您可以通过为您的

.post
作业使用实际的阶段名称而不是
update_submodules
来解决此问题,或者确保分支管道中包含至少一项不在
.post
.pre
中的其他作业,这将允许您
.post
要运行的作业。

© www.soinside.com 2019 - 2024. All rights reserved.