如何触发 GitLab 管道以进行分支 master 上的标记提交?

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

一旦我将标记的提交推送到分支主控,我想触发管道。不过,我不确定它是否有效,因为到目前为止我还没有成功。

.gitlab-ci.yml

variables:
  JEKYLL_ENV: production
  LC_ALL: C.UTF-8

stages:
  - publish
  - release
  # - deploy

pages:
  stage: publish
  image: ruby
  rules:
    - if: $CI_COMMIT_BRANCH == "master" && $CI_COMMIT_TAG != ""
      when: always
  before_script:
    - gem install bundler
    - bundle install
  script:
    - bundle exec jekyll build -d public
  artifacts:
    paths:
    - public

release:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  rules:
    - if: $CI_COMMIT_BRANCH == "master" && $CI_COMMIT_TAG != ""
      when: always
  script:
    - echo 'running release job'
  release:
    name: 'Release $CI_COMMIT_TAG'
    description: 'Created using gitlab-ci.yml. $EXTRA_DESCRIPTION'
    tag_name: '$CI_COMMIT_TAG' 
    ref: '$CI_COMMIT_TAG'
  artifacts:
    paths:
    - public
    expire_in: 1 day

我尝试过的:

`- if: '$CI_COMMIT_TAG && $CI_COMMIT_BRANCH == "master"'`

尽管如此,最后一条规则根本不会触发管道。

gitlab gitlab-ci gitlab-ci-runner gitlab-api
2个回答
1
投票

您可以检查提交是否有标签

rules:
  - if: $CI_COMMIT_BRANCH == "master" && $CI_COMMIT_TAG != ""
    when: manual

或者如果您的标签遵循

tag-1
tag-2
等约定,请使用正则表达式模式

rules:
  - if: $CI_COMMIT_BRANCH == "master" && $CI_COMMIT_TAG =~ /tag\-[0-9]/
    when: manual

0
投票

实际答案在已接受答案的评论中

此解决方案自

CI_COMMIT_BRANCH
CI_COMMIT_TAG
起不起作用 在任何给定的管道中具有互斥的可用性。如果
CI_COMMIT_TAG
存在,这意味着它是一个标签管道并且
CI_COMMIT_BRANCH
未定义。相反,如果
CI_COMMIT_BRANCH
是 存在,
CI_COMMIT_TAG
不得存在。这是因为,就 git 语义中,标签不属于任何分支,也不具有 与分支机构的任何关联。标签仅指向提交 SHA 可能存在于多个分支中,甚至根本没有分支。 – 赛特克

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