You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins构建中止时通知Bitbucket并区分失败状态?

Jenkins构建中止与失败状态在Bitbucket的区分方案

首先明确:Bitbucket官方的Build Status API本身支持区分多种构建状态(包括SUCCESSFUL、FAILED、INPROGRESS、STOPPED),但你使用的Bitbucket Build Status Notifier Plugin默认将Jenkins的中止(ABORTED)状态映射为失败(FAILED),所以才会无法区分。

解决办法

方案一:修改插件代码实现状态区分

插件的核心问题在于状态映射逻辑,你提到的代码段正是将ABORTED归为FAILED的部分。可以通过以下步骤修改:

  • 找到插件代码中状态映射的逻辑,将Jenkins的ABORTED状态对应到Bitbucket的STOPPED状态;
  • 重新编译插件包,替换Jenkins服务器上的原有插件;
  • 测试:手动中止Jenkins构建,Bitbucket会显示STOPPED状态,与FAILED状态明确区分开。

方案二:用Jenkins Pipeline手动调用Bitbucket API

如果不想修改插件,可以通过Pipeline脚本自定义处理不同构建状态的通知,直接调用Bitbucket API发送对应状态:

pipeline {
    agent any
    stages {
        stage('执行构建') {
            steps {
                // 这里替换成你的实际构建步骤
                sh 'echo "正在执行构建任务..."'
            }
        }
    }
    post {
        // 构建中止时发送STOPPED状态到Bitbucket
        aborted {
            script {
                def repoOwner = "你的Bitbucket用户名"
                def repoName = "你的仓库名称"
                def commitHash = env.GIT_COMMIT
                def buildUrl = env.BUILD_URL
                def bitbucketAuth = "Basic " + Base64.getEncoder().encodeToString("你的Bitbucket账号:App密码".getBytes())
                
                httpRequest(
                    url: "https://api.bitbucket.org/2.0/repos/${repoOwner}/${repoName}/commit/${commitHash}/statuses/build",
                    httpMode: 'POST',
                    contentType: 'APPLICATION_JSON',
                    headers: [Authorization: bitbucketAuth],
                    requestBody: """{
                        "state": "STOPPED",
                        "key": "jenkins-build",
                        "name": "Jenkins 构建任务",
                        "url": "${buildUrl}",
                        "description": "构建已被手动中止"
                    }"""
                )
            }
        }
        // 构建失败时发送FAILED状态到Bitbucket
        failure {
            script {
                def repoOwner = "你的Bitbucket用户名"
                def repoName = "你的仓库名称"
                def commitHash = env.GIT_COMMIT
                def buildUrl = env.BUILD_URL
                def bitbucketAuth = "Basic " + Base64.getEncoder().encodeToString("你的Bitbucket账号:App密码".getBytes())
                
                httpRequest(
                    url: "https://api.bitbucket.org/2.0/repos/${repoOwner}/${repoName}/commit/${commitHash}/statuses/build",
                    httpMode: 'POST',
                    contentType: 'APPLICATION_JSON',
                    headers: [Authorization: bitbucketAuth],
                    requestBody: """{
                        "state": "FAILED",
                        "key": "jenkins-build",
                        "name": "Jenkins 构建任务",
                        "url": "${buildUrl}",
                        "description": "构建执行失败"
                    }"""
                )
            }
        }
        // 构建成功时发送SUCCESSFUL状态(可选)
        success {
            script {
                // 类似上面的逻辑,发送SUCCESSFUL状态
            }
        }
    }
}

注:使用此方案需要确保Jenkins安装了HTTP Request Plugin,并且在Bitbucket中创建了具有仓库权限的App密码。

内容的提问来源于stack exchange,提问作者bkomo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 01:25:23