如何远程触发Jenkins构建并传递参数


75

我正在使用以下方法远程调用Jenkins作业:

wget http://<ServerIP>:8080/job/Test-Jenkins/build?token=DOIT

这里Test-Jenkinsjob被调用,并且DOIT是我使用过的安全令牌。

现在,我需要将一些参数传递给此作业的build.xml文件,即Test-Jenkins

我还没有弄清楚如何传递变量。

Answers:


88

请参阅Jenkins文档:参数化构建

以下是您感兴趣的行:

http://server/job/myjob/buildWithParameters?token=TOKEN&PARAMETER=Value

7
但这会触发构建。您实际上需要进行POST调用。我想为人们提供具有默认参数值的链接,例如GET http:// <ServerIP>:8080 / job / Test-Jenkins / build?some_param = xyz应该打开一个some_param设置为值xyz的网页。然后使用可以按“ Build”。
卡米尔·吉兹奇

令人迷惑的是,普通版本不支持此功能,您需要一个插件。
Craig Ringer '18

2
是否有可以处理帖子的插件?我想要一个用户链接,然后单击以单击触发一个特定的参数化构建作业
Peter Kahn

无论如何,触发后是否可以获得计划的构建作业ID?
Kasun Siyambalapitiya

65

在您的Jenkins作业配置中,勾选名为“ This build is parameterized”的框,单击“ Add Parameter”按钮,然后选择“ String Parameter”下拉值。

现在定义参数-例如:

在此处输入图片说明

现在,您可以在工作/构建管道中使用参数,例如:

在此处输入图片说明

接下来使用自己的/自定义参数触发构建,调用以下URL(使用POST或GET):

http://JENKINS_SERVER_ADDRESS/job/YOUR_JOB_NAME/buildWithParameters?myparam=myparam_value

5
最新的Jenkins文档说GET出于安全原因而被贬值,因此POST应该是首选。
罗马

1
我的网址中缺少“工作”。
迪伦·卡普

1
多分支项目呢?
学习者

@Learner您是否找到了针对多分支项目的解决方案?
cyberjoac

7

为了补充这个问题,我发现您不必使用/buildWithParameters端点。

在我的场景中,我有一个脚本,该脚本在部署后触发Jenkins运行测试。其中一些测试需要有关部署的额外信息才能正常工作。

如果我尝试/buildWithParameters在不需要参数的作业上使用,该作业将无法运行。我不想进入并编辑每个作业以要求伪造的参数只是为了让作业运行。

相反,我发现您可以传递这样的参数:

curl -X POST --data-urlencode "token=${TOKEN}" --data-urlencode json='{"parameter": [{"name": "myParam", "value": "TEST"}]}' https://jenkins.corp/job/$JENKINS_JOB/build

有了json=...myParamTEST每当进行调用时,它将带值的参数传递给作业。但是,即使Jenkins作业不需要参数,它仍将运行myParam

唯一无法解决的情况是,如果作业的参数未在 json。即使作业为参数设置了默认值,也将无法运行该作业。在这种情况下,您将在调用时遇到以下错误消息/堆栈跟踪/build

java.lang.IllegalArgumentException: No such parameter definition: myParam

我知道这个答案已经晚了几年,但是我希望这对其他人可能是有用的信息!

注意:我正在使用Jenkins v2.163


也许POST应该做buildWithParameters而不是build?根据cloudbees文章,如果使用前者,则将使用默认值。这是文章:support.cloudbees.com/hc/en-us/articles/…–
haridsv

@haridsv如果在脚本中使用此脚本,则可能会触发同时执行和不执行任何参数的构建,buildWithParameters将在未参数化的作业上失败,而build在任何作业上均不会失败。
Monkpit

感谢您的澄清!我猜想,如果脚本非常通用并且不是针对该特定工作编写的,那就很重要了。
haridsv

2

要传递/使用变量,请首先在Jenkins的configure部分中创建参数。您使用的参数可以是文本,字符串,文件等类型。

创建它们之后,在所需的字段中使用变量引用。

例如:我已为Email-subject和配置/创建了两个变量Email-recipentList,并且已在EMail-ext插件中使用了它们的引用(随附的屏幕截图)。

在此处输入图片说明


//,您能告诉我们使用API​​的方法吗?
内森·巴桑尼斯

我使用了简单的HTTP调用,例如POST或GET Ex:RESTCallsUtility.invokePostMethod(auth,“ <主机> / Services / job / Jira2BugDB / buildWithParameters?token = jira2bugdb_remote&Operation = create-single&Argument =” + projectKey,“数据”)
Hari Kiran Mutyala '16

2

您可以简单地使用jenkinsfile尝试一下。使用以下管道脚本创建Jenkins作业。

pipeline {
    agent any

    parameters {
        booleanParam(defaultValue: true, description: '', name: 'userFlag')
    }

    stages {
        stage('Trigger') {
            steps {
                script {
                    println("triggering the pipeline from a rest call...")
                }
            }
        }
        stage("foo") {
            steps {
                echo "flag: ${params.userFlag}"
            }
        }

    }
}

手动构建一次作业以对其进行配置,并按如下所示向Jenkins作业创建一个HTTP POST请求。

格式为 http://server/job/myjob/buildWithParameters?PARAMETER=Value

curl http://admin:test123@localhost:30637/job/apd-test/buildWithParameters?userFlag=false --request POST

2
如何在此处使用脚本添加身份验证令牌?
Luv33preet

0

您可以使用以下查询远程触发Jenkins构建并传递参数。

JENKINS_URL/job/job-name/buildWithParameters?token=TOKEN_NAME&param_name1=value&param_name1=value

JENKINS_URL (可以)= https://<your domain name or server address>

TOKE_NAME 可以使用配置选项卡创建


0

当我们必须向jenkins job发送多个触发器参数时,以下命令有效。

curl -X POST -i -u "auto_user":"xxxauthentication_tokenxxx" "JENKINS_URL/view/tests/job/helloworld/buildWithParameters?param1=162&param2=store"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.