GitLab CI - 添加标签时避免构建

djn*_*jna 9 git gitlab gitlab-ci

添加 git 标签时如何防止触发 gitlab ci 管道?我在本地运行此命令(而不是在 gitlab-ci 作业中)

git tag -a "xyz"
Run Code Online (Sandbox Code Playgroud)

然后推动标签;这会触发各种管道。我想从运行中排除其中一些管道。

我想从这样的问题的思想变化这个; 这个问题是使用,我想排除,所以我想除了。那里的答案有两种变体,一种有参考,一种没有。

build:  
  # ... my work here ...  
  except:
    - tags


build:  
  # ... my work here ...  
  except:
    refs:
      - tags
Run Code Online (Sandbox Code Playgroud)

两者似乎都没有任何效果;我添加了一个标签,构建仍然发生。

我的理解在这里可能完全错误,因为标签这个词似乎有三种可能的含义,并且在阅读文档或示例时,我并不总是确定哪种含义适用:

  1. 使用git tag应用的Git 标签
  2. Gitlab CI 标签用于确定哪些跑步者选择工作
  3. 用于通过 REST API 触发管道的提交的引用标识符。这通常是一个分支名称,但也可以是一个 git 标签。

我有兴趣控制如果第一种情况会发生什么。到目前为止,从评论中可以清楚地看出“除了:-tags”与我的情况无关,那么有没有可行的方法?

ibe*_*dev 40

看来 GitLab 建议使用rules而不是except按照文档

only 和 except 没有被积极开发。规则是控制何时将作业添加到管道的首选关键字。

所以它会是

your_job:
  stage: your_stage
  script:
    - echo "Hello"
  rules:
    - if: $CI_COMMIT_TAG
      when: never 
    - when: always
Run Code Online (Sandbox Code Playgroud)


mak*_*aki 20

Except tags 如果您想跳过标签的构建,这正是您应该使用的。

您需要确保了解提交 vs 分支 vs 标签

为了说明将标记的提交推送到 gitlab 时会发生什么,我执行了以下操作:

  1. .gitlab-ci.yml使用以下内容创建:
tests_always_run:
    script:
      - echo I should always execute
tests_except_tags:
    script:
      - echo I skip tagged triggers
    except:
      - tags
Run Code Online (Sandbox Code Playgroud)
  1. 提交的更改、标记的提交和推送--follow-tags以确保标记也传播到服务器:
git add .gitlab-ci.yml
git commit -m 'my great yml with except tags'
git tag -a "abc" -m "Test tag"
git push --follow-tags
Run Code Online (Sandbox Code Playgroud)

图示结果: 标记的提交管道结果

如果你想跳过选定提交的 CI,那么你可以使用git push -o ci.skip,灵感来自这篇文章


LeG*_*GEC 6

(注意:这是一个格式化的评论,而不是一个答案)

为了调试触发管道的条件:

gitlab 的文档提到了运行 CI 作业时设置的几个变量,其中:

  • CI_COMMIT_REF_NAME:构建项目的分支或标签名称
  • CI_COMMIT_BRANCH:提交分支名称。仅在构建分支时出现。
  • CI_COMMIT_TAG:提交标签名称。仅在构建标签时出现。

让您的构建作业输出其中一些变量(例如:)echo "triggered by ref : " $CI_COMMIT_REF_NAME以查看触发您的作业的原因。