我有詹金斯的管道工作; 它被配置为构建在BitBucket webhook调用的远程触发器上.这有效并且正在触发构建.
我还需要访问BitBucket发送的有效负载数据(此处描述)以获取有关推送的详细信息,例如特定分支.
该到位桶插件通常会分析这个有效载荷,并将其提交给工作作为一个环境变量,但我不能设置流水线作业为连接到该插件特定的回购,所以它并不能帮助.
我尝试测试以查看数据是否以几种不同的方式可用:
node { stage 'Desperation' echo "${params.push}" echo "${env.BITBUCKET_PAYLOAD}" echo "${env.push}" }
这些不起作用(我也没想到它们).
有没有办法得到这个有效载荷数据?我唯一能想到的就是拥有一个自由式工作并建立与BitBucket的连接,然后在重新格式化数据后调用此工作.但这看起来非常笨重.
最终我不得不接受一个解决方法.
我的最终设置是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 }
请注意,您的工作可能会出现序列化错误(java.io.NotSerializableException: groovy.json.internal.LazyMap
).在这个问题中解释了这一点.简而言之,您需要payload
在使用后使其他JSONObject变量无效.
任何评论或改进总是受到赞赏.