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

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

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

except:
  changes:
  - .gitlab-ci.yml

only
 - Branch A

但每次我在 .gitlab.ci-yml 文件中进行更改时,阶段 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
gitlab gitlab-ci cicd gitlab-ci-trigger
3个回答
2
投票

使用此设置,如果修改

Stage B
,则不会添加
.gitlab-ci.yml

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 进行测试。


1
投票

你可以尝试使用

workflow
规则吗?它应该确定管道是否已创建。

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

编辑:

此配置会跳过任何更改的提交

README.md
.gitlab-ci.yml
:

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

0
投票

如果要排除某些文件更改的管道,但包含其他文件更改的管道,请使用两个 if 语句:

build:
  stage: build
  script:
    - ...
  rules:
    - if: $CI_COMMIT_BRANCH == "master"
      changes:
        - ".gitlab-ci.yml"
        - "mkdocs.yml"
      when: never
    - if: $CI_COMMIT_BRANCH == "master"
      changes:
        - Dockerfile
        - "*.yml"

如果第一个 if 语句匹配,则不会评估第二个 if 语句。

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