89

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

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

这里Test-Jenkins调用了作业,并且DOIT是我使用的安全令牌。

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

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

4

8 回答 8

99

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

以下是您感兴趣的行:

http://server/job/myjob/buildWithParameters?token=TOKEN&PARAMETER=Value
于 2013-12-03T20:14:19.730 回答
76

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

现在定义您的参数 - 示例:

在此处输入图像描述

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

在此处输入图像描述

接下来要使用 own/custom 参数触发构建,调用以下 URL(使用 POST 或 GET):

http://JENKINS_SERVER_ADDRESS/job/YOUR_JOB_NAME/buildWithParameters?myparam=myparam_value
于 2016-03-17T11:56:41.620 回答
14

为了补充这个问题,我发现您不必使用/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=...,它会在调用时将myParam带有值的参数传递给作业。TEST但是,即使不期望参数 Jenkins 作业仍将运行myParam

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

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

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

注意:我使用的是 Jenkins v2.163

于 2019-03-05T17:17:02.117 回答
3

您可以简单地使用 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
于 2018-09-21T07:58:37.487 回答
2

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

创建它们后,在您想要的字段中使用变量引用。

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

在此处输入图像描述

于 2015-03-02T17:53:29.107 回答
1

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

curl -X POST -i -u "auto_user":"xxxauthentication_tokenxxx" "JENKINS_URL/view/tests/job/helloworld/buildWithParameters?param1=162&param2=store"
于 2020-11-21T18:12:25.573 回答
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可以使用配置选项卡创建

于 2020-01-27T14:16:56.940 回答
0

curl -H "Jenkins-Crumb: <your_crumb_data>" -u "<username>:<password>" "http://<your_jenkins_url>?buildWithParameters?token=<your_remote_api_name>?<parameterA>=<val_parameter_A>&<parameterB>=<val_parameterB>"

您可以根据需要更改以下参数:

<your_crumb_data>
<username>
<password>
<your_jenkins_url>
<your_remote_api_name>
<parameterA>
<parameterB>
<val_parameter_A>
<val_parameter_B>

注意:放置双引号可能很关键。请集中注意。

于 2021-01-22T08:06:14.673 回答