Jenkins と GitLab を統合し、Enterprise Distributed Application Service (EDAS) アプリケーションを自動的にビルドおよびデプロイします。コードを GitLab にプッシュすると、Webhook が Jenkins をトリガーし、コードをプルして Maven ビルドを実行し、toolkit-maven-plugin プラグインを介して EDAS にデプロイします。
このワークフローは、Elastic Compute Service (ECS) クラスターと Kubernetes クラスターの両方にデプロイされたアプリケーションをサポートします。
仕組み
Code push to GitLab -> GitLab webhook triggers Jenkins -> Maven builds the project -> toolkit-maven-plugin deploys to EDASGitLab リポジトリにコードをプッシュします。
GitLab Webhook が変更を Jenkins に通知します。
Jenkins が最新のコードをプルし、Maven ビルドを実行します。
toolkit-maven-pluginプラグインが EDAS POP API スクリプトを呼び出し、更新されたアプリケーションをデプロイします。
前提条件
開始する前に、以下を準備してください。
EDAS をアクティブ化したアカウントの AccessKey ID と AccessKey Secret を持つ Alibaba Cloud アカウント。必要に応じて、Alibaba Cloud コンソールにログインして作成してください。
EDAS コンソールで作成およびデプロイされたアプリケーションです。EDAS コンソール。手順については、「ECS クラスターへのアプリケーションの作成およびデプロイ」および「Kubernetes クラスターへのアプリケーションの作成およびデプロイ」をご参照ください。
EDAS コンソールの左側のナビゲーションウィンドウの[アプリケーション]の[基本情報]タブのアプリケーション ID
ソースコードホスティング用のセルフマネージド GitLab インスタンスまたは Alibaba Cloud Code。
動作する Jenkins インストール。
ビルドサーバーにインストールされた Maven。
Maven プロジェクトの構成
プロジェクトの pom.xml に toolkit-maven-plugin プラグインを追加して、EDAS デプロイメント設定を定義します。完全なプラグイン構成については、「toolkit-maven-plugin プラグインを使用して ECS クラスターにデプロイされたアプリケーションを更新する」をご参照ください。
プラグインを構成した後、セルフマネージドサーバーで Maven を使用して、構成が有効かどうかを確認することを推奨します。
mvn clean package toolkit:deploy正常なビルドとデプロイメントにより、Maven プロジェクトが Jenkins 自動化の準備ができていることが確認されます。
Jenkins プラグインのインストール
Jenkins コンソールで、[システム管理] > [プラグイン] に移動します。
次のプラグインをインストールします。
プラグイン 目的 git client plugin, git plugin Git リポジトリからソースコードをプルする GitLab hook plug-in GitLab Webhook を介して Jenkins ビルドをトリガーする
Jenkins での Maven の構成
Jenkins コンソールで、[Jenkins の管理] > [グローバルツール設定] に移動します。
Maven バージョンを選択し、インストールパスを構成します。
Jenkins と GitLab 間の SSH 認証の設定
Jenkins サーバーで SSH キーペアを生成し、公開鍵を GitLab に追加します。これにより、Jenkins は手動認証なしでコードをプルできます。
Jenkins サーバーで、Jenkins を実行するユーザーの SSH RSA キーペアを生成します。詳細については、「GitLab SSH ドキュメント」をご参照ください。
GitLab で、設定項目 > デプロイキー へ移動します。
[新規デプロイキー] をクリックし、Jenkins サーバーからの公開鍵を貼り付けます。
Jenkins ジョブの作成
Jenkins ホームページで、[新規アイテム] をクリックし、ジョブ名を入力して、[フリースタイル・プロジェクト] を選択します。
[ソースコード管理] タブで、[Git] を選択し、以下のパラメーターを設定します。
パラメーター 説明 Repository URL ご利用のプロジェクトの Git リポジトリ URL Credentials Jenkins を実行するユーザーの SSH RSA キーペアが、この Git プロジェクトの GitLab に追加済みの場合は、None を選択します。それ以外の場合、エラーが返されます。 「ビルド トリガー」タブで、「SCM のポーリング」を選択します。
[ビルド環境] タブで、[コンソール出力にタイムスタンプを追加] を選択します。
[ビルド] タブで、[ビルドステップの追加] をクリックし、[最上位 Maven ターゲットの呼び出し] を選択します。
Maven ビルドステップを構成します。
パラメーター 値 Maven バージョン [グローバルツール設定] 目的 clean package toolkit:deploy
GitLab Webhook の構成
各コードプッシュが自動的にビルドをトリガーするように、GitLab を Jenkins にリンクします。
GitLab プロジェクトで、[設定] > [ウェブフック] に移動します。
[URL] フィールドに、次のフォーマットで Webhook URL を入力します。プレースホルダーを実際の値に置き換えてください。例:
プレースホルダー 説明 例 <jenkins-server>Jenkins サーバーの IP アドレスまたはホスト名 123.57.xx.xxx<port>Jenkins リスニングポート 8080<git-repository-url>プロジェクトの Git SSH URL git@code.aliyun.com:tdy218/hello-edas.githttp://<jenkins-server>:<port>/git/notifyCommit?url=<git-repository-url>http://123.57.xx.xxx:8080/git/notifyCommit?url=git@code.aliyun.com:tdy218/hello-edas.git[テストフック] をクリックして Webhook 接続を検証します。
デプロイメントの検証
構成を完了したら、GitLab リポジトリにコミットをプッシュします。Webhook が Jenkins をトリガーし、Maven を実行してアプリケーションを EDAS にデプロイします。
ビルド結果を確認するには:
Jenkins ジョブページに移動し、[ビルド番号] > [コンソール出力] の順にクリックします。
正常なデプロイメントでは、次のような出力が生成されます。
15:58:51 [INFO] Deploy application successfully! 15:58:51 [INFO] ------------------------------------------------------------------------ 15:58:51 [INFO] BUILD SUCCESS 15:58:51 [INFO] ------------------------------------------------------------------------ 15:58:51 [INFO] Total time: 24.330 s 15:58:51 [INFO] Finished at: 2018-12-25T15:58:51+08:00 15:58:51 [INFO] Final Memory: 23M/443M 15:58:51 [INFO] ------------------------------------------------------------------------ 15:58:51 Finished: SUCCESSデプロイメントが失敗した場合は、EDAS コンソールにログインし、左側のナビゲーションウィンドウで[アプリケーション]をクリックします。アプリケーション名をクリックします。左側のナビゲーションウィンドウで、[変更履歴]をクリックしてデプロイメントの詳細を表示し、失敗の原因を特定します。
マルチモジュール Maven プロジェクトのデプロイ
マルチモジュールプロジェクトの場合、Jenkins ジョブの設定は、Jenkins ジョブの作成と同じです。違いは、1 つではなく、[トップレベルの Maven ターゲットを実行] のビルドステップを 2 つ使用する必要がある点です。依存関係を解決するためにまず親モジュールをビルドし、その後サブモジュールをビルドしてデプロイします。
2 つのビルドステップを次のように構成します。
| ビルドステップ | ゴール | 目的 |
|---|---|---|
| 1 番目 | clean install | 親モジュールをビルドして依存関係を解決する |
| 2 番目 | clean package toolkit:deploy | ターゲットサブモジュールをビルドしてデプロイする |
例: 次のデモプロジェクトは、この構造を持っています。
edas-app-demo/ (parent module)
├── detail/ (submodule)
├── itemcenter/ (submodule)
└── itemcenter-api/ (submodule)itemcenter サブモジュールをデプロイするには、まず親モジュールで clean install を実行し、次に itemcenter サブモジュールで clean package toolkit:deploy を実行します。