当前位置:  开发笔记 > 前端 > 正文

访问Jenkins管道作业中的BitBucket有效负载数据

如何解决《访问Jenkins管道作业中的BitBucket有效负载数据》经验,为你挑选了1个好方法。

我有詹金斯的管道工作; 它被配置为构建在BitBucket webhook调用的远程触发器上.这有效并且正在触发构建.

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

该到位桶插件通常会分析这个有效载荷,并将其提交给工作作为一个环境变量,但我不能设置流水线作业为连接到该插件特定的回购,所以它并不能帮助.

我尝试测试以查看数据是否以几种不同的方式可用:

node {
    stage 'Desperation'

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

这些不起作用(我也没想到它们).

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



1> Tom Manterfi..:

最终我不得不接受一个解决方法.

我的最终设置是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的有效负载文档

您的后期构建将如下所示: Jenkins使用参数构建调用Pipeline

在管道作业上,您应该创建一个名为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变量无效.

任何评论或改进总是受到赞赏.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有