Jenkinsのパイプラインタスクをリモートでトリガーする

シーン

  1. コードをGitに送信するときにトリガーするようにJenkinsタスクを構成できますが、コードを送信するたびにトリガーする必要がなく、必要なときにのみ実行される場合があります。
  2. Jenkinsページでタスクを手動で実行するだけでなく、JenkinsウェブサイトへのHTTPリクエストを開始して、指定されたタスクの実行をトリガーすることもできます。この記事では、実際にはHttpリクエストを通じて複数のJenkinsタスクの実行をトリガーします。

概観

パイプラインタイプのJenkinsタスクの場合、一般的にリモートトリガーをサポートするためにGeneric Webhook Triggerプラグインが使用されます。使用中は、次の3つの点に注意する必要があります。

  1. JenkinタスクがリモートでトリガーされたときにリクエストされたURLを書き込む方法。
  2. HTTPリクエストパラメータ、パイプラインスクリプトのパラメータとして使用する方法。
  3. JenkinsタスクAがあるとします。ある時点で、このタスクをトリガーする10のリクエストが同時に到着します。Jenkinsはどのように処理しますか?(後でこの問題に焦点を当てます)

上記の問題に対応して、実際に戦いましょう。

  1. Jenkinsサービスへのhttpリクエストを開始します。
  2. リクエストパラメータは、Githubコードリポジトリのアドレスとブランチ名です。
  3. このリクエストを受け取った後、Jenkinsはパイプラインタスクを実行します。
  4. タスクは、指定されたGithubリポジトリのコードをダウンロードすることです。プロセスは次の図に示されています。
    ここに画像の説明を挿入

環境情報

  1. オペレーティングシステム:CentOS 7.7
  2. ジェンキンス:2.190.3
  3. Generic Webhook Triggerプラグイン:1.66

Jenkinsの導入については、「Helmの導入とJenkinsの体験」の記事を参照してください

実際の戦闘

  1. 以下に示すように、まずプラグインをインストールし、プラグイン管理ページに入ります。
    ここに画像の説明を挿入
  2. プラグインをインストールする手順を下の図に示します。赤いボックスの順序に従ってください:
    ここに画像の説明を挿入
  3. しばらくすると、下の図に示すように、プラグインがオンラインで正常にインストールされ、パイプラインタスクを作成してみます。
    ここに画像の説明を挿入
  4. remote-testという名前の新しいパイプラインタスクを作成します
    ここに画像の説明を挿入
  5. 下の赤いボックスに示すように、設定ページに入ります。GenericWebhook Triggerオプションが表示されます
    ここに画像の説明を挿入
  6. Generic Webhook Triggerがチェックされると、ページが変更されます。下の図に示すように、赤いボックスで、まずtokenの値をtoken-remote-testに設定し、httpリクエストのtokenパラメータの値がtoken-remote-testと等しい場合、現在のタスクをトリガーします。
    ここに画像の説明を挿入
  7. 次に、以下の赤いボックスに示すように、要求パラメーターを設定し、固定参照パラメーター(プラグインによって使用されるため、入力する必要があります)を入力し、次に、repositoryURLbranchを設定します。つまり、Githubコードウェアハウスのアドレスとブランチ名、つまりhttpリクエストrepositoryURLおよびブランチパラメータは、後続のパイプラインスクリプトに渡すことができます。
  8. 次に、パイプラインスクリプトを記述できます。
pipeline {
    agent any
    triggers {
        GenericTrigger(
            genericVariables: [
              [key: 'ref', value: '$.ref'],
              [key: 'repositoryURL', value: '$.repositoryURL'],
              [key: 'branch', value: '$.branch']
            ],
            token: 'token-remote-test' ,
            causeString: '$ref' ,
            printContributedVariables: true,
            printPostContent: true
        )
    }
    
    stages {
        stage('show-param') {
            steps {
                echo 'token参数:$token'
                echo '代码仓库:$repositoryURL'
                echo '代码分支:$branch'
            }
        }

        stage('down-sourcecode') {
            steps {
                echo '开始下载源码'
                checkout([$class: 'GitSCM', 
                    branches: [[name: '*/$branch']], 
                    doGenerateSubmoduleConfigurations: false, 
                    extensions: [], 
                    submoduleCfg: [], 
                    userRemoteConfigs: [[url: '$repositoryURL']]])
            }
        }            
    }
}

