繁体   English   中英

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

[英]GitLab CI - avoid build when adding tag

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

git tag -a "xyz"

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

我正在尝试从诸如此类的问题中改变想法 这个问题使用 ,我想排除,所以我正在尝试除外。 那里的答案有两种变体,一种有参考文献,一种没有。

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


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

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

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

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

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

如果你想跳过标签的构建, 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
  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

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

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

它看起来像GitLab建议使用rules ,而不是except文件

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

所以它会

your_job:
  stage: your_stage
  script:
    - echo "Hello"
  rules:
    - if: $CI_COMMIT_TAG
      when: never 
    - when: always

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

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

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

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

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

我遇到了同样的情况,我的解决方法是:

前:: 前

后: 后

这两个阶段都在 my.gitlab-ci.yml 文件中配置,具有不同的名称“ Dev-UnitTests ”,它仅在有人提交到存储库时执行,对分支“ test ”的标签没有影响

Dev-UnitTests:
  stage: pruebas 
  script:
    - mvn $MAVEN_CLI_OPTS test
  artifacts:
    when: always
    reports:
      junit: 
        - target/surefire-reports/*Test.xml
        - target/failsafe-reports/*Test.xml
      cobertura: target/site/jacoco/jacoco.xml
  tags:
    - shell 
  except: 
    - test 
    - tags   

单元测试,仅在分支测试上完成合并时运行

Unit Tests:
  stage: pruebas 
  script:
    - mvn $MAVEN_CLI_OPTS test
  artifacts:
    when: always
    reports:
      junit: 
        - target/surefire-reports/*Test.xml
        - target/failsafe-reports/*Test.xml
      cobertura: target/site/jacoco/jacoco.xml
  tags:
    - shell 
  only: 
    - test

创建标签时没有再次运行任何管道,希望对您有所帮助。

关键是:

...
 except:  
    - tags   
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM