Jenkins ジョブでの動的パラメーターの作成、またはタスクをユーザーフレンドリーにする方法

良い一日、 ハブル!

今日はその活用方法の一つを紹介したいと思います アクティブな選択プラグイン でタスクを実行します ジェンキンズ 最も統一されており、ユーザーフレンドリーです。

導入

DevOps などの略語は、IT コミュニティにとってはもはや新しいものではありません。 多くの人にとって、「DevOps を実行する」というフレーズは、ある種の魔法のボタンを連想します。これをクリックすると、アプリケーション コードが自動的にデプロイされ、テストされたアプリケーションに変わります (実際にはすべてがより複雑ですが、すべてのプロセスから抽象化しています)。

そこで、管理者がワンクリックでアプリケーションをデプロイできるようなマジックボタンを作成してほしいという注文を受けました。 このタスクの実装には、インスタント メッセンジャー用のボットの作成から別のアプリケーションの開発まで、さまざまなタイプがあります。 それにもかかわらず、これにはすべて同じ目標があります。それは、アプリケーションのビルドとデプロイメントの開始を可能な限り透過的かつ便利にすることです。

私たちの場合、使用します ジェンキンズ.


Jenkins ジョブでの動的パラメーターの作成、またはタスクをユーザーフレンドリーにする方法

タスク

特定のバージョンの選択したマイクロサービスのビルドおよび (または) デプロイを開始する便利な Jenkins ジョブを作成します。

Jenkins ジョブでの動的パラメーターの作成、またはタスクをユーザーフレンドリーにする方法

入力データ

さまざまなマイクロサービスのソース コードを含むリポジトリがいくつかあります。

パラメータの定義

次のパラメータをジョブへの入力として受け取る必要があります。

  1. ジョブの実行時に構築してデプロイするマイクロサービス コードを含むリポジトリの URL。
  2. ビルドが行われるコミットの ID。

れているように

このタスクを達成する最も簡単な方法は、文字列型の XNUMX つのパラメータを作成することです。

Jenkins ジョブでの動的パラメーターの作成、またはタスクをユーザーフレンドリーにする方法

この場合、ユーザーはリポジトリへのパスとコミット ID を手動で入力する必要がありますが、これは完全に便利とは言えません。

Jenkins ジョブでの動的パラメーターの作成、またはタスクをユーザーフレンドリーにする方法

現状のまま

次に、別のタイプのパラメータを試して、そのすべての利点を検討してみましょう。
最初のパラメータを Choice パラメータ タイプで作成し、XNUMX 番目のパラメータを Active Choices Reactive Reference パラメータとして作成しましょう。 Choice タイプのパラメーターでは、マイクロサービスのコードが保存されているリポジトリの名前を Choices フィールドに手動で追加します。

Jenkins ジョブでの動的パラメーターの作成、またはタスクをユーザーフレンドリーにする方法

読者がこの記事を気に入ってくれたら、次の記事では、コードによる説明 (コードとしての構成) を使用して、Jenkins でタスクを構成するプロセスについて説明します。 リポジトリ名を手動で入力してパラメータを作成する必要はなく、すべてが自動的に行われます (コードは SCM からリポジトリのリストを受け取り、このリストを使用してパラメータを作成します)。

各リポジトリには独自のコミットのリストがあるため、1 番目のパラメータの値は、最初のパラメータの値 (test2 または testXNUMX) に応じて動的に入力されます。

Active Choices リアクティブ参照パラメータ には次のフィールドに入力する必要があります。

  1. 名前 – パラメータ名。
  2. スクリプト – [参照パラメーター] フィールドのパラメーターの値が変更されるたびに実行されるコード (この例では、test1 と test2 のどちらかを選択したとき)。
  3. 説明 – パラメータの簡単な説明。
  4. 選択タイプ – スクリプトによって返されるオブジェクトのタイプ (この場合は HTML コードを返します)。
  5. 参照されるパラメータ – パラメーターの名前。その値が変更されると、スクリプト セクションのコードが実行されます。

Jenkins ジョブでの動的パラメーターの作成、またはタスクをユーザーフレンドリーにする方法

このパラメータの最も重要なフィールドに直接入力してみましょう。 XNUMX つのタイプの実装から選択できます。 Groovyスクリプト または スクリプトラースクリプト.
Scriptler は以前に作成したスクリプトを保存し、再度コピー&ペーストすることなく他のタスクで使用できるようにする単なるプラグインであるため、最初のものを選択します。

選択したリポジトリからすべてのコミットを取得する Groovy コード:

AUTH = "логин и пароль в Base64"                           
GIT_URL = "url до вашей SCM (https://bitbucket.org/)"                       
PROJECT_NAME = "имя проектной области, где находятся репозитории"

def htmlBuild() {
    html = """
            <html>
            <head>
            <meta charset="windows-1251">
            <style type="text/css">
            div.grayTable {
            text-align: left;
            border-collapse: collapse;
            }
            .divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead {
            padding: 0px 3px;
            }
            .divTable.grayTable .divTableBody .divTableCell {
            font-size: 13px;
            }
            </style>
            </head>
            <body>
        """

    def commitOptions = ""
    getCommitsForMicroservice(MICROSERVICE_NAME).each {
        commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>"
    }
    html += """<p style="display: inline-block;">
        <select id="commit_id" size="1" name="value">
            ${commitOptions}
        </select></p></div>"""

    html += """
            </div>
            </div>
            </div>
            </body>
            </html>
         """
    return html
}

def getCommitsForMicroservice(microserviceRepo) {
    def commits = [:]
    def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT_NAME}/repos/${microserviceRepo}/commits"
    def conn = new URL(endpoint).openConnection()
    conn.setRequestProperty("Authorization", "Basic ${AUTH}")
    def response = new groovy.json.JsonSlurper().parseText(conn.content.text)
    response.values.each {
        commits.put(it.displayId, it.message)
    }
    return commits
}

return htmlBuild()

詳細には触れませんが、このコードはマイクロサービス名 (MICROSERVICE_NAME) を入力として受け取り、リクエストを Bitbucket (方法 getCommitsForMicroservice) API を使用して、特定のマイクロサービスのすべてのコミットの ID とコミット メッセージを取得します。
前述したように、このコードはページに表示される HTML を返す必要があります。 パラメータを使用して構築する Jenkins では、Bitbucket から受け取ったすべての値をリストにラップし、それらを追加して選択します。

すべての手順を完了すると、このような美しいページが表示されるはずです パラメータを使用して構築する.

test1 マイクロサービスを選択した場合:

Jenkins ジョブでの動的パラメーターの作成、またはタスクをユーザーフレンドリーにする方法

test2 マイクロサービスを選択した場合:

Jenkins ジョブでの動的パラメーターの作成、またはタスクをユーザーフレンドリーにする方法

ユーザーにとって、毎回 URL をコピーして必要なコミット ID を探すよりも、この方法でタスクを操作する方がはるかに便利であることに同意します。

PS この記事では、非常に単純化した例を示しますが、アセンブリにはさらに多くの異なるパラメーターがあるため、この形式では実用的ではない可能性がありますが、この記事の目的はツールがどのように機能するかを示すことであり、実用的なソリューションを提供することではありません。

PSS 先ほども書きましたが、この記事が役に立ったら次は コードによる Jenkins タスクの動的構成.

出所: habr.com

コメントを追加します