上記のスクリプトには、次の重要なポイントがあります。

a。トリガーのパラメーター、GenericTriggerおよびgenericVariablesは固定されています。上記の例に従って記述してください。

b。printContributedVariablesおよびprintPostContentがtrueであり、タスクの実行時に要求パラメーターの内容を出力します。

c。ここには2つのステージがあり、show-param実行すると、すべてのhttpリクエストパラメータが出力されます。

d。チェックアウトは、Githubリポジトリのコードをダウンロードするためにパイプラインによって提供されるAPIです。branchesパラメータの値はhttpリクエストパラメータブランチを使用し、userRemoteConfigs.urlパラメータの値はhttpリクエストパラメータrepositoryURLを使用します

  1. 下の赤いボックスに上記のパイプラインスクリプトを記述し、下部にある[ 保存 ]ボタンをクリックして保存します。
    ここに画像の説明を挿入
  2. タスクの構成が完了したら、Postmanを使用してJenkinsへのリクエストを開始し、JenkinsタスクがHttpリクエストによってトリガーされることを確認します。

確認する

  1. 私のJenkins Webサイトのアドレスはhttp://192.168.133.149:32049であるため、タスクをトリガーするためのリクエストアドレスはhttp://192.168.133.149:32049/generic-webhook-trigger/invoke?token=token-remoteです。-test、トークンパラメータの値とタスク設定のトークン値は同じでなければならないことに注意してください。
  2. Postmanの設定を下の図に示します。番号順に設定してください。repositoryURLパラメータの値はhttps://github.com/zq2599/jenkinsdemo.gitです。これは、Githubに置いたJavaプロジェクトであり、正常にダウンロードできます。 :
    ここに画像の説明を挿入
  3. 構成が完了したら、[ 送信 ]ボタンをクリックしてリクエストを送信します。通常の状況で受信される戻りコードは、以下の赤いボックスに示すように200です。200でない場合(たとえば、404)、Jenkinsタスクのパラメーター設定を確認してください(たとえば、トークンに一貫性がない)。
    ここに画像の説明を挿入
  4. Jenkinsページに戻り、ログを表示します。以下に示す赤いボックスに、リクエストパラメータが出力されます。
    ここに画像の説明を挿入
  5. Githubソースコードが正常にダウンロードされたことを確認します。
    ここに画像の説明を挿入
  6. この時点で、HttpによってトリガーされたJenkinsパイプラインの実際の戦闘が完了しました。プログラムやスクリプトなどのさまざまな手段を通じて、さまざまなニーズに応じてJenkinsタスクをトリガーし、さまざまなパラメーターをタスクに渡すことができます。

並行性の問題

Jenkinsタスクのリモートトリガーは柔軟性があり便利ですが、同時リクエストを処理するときに問題が発生します。同時に10個のリクエストが到着し、1つだけが実行されます。この問題の詳細と解決策は、次の記事「Jenkinsパイプラインタスクの同時トリガーのリモートトリガー」にあります。 「取り扱い」の詳細な議論。

ソースコードのダウンロード

私のGithubアドレスは次のとおりです。

名前 リンク 備考
プロジェクトホームページ https://github.com/zq2599/blog_demos GitHub上のプロジェクトのホームページ
gitリポジトリアドレス(https) https://github.com/zq2599/blog_demos.git プロジェクトのソースコード、httpsプロトコルの倉庫アドレス
gitリポジトリアドレス(ssh) [email protected]:zq2599 / blog_demos.git プロジェクトのソースコード、sshプロトコルの倉庫アドレス

その中に複数のプロジェクトがあります。以下の赤いボックスに示すように、jenkinsremotedemoを使用してください。これはJavaプロジェクトで、内部のリモートテストファイルはこの記事で使用されているパイプラインスクリプトです。このプロジェクトのJavaコード(App.java)はJenkinsに送信できます。複数のリモートトリガーリクエストを同時に開始します。
ここに画像の説明を挿入

私の公開番号に注目してください:プログラマーXinchen

ここに画像の説明を挿入

376の元の記事を公開 986を賞賛 128万ビュー

おすすめ

転載: blog.csdn.net/boling_cavalry/article/details/105189564