Jenkins Pipeline共有ライブラリ

みなさんこんにちは。 この記事では、さまざまなデータセンターのさまざまなサーバーへのサービスの展開を自動化するプロセスで得られた知識を共有したいと思います。

タスクは次のとおりです。各データセンターの各サーバーで実行する必要があるサービスを展開するための特定のスクリプトセットがあります。 スクリプトは一連の操作を実行します。ステータスの確認、ロードバランサーからの削除、バージョンのリリース、デプロイ、ステータスの確認、電子メールとSlackによる通知の送信など。 シンプルで便利ですが、データセンターとサービスの数が増えると、新しいバージョンを展開するプロセスに1日かかることがあります。 さらに、特定のコマンドは、ロードバランサーのセットアップなど、いくつかのアクションを担当します。 また、各チームメンバーがサポートできるように、プロセス制御コードをパブリックリポジトリに保存したかったのです。

Jenkins Pipeline Shared Librariesの助けを借りて問題を解決することができました:プロセスステップは視覚的に論理的な部分に分割され、コードはリポジトリに保存され、ワンクリックで20台のサーバーへの配信が可能になりました。 以下は、同様のテストプロジェクトの例です。

画像

次に、これを達成する方法の例を示して示します。 この記事が他の開発者の時間を節約するのに役立つことを願っています。また、役に立つコメントがあれば嬉しいです。

ライブラリ作成


最初に行うことは、関数が格納される独自のライブラリを作成することです。
次の構造を持つ新しいリポジトリを作成します。

画像
srcディレクトリは、Pipelineの実行時にクラスパスに追加されるGroovyクラスに使用されます。

varsディレクトリ 、Pipelineから利用可能なグローバル変数を定義するスクリプトで使用されます。

以下はGroovyクラスの例です

@Grab(group = 'org.apache.commons', module = 'commons-lang3', version = '3.6') import org.apache.commons.lang3.StringUtils class Deployer { int tries = 0 Script script def run() { while (tries < 10) { Thread.sleep(1000) tries++ script.echo("tries is numeric: " + StringUtils.isAlphanumeric("" + tries)) } } } 

クラスでは、任意の言語機能を使用できます。ストリームの作成、FTP経由の接続など。

重要:
-Pipelineからコンソールログに出力するには、スクリプトを転送する必要があります。
-ライブラリのインポートには@Grab使用し@Grab

以下にスクリプトの例を示します。

 #!/usr/bin/env groovy def call(body) { echo "Start Deploy" new Deployer(script:this).run() echo "Deployed" currentBuild.result = 'SUCCESS' //FAILURE to fail return this } 

スクリプトでは、任意の言語機能を使用でき、Jenkinsで変数とパラメーターを作成できます。

重要:

-実行を停止するには、値currentBuild.result = 'FAILURE'設定します。
env変数を使用して、パラメーター化されたアセンブリのパラメーターを取得できます。 たとえば、 env.param1

他の例を含むリポジトリの例を次に示します。

リポジトリ接続


次のステップは、リポジトリをグローバルパイプラインライブラリとして追加することです。
これを行うには、Jenkinsに移動します。Jenkinsの管理 -> システムの 構成Jenkinsの構成-> システム 構成 )。 Global Pipeline Librariesブロックで下の図のようにリポジトリを追加します。

画像

パイプラインの作成


最後のステップは、パイプラインを作成することです。

パイプラインは次のようになります。

 @Library('jenkins-pipeline-shared-lib-sample')_ stage('Print Build Info') { printBuildinfo { name = "Sample Name" } } stage('Disable balancer') { disableBalancerUtils() } stage('Deploy') { deploy() } stage('Enable balancer') { enableBalancerUtils() } stage('Check Status') { checkStatus() } 

すなわち @Library('jenkins-pipeline-shared-lib-sample')_ (最後に_を追加することを忘れないでください)を追加し、スクリプト名で関数を呼び出します(例: deploy

パイプラインの準備ができました。

次回は、パラメーター化されたアセンブリをセットアップしてRESTサービスから依存パラメーターをエレガントに取得する方法を示します。

ご清聴ありがとうございました!

Source: https://habr.com/ru/post/J338032/


All Articles