Tom*_*eld 7 bitbucket jenkins jenkins-plugins jenkins-pipeline
我有詹金斯的管道工作; 它被配置为构建在BitBucket webhook调用的远程触发器上.这有效并且正在触发构建.
我还需要访问BitBucket发送的有效负载数据(此处描述)以获取有关推送的详细信息,例如特定分支.
该到位桶插件通常会分析这个有效载荷,并将其提交给工作作为一个环境变量,但我不能设置流水线作业为连接到该插件特定的回购,所以它并不能帮助.
我尝试测试以查看数据是否以几种不同的方式可用:
node {
stage 'Desperation'
echo "${params.push}"
echo "${env.BITBUCKET_PAYLOAD}"
echo "${env.push}"
}
Run Code Online (Sandbox Code Playgroud)
这些不起作用(我也没想到它们).
有没有办法得到这个有效载荷数据?我唯一能想到的就是拥有一个自由式工作并建立与BitBucket的连接,然后在重新格式化数据后调用此工作.但这看起来非常笨重.
Tom*_*eld 14
最终我不得不接受一个解决方法.
我的最终设置是Pipeline工作my-build
和Freestyle工作my-build-trigger
.
my-build-trigger
很简单.它在SCM部分中设置了一个git repo,并Build when a change is pushed to BitBucket
在build triggers部分中进行了检查.
在我选择的后期构建操作中Trigger parameterized build on other projects
.
以上是重要的.Build other projects
不会触发管道作业.它会简单地说my-build is not buildable
.
将有效负载参数传递到预定义参数下的下游(管道)作业,输入为payload=${BITBUCKET_PAYLOAD}
.
BITBUCKET_PAYLOAD
是由BitBucket有效负载对象的BitBucket插件填充的环境变量.您可以在此处查看BitBucket的有效负载文档
在管道作业上,您应该创建一个名为payload
(String type)的相应参数.
在你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
}
Run Code Online (Sandbox Code Playgroud)
请注意,您的工作可能会出现序列化错误(java.io.NotSerializableException: groovy.json.internal.LazyMap
).在这个问题中解释了这一点.简而言之,您需要payload
在使用后使其他JSONObject变量无效.
任何评论或改进总是受到赞赏.
小智 5
我们是这样解决的:
后者允许您接收 application/json 格式的数据,这就是 BitBucket 发送的数据。
在您的作业设置中,确保启用以下选项:
另外,请务必检查以下两项:
Print post content
Print contributed variables
这将在你的 jenkins 控制台中显示它收到的所有变量,同时分解 json 并将其转换为普通变量。看到所需的变量名称后,请确保将它们“注册”为项目的普通变量。
我知道您询问过有关使用 Jenkins Pipeline 的问题,并且此解释是使用 WebUI。的文档generic-webhook-trigger
涵盖了适合您的情况的代码片段。我决定添加 WebUI 解释,以便您能够理解它的要点。
归档时间: |
|
查看次数: |
3965 次 |
最近记录: |