从Jenkins作业传递Jenkins Pipeline参数?

时间:2019-09-20 15:53:43

标签: jenkins jenkins-pipeline

我有一个Jenkins Pipeline脚本用于部署Lambda。现在,用户将参数传递给作业以将其启动。我想进一步自动化作业,并创建一个流程,在该流程中,将触发作业,并通过JSON文件传递参数以启动作业。

我不清楚如何进行操作,我已经看到也许可以使用JsonSlurper,但是不确定这是否是该过程的理想解决方案。

有人能实施一个好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

我建议使用GenericWebhook插件。

您可以定义一个令牌,然后使用POST请求以所需的任何JSON触发作业。如果您愿意,该插件将负责触发作业,甚至从JSON中解包变量。

答案 1 :(得分:0)

可能不是最好的解决方案,但这是我广泛使用的解决方案。您可以像这样读取JSON文件。

node() {
    stage("Read JSON") {
        // This has to be done within a node() construct
        myObj = readJSON file: '/opt/app/jenkins/userContent/test.json'
    }
}

这是一个可供测试的简单JSON文件。

{
  "Hosts": [
    { 
      "Hostname": "host1.foobar.com",
      "Purpose": "Web Server"
    },
    { 
      "Hostname": "host2.foobar.com",
      "Purpose": "DB Server"
    },
    { 
      "Hostname": "host3.foobar.com",
      "Purpose": "App Server"
    }
  ]
}

您可以像这样引用它。

for (int hostnum=0; hostnum < myObj.Hosts.size(); hostnum++) {
   println "Hostname: " + myObj.Hosts[hostnum].Hostname
   println "Purpose: " + myObj.Hosts[hostnum].Purpose
}

从构建日志中..

Hostname: host1.foobar.com
[Pipeline] echo
Purpose: Web Server
[Pipeline] echo
Hostname: host2.foobar.com
[Pipeline] echo
Purpose: DB Server
[Pipeline] echo
Hostname: host3.foobar.com
[Pipeline] echo
Purpose: App Server