如何根据条件添加“需求”

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

有没有办法添加需求才能运行作业?或者,如果您在特定分支上,是否有特定的方法来添加条件,请将此作业添加为依赖项?到目前为止,我的规则部分中有一个“需求”。审核作业仅在功能分支上运行。有人问类似的问题

test:sauce:
  ...
  script:
    - export MASTER_URL=https://masterurlexample.io
    - export TEST_PREVIEW_APP=$CI_COMMIT_REF_SLUG
    - cd $MAVEN_DIRECTORY
    - if [ "$CI_COMMIT_BRANCH" == "master" || "$EMULATE_BRANCH" == "master" ]; then
        export TEST_PREVIEW_APP=$MASTER_URL;
        needs:
      fi;
    - echo "Testing on $TEST_PREVIEW_APP"
    - echo "starting test"
    - sleep 30
    - mvn -U $MAVEN_CLI_OPTS ...
  rules:
    - if: "$CI_COMMIT_BRANCH" != "master"
      needs: [ "review "]
gitlab gitlab-ci
2个回答
1
投票

我认为不可能。

解决方法可以是创建一个模板作业(名称以

.
开头)来包含您的代码,并将作业扩展两次,一次针对案例
"$CI_COMMIT_BRANCH" != "master"
needs: [ "review "]
,另一次针对
- if: "$CI_COMMIT_BRANCH" == "master"
无需需要部分。

编辑: 我尝试更好地解释自己,我的想法是使用像

这样的隐藏工作
.hidden_job:
  script:
    - YOUR CODE HERE

之后,将这项工作扩展到具有正确需求的其他工作,例如:

job1:
  extends: .hidden_job
  rules:
    - if: "$CI_COMMIT_BRANCH" != "master"
    needs: [ "review "]


job2:
  extends: .hidden_job
  rules:
    - if: "$CI_COMMIT_BRANCH" == "master"

通过这种方式,您可以定义具有不同规则和需求的多个作业来满足您的要求,而无需每次都重复您的代码。 (例如,仅在特定分支上使用特定需求,例如 job1)


0
投票

在现代 Gitlab 上,还有另一种解决方法,其形式为

needs:optional
语法

如果

'review'
作业仅存在于感兴趣的分支上,您可以将其标记为“可选”,gitlab将忽略它不存在于其他分支的管道上的事实。

test:sauce:
 # ...
 needs:
 - job: 'review'
   optional: true

如果

'review'
作业无条件存在,您可以制作一个仅存在于分支上的虚拟作业。

review_on_master:
  needs: ['review']
  variables:
    GIT_STRATEGY: none
  script: ['true']
  rules:
  - if: "$CI_COMMIT_BRANCH" != "master"
    when: never

test:sauce:
 # ...
 needs:
 - job: 'review_on_master'
   optional: true
© www.soinside.com 2019 - 2024. All rights reserved.