gitlab ci:手动或仅在master时运行构建作业

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

是否可以使用以下要求定义构建作业的gitlab-ci文件:

  • 手动OR时执行
  • 由主推送执行

我想到了类似的东西,但这是错误的:

build_jar:
stage: build
script:
  - echo "build jar"
artifacts:
  paths:
    - jar/path/*.jar
only:
  - master
when: manual

对我来说,唯一的解决方案是拥有两个作业,一个用于主推,一个用于手动输入。但缺点是,在gitlab中它变得令人困惑

gitlab jobs gitlab-ci
3个回答
12
投票

我也没有找到一种方法在一个块中执行此操作,并且必须使用yaml锚点并拆分为两个单独的块:

.deploy_common: &deploy_common
# common config HERE

deploy_master_CD:
  <<: *deploy_common
  only:
    refs:
      - master

deploy_manual:
  <<: *deploy_common
  when: manual

3
投票

自己遇到这个问题,最终想出来了(或者根据我的需要想出了一个可行的版本):

build_jar:
stage: build
script:
  - echo "build jar"
artifacts:
  paths:
    - jar/path/*.jar
only:
  variables:
  - $CI_PIPELINE_SOURCE == "web"
  - $CI_COMMIT_REF_NAME == "master"

变量块下的条件一起进行OR运算,因此当它在主分支上或从Web启动时可以运行作业(在我的情况下可以与'manual'互换)。这不会像'when:manual'那样暂停管道,但我不想让它做到这一点。

以下是文档:https://docs.gitlab.com/ee/ci/yaml/#only-and-except-complexhttps://docs.gitlab.com/ee/ci/variables/

希望这有帮助!


1
投票

你想要的确切的东西目前是不可能的。虽然这两个工作(一个与only: master,另一个与when: manual应该提供替代。

如果你把它们放在同一个阶段我猜不应该那么混乱。

你也可以使用像special yaml features这样的anchors来保持DRY

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