web-dev-qa-db-ja.com

Jenkinsビルドをリモートでトリガーし、パラメーターを渡す方法

私はJenkinsジョブをリモートで呼び出しています:

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

ここでTest-Jenkinsジョブが呼び出され、DOITは私が使用したセキュリティトークンです。

ここで、このジョブのbuild.xmlファイルにいくつかのパラメーター、つまりTest-Jenkinsを渡す必要があります。

変数を渡す方法はまだわかりません。

56
Exploring

Jenkinsのドキュメントを参照してください:Parameterized Build

興味のある行は次のとおりです。

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

独自/カスタムパラメータでビルドをトリガーするには、次のURLを呼び出します(POSTまたはGETを使用):

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

次に、Jenkinsジョブ設定で、「This build is parameterized」という名前のボックスにチェックを入れ、「Add Parameter」ボタンをクリックして、「String Parameter」ドロップダウン値を選択します。

パラメータを定義します-例:

Enter image description here

これで、ジョブ/ビルドパイプラインでパラメーターを使用できます。例:

Enter image description here

53
Zacky Pickholz

変数を渡す/使用するには、まずJenkinsのconfigureセクションでパラメーターを作成します。使用するパラメーターは、テキスト、文字列、ファイルなどのタイプにすることができます。

それらを作成した後、目的のフィールドで変数参照を使用します。

例:Email-subjectおよびEmail-recipentListの2つの変数を構成/作成し、EMail-extプラグインで参照を使用しました(添付のスクリーンショット)。

Enter image description here

2

この質問に追加するには、/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とともにジョブに渡します。ただし、パラメータmyParamを予期していなくても、Jenkinsジョブは引き続き実行されます。

これが対象としない唯一のシナリオは、ジョブにjsonで渡されないパラメーターがある場合です。ジョブのパラメーターにデフォルト値が設定されている場合でも、ジョブの実行は失敗します。このシナリオでは、/buildを呼び出すと、次のエラーメッセージ/スタックトレースが発生します。

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

私はこの答えが数年遅れていることを理解していますが、これが他の誰かにとって有益な情報になることを願っています!

注:Jenkins v2.163を使用しています

1
Monkpit

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
0
JMadushan