jenkins - 在 Jenkins 管道作业中访问 BitBucket 有效负载数据

标签 jenkins bitbucket jenkins-plugins jenkins-pipeline

我有一份 Jenkins 管道工作;它被配置为建立在由 BitBucket webhook 调用的远程触发器上。这有效并且正在触发构建。

我还需要访问 BitBucket ( described here ) 发送的有效负载数据以获取有关推送的详细信息,例如特定分支。

BitBucket plugin通常会解析此有效负载并将其作为环境变量呈现给作业,但我无法将管道作业设置为连接到该插件的特定存储库,因此它没有帮助。

我尝试通过以下几种不同方式测试数据是否可用:

node {
    stage 'Desperation'

    echo "${params.push}"
    echo "${env.BITBUCKET_PAYLOAD}"
    echo "${env.push}"
}

这些不起作用(我也没有真正期望它们起作用)。

有没有办法获得这个有效载荷数据?我唯一能想到的就是有一个自由式工作并在此基础上建立与 BitBucket 的连接,然后在重新格式化数据后调用此工作。不过,这看起来非常笨拙。

最佳答案

最终我不得不接受一种解决方法。

我的最终设置是流水线作业 my-build和自由式工作 my-build-trigger .
my-build-trigger很简单。它在 SCM 部分和 Build when a change is pushed to BitBucket 中设置了一个 git 存储库。在构建触发器部分检查。

在构建后操作中,我选择了 Trigger parameterized build on other projects .

以上很重要。 Build other projects不会触发流水线作业。它会简单地说 my-build is not buildable .

在预定义参数下将您的有效负载参数传递到您的下游(管道)作业,输入为 payload=${BITBUCKET_PAYLOAD} .
BITBUCKET_PAYLOAD是由 BitBucket 插件从 BitBucket 负载对象填充的环境变量。您可以从 BitBucket here 中查看有效负载文档

您的后期构建将如下所示:
Jenkins post-build calling Pipeline with parameters

在您的管道作业中,您应该创建一个名为 payload 的相应参数。 (字符串类型)。

在您的 Jenkinsfile你可以像这样使用这个有效载荷:

node {
    stage 'Echo stuff pointlessly'
    def payload = new groovy.json.JsonSlurper().parseText("${params.payload}")
    // Echoes the new commit hash
    echo payload.push.changes[0].new.target.hash
}

请注意,您的作业中可能会出现序列化错误 ( java.io.NotSerializableException: groovy.json.internal.LazyMap )。这就是解释in this question .简而言之,您需要取消 payload和其他使用后的 JSONObject 变量。

任何意见或改进总是受到赞赏。

关于jenkins - 在 Jenkins 管道作业中访问 BitBucket 有效负载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41639641/

相关文章:

Git 多存储库克隆并 pull 入 Jenkins

jenkins - 从 SCM 运行声明性 JenkinsFile 时,"java.lang.NoSuchMethodError: No such DSL method ' 管道 ' found"

android - 共享 jenkins 库 build.gradle 错误

Git (SSH) 在克隆/推/pull 期间挂起

git - 使用 git/bitbucket 突然开始收到 ssh_exchange_identification 错误

Github + Jenkins >> 如何在代码库中触发 "Commit and Push"上的构建?

Powershell 和 Jenkins - 以另一个用户身份执行 Powershell 脚本

docker - 尝试在Mac上的Jenkins中构建docker镜像时出现 “Permission Denied”错误

bitbucket - Bitbucket 服务器上的 Slack 集成

jenkins - Github项目和源代码管理中的Git有什么区别?