【问题标题】:How to configure GitLab CI Pipeline only on merge requests and that too only for specific branches?如何仅在合并请求上配置 GitLab CI 管道,并且也仅针对特定分支?
【发布时间】:2020-03-06 19:41:21
【问题描述】:

我有以下配置来启用合并请求的管道。我希望此管道仅在对少数特定分支的合并请求时运行。 例如:“release/some-xyz-branch”和“develop”分支。 怎么办?

test_job:
    stage: test
    only:
        - merge_requests
    script:
        - npm run test

我尝试在“-merge_requests”之后添加分支名称,如下所示,但它没有按预期工作。

test_job:
    stage: test
    only:
        - merge_requests
        - develop
        - release/some-xyz-branch
    script:
        - npm run test

【问题讨论】:

  • 我可以使用 '&&' 运算符并将其写成“merge_requests && develop && release/some-xyz-branch”吗?

标签: git continuous-integration gitlab gitlab-ci gitlab-ci-runner


【解决方案1】:

我们可以将 $CI_COMMIT_REF_NAME 预定义的环境变量与 only:variables 结合使用来完成此行为

test_job:
    stage: test
    only: [merge_requests]
    except:
      variables:
         - $CI_COMMIT_REF_NAME =~ /^docs-/
    script:
        - npm run test

注意:docs- 代表 refs/merge-requests/:iid/head

【讨论】:

    【解决方案2】:

    您可以使用variablesrefs 来运行管道。

    test_async:
      script:
        - echo "Test Async"
      only:
        refs:
          - merge_requests
        variables:
          - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^release\/.*$/
    
    test_db:
      script:
        - echo "Test db"
      only: 
        - master  
    

    在上面的 yaml 中,test_async 只会在创建合并请求并且目标分支是 develop 或以 release/ 开头时运行。 test_db 只会在提交给 master 时运行。

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 2016-02-27
      • 2022-11-04
      • 1970-01-01
      • 2022-11-04
      • 2022-11-07
      相关资源
      最近更新 更多