如何排除 gitlab-ci.yml 更改触发作业

Posted

技术标签:

【中文标题】如何排除 gitlab-ci.yml 更改触发作业【英文标题】:How to exclude gitlab-ci.yml changes from triggering a job 【发布时间】:2021-12-09 07:29:48 【问题描述】:

我无法找到解决方案来解决如何忽略 .gitlab-ci.yml 中所做的更改以触发工作。到目前为止,我已经尝试了以下选项:

except:
  changes:
  - .gitlab-ci.yml

only
 - Branch A

但每次我在 .gitlab.ci-yml 文件中进行更改时,Stage B 的作业都会添加到管道中并显示为已跳过。

以下是 .gitlab-ci.yml 中定义的作业。你有什么建议吗?

我不希望在以下情况下将阶段 B 作业添加到管道中:

i) 对 .gitlab-ci.yml 进行推送(手动更改文件或 git push 命令) ii) .gitlab-ci.yml 的任何合并请求

stages:
 - A
 - B
 
Stage A:
  stage: A
  script:
    - echo "TEST"
  rules:
    - if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.DEV\d+/'
  tags:
    - runner
    
Stage B:
  stage: B
  script:
    - echo "TEST"
  when: manual
  tags:
    - runner

【问题讨论】:

添加 'except' 规则后的输出是什么? 除了规则没有被调用,并且作业被添加到管道中。 【参考方案1】:

使用此设置,如果修改了 .gitlab-ci.yml,则不会添加 Stage B

stages:
 - A
 - B

Stage A:
  stage: A
  script:
    - echo "Stage A"
  tags:
    - runner

Stage B:
  stage: B
  script:
    - echo "Stage B"
  rules:
    - changes:
      - ".gitlab-ci.yml"
      when: never
    - when: manual
  tags:
   - runner

否则Stage B 会显示在管道中并且可以手动运行。使用 GitLab CI CE 14.1.0 测试。

【讨论】:

但它是否仍会显示其他文件推送/合并更改的手动按钮选项? 是的,正如我编写和测试的那样,如果修改了至少一个文件但.gitlab-ci.yml,则会显示手动作业Stage B【参考方案2】:

您可以尝试使用workflow 规则吗?它应该确定是否创建了管道。

P.S: 有人抱怨 a couple of years ago 在异常发生后无法激活手动作业,但看起来这是一个错误。我找不到帖子中提到的问题

编辑:

此 conf 会跳过任何更改 README.md.gitlab-ci.yml 的提交:

workflow:
    rules:
        - if:
          changes: 
            - README.md
            - .gitlab-ci.yml
          when: never

【讨论】:

但工作仍将被添加到管道中以供其他文件推送/合并更改?请指教。 对于不修改changes 中列出的任何文件的每次推送,是的。

以上是关于如何排除 gitlab-ci.yml 更改触发作业的主要内容,如果未能解决你的问题,请参考以下文章

如何在gitlab-ci.yml中将文件从存储库复制到用于作业的docker容器中

如何在 gitlab 中触发特定作业

gitlab-ci.yml、before_script 和 artifact

为合并请求触发的管道运行应用 GitLab CI/CD 管道更改

.gitlab-ci.yml配置参数

Gitlab-CI:测试作业失败