我有一份 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 中查看有效负载文档
您的后期构建将如下所示:
在您的管道作业中,您应该创建一个名为 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/