运行 流水线成功后的 Jenkins 独立阶段

Run Jenkins stage after pipeline success independently

所以我有一个 groovy Jenkinsfile 脚本,它在我的 Jenkins 服务器上 运行s 用于拉取请求。在我的回购协议中,我有一个受保护的主分支。我希望我的测试和内容仅在某些分支上 运行 但我想要发生的是当检测到正确的分支时它将尝试自动合并拉取请求。我遇到的问题是我需要管道作业在此阶段工作之前报告状态成功。例如

pipeline {
  agent none
  options {...}
  environment {...}
  stages {
    stage("1") {...}
    stage("2") {...}
    stage('Merge Pull Request') {
            when {
                allOf{
                    not { branch 'master' }
                    expression{env.CHANGE_TITLE.startsWith('branch title')}
                }
            }
            agent {
                docker {
                    label '...'
                    image '...'
                }
            }
            steps {
                touch "f.txt"
                sh "echo ${GITHUB_TOKEN} > f.txt"
                sh "gh auth --hostname <hostname> login --with-token < f.txt"
                sh "gh pr merge -s ${env.CHANGE_URL}"
            }
        }
  }
}

这按照我想要的方式工作,但需要注意的是,合并发生在状态报告回来之前,所以它失败了,因为我正在尝试合并到一个尚未成功的受保护分支。关于我可以做什么或如何触发另一个不在下游并等待该作业完成的作业的想法?

据推测,您希望分支受到保护,以便无法在管道外部进行手动合并。 为此,我还假定您在受保护的分支设置中定义了必需的提交状态检查。

默认情况下,管道会在管道的开头启动默认的'pr-merge'状态检查,然后在最后标记为passed/failed。 PR 合并被拒绝,因为所需的状态检查尚未通过。

为了使您的解决方案生效,最后阶段(“合并拉取请求”)应首先将所需的状态检查设置为已通过(通过 GitHub API),然后进行 PR合并 api 个调用。

顺便说一下,您可以选择使用与 Jenkins 默认使用的不同的 PR 检查,并根据需要命名。与其他人无法通过使用 no-op 管道设置流氓 Jenkins 服务(这将自动将状态检查标记为“已通过”)相比,这具有额外的优势。不是iron-clad,但需要更多的努力。