Jenkins bitbucket-build-status-notifier-plugin 发送状态到共享流水线库的问题

62次阅读
没有评论

问题描述

在实施Jenkins bitbucket-build-status-notifier-plugin时遇到了问题。该插件的GitHub仓库在此处找到:https://github.com/jenkinsci/bitbucket-build-status-notifier-plugin

用户的情况是这样的:他们使用了Jenkinsfile的共享流水线代码功能,以及多分支流水线。所有的Jenkinsfile代码都存在于一个仓库中,每个应用程序只对该仓库中的一个函数进行参数化调用。

问题出现在插件发送状态时 – 它将状态发送到了共享流水线代码的仓库,而不是正在构建的应用程序的仓库!插件在其他方面工作正常,可以进行身份验证并快速发送状态。

这个插件不能参数化以允许用户传递提交ID,这意味着提交ID是从环境变量中派生的,可能是以其他插件不使用的新颖方式。插件明确提到了对Jenkinsfile和多分支流水线的更改。用户怀疑在执行 scm checkout 命令之前,可能存在竞争条件,也许 bitbucket 插件是在任何 scm checkout 调用之前初始化的?

用户是否有关于调试这个问题的建议?jenkins.err文件不包含任何错误,因为没有抛出异常。是否有一个环境变量可以更改,以强制从共享流水线代码仓库切换到应用程序代码仓库的上下文?

解决方案

方案1 – 升级插件版本

根据回答1中提到的问题,这是一个已知的 bug。可以在 JENKINS-42878JENKINS-41996 中找到相关内容。这个 bug 已经在上游得到解决,这意味着你可以通过将插件升级到最新版本来修复这个 bug。

方案2 – 使用 repoSlug 参数

根据回答2中的信息,插件的一个修复是添加了 repoSlug 参数,从而将状态发送到正确的仓库。在更新之前的情况下,构建状态的发送如下所示:

post {
    success {
        bitbucketStatusNotify(
            buildState: 'SUCCESSFUL',
            commitId: env.GIT_COMMIT
        )
    }
    failure {
        bitbucketStatusNotify(
            buildState: 'FAILED',
            commitId: env.GIT_COMMIT
        )
    }
}

现在,可以通过使用 repoSlug 参数来解决:

post {
    success {
        bitbucketStatusNotify(
            buildState: 'SUCCESSFUL',
            repoSlug: 'repoSlug,即 repositoryName,例如 some-app',
            commitId: env.GIT_COMMIT
        )
    }
    failure {
        bitbucketStatusNotify(
            buildState: 'FAILED',
            repoSlug: 'repoSlug,即 repositoryName,例如 some-app',
            commitId: env.GIT_COMMIT
        )
    }
}

需要注意的是,repoSlugcommitId 参数只有在同时指定时才起作用。

方案3 – 使用替代工具

回答3中提到,你还可以使用 bcbsn 作为替代工具。这个工具可以将构建状态与正确的提交关联,并将构建状态发送到正确的仓库。

这些方案应该能够帮助你解决问题,确保构建状态正确地发送到目标仓库。如果你仍然遇到问题,可以尝试组合这些方案或深入研究插件的文档,看是否有其他可行的解决方案。

正文完