仅当引用或可变条件时才无法执行 GitLab 运行程序作业

Ale*_*z49 5 gitlab gitlab-ci gitlab-ci-runner

我希望 CI 仅在我位于master合并请求计划管道 变量COVERAGE_TEST等于时执行此作业ON

c++TestCoverage:
  stage: analysis
  script: "./ciScripts/testCoverageScript.sh"
  tags:
    - framework
  dependencies:
    - c++Build
  variables:
    GIT_STRATEGY: fetch
  artifacts:
    paths:
      - ./build/test_coverage/
    expire_in: 1 week
    when: on_success
Run Code Online (Sandbox Code Playgroud)

我尝试添加以下几行:

only:
  refs:
    - master
    - merge_requests
    - schedule
  variables:
    - $COVERAGE_TEST == "ON"
Run Code Online (Sandbox Code Playgroud)

但结果实际上是 -> If ((Master || MergeRequest || ScheduledPipeline) && COVERAGE_TEST == ON)


我也尝试过:

only:
  variables:
    - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"
    - $CI_PIPELINE_SOURCE == 'merge_request_event'
    - $CI_PIPELINE_SOURCE == 'schedule'
    - $COVERAGE_TEST == "TRUE" 
Run Code Online (Sandbox Code Playgroud)

CI_PIPELINE_SOURCE == 'merge_request_event'不能按我想要的方式工作,因为如果我在合并请求中有分支并且我推送了一些更改,则值CI_PIPELINE_SOURCEpush


有办法做到吗?

Nic*_*ter 2

您需要使用rulesandif 关键字来测试所有变量值,并在测试之间放置 OR。

您的情况的正确配置应该是:

  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "schedule" || $COVERAGE_TEST == "TRUE"'
      when: always
Run Code Online (Sandbox Code Playgroud)