【问题标题】:Git CI/CD variable to get the number of commits behind in merge request pipelineGit CI/CD 变量以获取合并请求管道中的提交次数
【发布时间】:2021-12-01 05:56:00
【问题描述】:

如果源分支在与目标分支的提交中落后,则需要使管道失败

【问题讨论】:

    标签: git gitlab gitlab-ci


    【解决方案1】:

    issue 15310GitLab 11.6(2018 年 12 月)以来,您只能运行管道,前提是它是 merge_request

    这允许您访问 $CI_MERGE_REQUEST_TARGET_BRANCH_SHA 预定义变量,然后您可以在 rules 中使用该变量(就像在 gitlab/ci/templates/Workflows/MergeRequest-Pipelines.gitlab-ci.yml 中定义的变量一样。
    在您的情况下,特定于测试是否添加了新提交的规则:

    test:
      stage: test
      script: ./test
      only:
        - merge_requests
      rules:    
        - if: $CI_COMMIT_TAG
    
    

    但是,if 规则不允许执行 script git command you would need 的类型:

     git merge-base --is-ancestor <maybe-ancestor-commit> <descendant-commit>
     git merge-base --is-ancestor $CI_MERGE_REQUEST_TARGET_BRANCH_SHA CI_MERGE_REQUEST_SOURCE_BRANCH_SHA
    

    如果该命令返回 0 (true),则作业应该处理,并且目标分支 HEAD 是合并请求分支的祖先,这意味着后者只会在前一个(目标)分支之上直接带来新的提交。

    所以我仍然有一份工作只为merge_requests 运行,在script: 指令中执行git 命令,并调用您的实际脚本(您希望看到在合并请求中执行的脚本“以防万一如果源分支在与目标分支的提交中落后”)在一个 separate 阶段(由第一个看门人调用),使用needs: &lt;first-stage&gt;, as in here

    【讨论】:

    • 但只有在启用合并结果管道时才能检索目标和源 SHA。如果不启用它仅在源分支中运行管道,是否有任何可能性。
    • @Aswathshobi 您可以对分支名称而不是 SHA1 执行相同操作。
    猜你喜欢
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多