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

访问Jenkins管道作业中的BitBucket有效负载数据,jenkins,bitbucket,jenkins-plugins,jenkins-pipeline,Jenkins,Bitbucket,Jenkins Plugins,Jenkins Pipeline,我有一份詹金斯管道的工作;它被配置为构建在由BitBucket webhook调用的远程触发器上。这会起作用并触发构建 我还需要访问BitBucket()发送的有效负载数据,以获取有关推送的详细信息,例如特定分支 通常会解析这个有效负载并将其作为环境变量呈现给作业,但我无法将管道作业设置为连接到该插件的特定repo,因此它没有帮助 我试着测试数据是否可以通过以下几种不同的方式获得: node { stage 'Desperation' echo "${params.push}"

我有一份詹金斯管道的工作;它被配置为构建在由BitBucket webhook调用的远程触发器上。这会起作用并触发构建

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

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

我试着测试数据是否可以通过以下几种不同的方式获得:

node {
    stage 'Desperation'

    echo "${params.push}"
    echo "${env.BITBUCKET_PAYLOAD}"
    echo "${env.push}"
}
这些都不起作用(我也没料到它们会起作用)


有没有办法获取有效载荷数据?我唯一能想到的就是拥有一个自由式作业,并在该作业上设置到BitBucket的连接,然后在数据重新格式化后调用此作业。但这看起来非常笨拙。

最终我不得不接受一种变通方法

我的最终设置是管道作业
我的构建
和自由式作业
我的构建触发器

我的构建触发器
非常简单。它在SCM部分设置了一个git repo,并在Build triggers部分检查了对BitBucket的更改时生成
Build

在生成后操作中,我选择了
在其他项目上触发参数化生成

以上是重要的<代码>生成其他项目
不会触发管道作业。它只会说
我的构建是不可构建的

在预定义参数下将有效负载参数传递到下游(管道)作业,输入为
payload=${BITBUCKET\u payload}

BITBUCKET\u有效载荷
是由BITBUCKET有效载荷对象中的BITBUCKET插件填充的环境变量。您可以从BitBucket中查看有效负载文档

您的后期构建将如下所示:

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

jenkins文件中
可以这样使用此有效负载:

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
)。这是可以解释的。简而言之,您需要在使用后使
有效负载
和其他JSONObject变量无效


任何意见或改进都将受到欢迎。

以下是我们解决问题的方法:

  • 我们使用BitBucket webhook来接收我们想要的通知
  • 为了接收有效载荷,我们安装了
后者允许您接收应用程序/json格式的数据,这是BitBucket发送的数据

在作业设置中,确保启用以下选项:

此外,请确保同时检查以下两项:

  • 打印帖子内容
  • 打印贡献的变量
这将在jenkins控制台中显示它接收到的所有变量,同时分解json并将其转换为普通变量。在看到所需的变量名称后,请确保将它们“注册”为项目的常规变量

我知道你问过如何使用Jenkins管道,这个解释就是使用WebUI。
generic webhook trigger
的文档涵盖了与您的情况完全相符的代码片段。我决定添加WebUI解释,以便您能够理解其要点