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

rfbsl7qr  于 2023-01-20  发布在  Jenkins
关注(0)|答案(9)|浏览(274)

我正在使用以下命令远程调用Jenkins作业:

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

这里调用了Test-Jenkins作业,DOIT是我使用的安全令牌。
现在,我需要将一些参数传递给此作业的build.xml文件,即Test-Jenkins
我还没有弄清楚如何传递变量。

9wbgstp7

9wbgstp71#

参见Jenkins文件:* 一个月一次 *
下面是您感兴趣的行:

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

nimxete22#

在Jenkins作业配置中,勾选名为“This build is parameterized“的框,单击“Add Parameter“按钮并选择“String Parameter“下拉值。
现在定义参数-例如:

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

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

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

mwecs4sa3#

为了补充这个问题,我发现您不必使用/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

ozxc1zmp

ozxc1zmp4#

您可以简单地尝试使用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
b0zn9rqh

b0zn9rqh5#

要传递/使用变量,首先在Jenkins的configure部分创建参数,您使用的参数可以是text、String、file等类型。
创建后,在所需字段中使用变量引用。
例如:我已经为Email-subjectEmail-recipentList配置/创建了两个变量,并在EMail-ext插件中使用了它们的引用(随附的屏幕截图)。

wd2eg0qa

wd2eg0qa6#

当我们必须向Jenkins Job发送多个触发器参数时,以下命令起作用。

curl -X POST -i -u "auto_user":"xxxauthentication_tokenxxx" "JENKINS_URL/view/tests/job/helloworld/buildWithParameters?param1=162&param2=store"
vs91vp4v

vs91vp4v7#

您可以使用以下查询远程触发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可以使用配置选项卡创建

ulmd4ohb

ulmd4ohb8#

curl -X POST -u Admin:<api_token> http://localhost:8080/job/<job_name>/buildWithParameters\?ColorValue\=sddddsd
q0qdq0h2

q0qdq0h29#

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>

注:使用双引号可能很重要,请注意。

相关问题