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

问题描述 投票:52回答:5

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

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

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

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

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

jenkins continuous-integration continuous-deployment continuous-delivery
5个回答
1
投票

为了添加这个问题,我发现你不必使用/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的param TEST传递给作业。但是,即使Jenkins作业不期望参数myParam,它仍然会运行。

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

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

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

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


0
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.