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

w8f9ii69  于 2023-09-29  发布在  Git
关注(0)|答案(5)|浏览(165)

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

git tag -a "xyz"

然后推动标签;并且这触发了各种管道。我想排除其中一些管道的运行。
我正在尝试从问题的想法变化,如this;这个问题使用了only,我想排除,所以我试着用except。这里的答案有两个变体,一个带refs,一个不带。

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

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

两者似乎都没有任何效果;我添加一个标记,构建仍然发生。
我的理解可能完全错误,因为这个词似乎有三种可能的含义,当阅读文档或示例时,我并不总是确定哪种含义是适用的:
1.使用git tag应用Git标签

  1. Gitlab CI标签用于确定哪些跑步者选择作业
    1.提交的ref标识符,用于通过REST API触发管道。这通常是一个分支名称,但也可以是一个git标签。
    我只想控制第一个案子的结果。从目前的评论来看,似乎很清楚“除了:-tags”与我的案例无关,那么有没有什么方法确实有效呢?
ijnw1ujt

ijnw1ujt1#

看起来GitLab建议使用rules而不是except
只有和除了没有被积极开发。rules是控制何时向管道添加作业的首选关键字。
所以

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

nhhxz33t2#

Except tags正是你应该使用的,如果你想跳过标签的构建。
您需要确保理解commit vs branches vs tags
为了说明当你将tagged commit推送到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,它的灵感来自this article

3phpmpom

3phpmpom3#

(note:这是一个格式化的评论而不是一个答案)
要调试触发管道的条件,请执行以下操作:
gitlab's doc提到了运行CI作业时设置的几个变量,其中:

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

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

uyhoqukh

uyhoqukh4#

我遇到了同样的情况,我的解决方案是这样的:
前::x1c 0d1x
后:

这两个stage都配置在我的.gitlab-ci.yml文件中,名称不同“Dev-UnitTests”,它只在有人提交到仓库时执行,对分支“test”中的tags没有影响

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   
...
5us2dqdw

5us2dqdw5#

为了避免整个管道,使用“-o ci.skip”:

git tag -a "v1.0.0" -m "Release version 1.0.0"
git push origin "v1.0.0" -o ci.skip

相关问题