
ラボ 4: CI / CDプロセス-デプロイの自動化
概要
このラボでは、継続的インテグレーションとデプロイツールでデプロイを統合する方法を学びます。バージョン管理システムとしてGitを、継続的インテグレーションツールとしてJenkinsを使用する予定です。
OmniChannel APIの実装でワークショップを実施します。
このラボは、いくつかのステップで構成されています。:
-
Jenkinsfile の作成とGitリポジトリの初期化
-
Mule Mavenプラグイン構成をMule pom.xmlファイルに追加
-
パイプラインJenkinsジョブの作成
-
各gitコミット後にJenkinsジョブプロセスを自動化するポストコミットファイルを作成
このワークショップを完成させるには、Jenkins サーバーと git gui が必要です。 EC2インスタンスでラボを実行している場合は、Jenkinsサーバーがインストールされています。自分のマシンで実行している場合は、こちらから Jenkins をインストールします。
以下のプラグインがあることを確認してください:
-
Blue Ocean
-
Build Pipeline plugin
-
Pipeline
このラボでは、バージョンコントローラーとしてgitを使用します。マシンにgitがインストールされていない場合は、 ここから入手できます。
ステップ 1: Jenkinsfileの作成とGitリポジトリの初期化
開始するには、Gitリポジトリを作成する必要があります (Jenkinsはすでに起動されています)。次のラボでは、'Git-Gui’を使用してgit操作を管理します。
Jenkinsは、ワークショップ用の仮想マシンでサービスとしてすでに起動されています。 |
-
VMのデスクトップに移動します。次のようなアイコンをクリックして、Git Guiアプリケーションを開きます:
-
Create New Repository を選択します。 Directory フィールドにプロジェクトの場所を挿入します。ラボ 1 の手順に従った場合は、次のパスを使用することができます。独自のプロジェクトを使用している場合は、プロジェクトの名前が異なる場合がありますのでご注意ください
C:/Users/workshop/AnypointStudio/studio-workspace/omni-channel-api
-
Create ボタンを選択します。MuleプロジェクトがGit内で初期化され、Git Gui管理コンソールが表示されます。
-
コミットされていない Unstaged Changes を確認し、Stage Changed ボタンを選択します。
良い習慣として、ビルドを成功させるために必要なファイルだけをコミットします。 コンパイルされたクラスの .class ファイルはバージョン管理下に置くべきではありません。 .gitignore ファイルを作成して git がこれらのファイルを無視するようにすることもできます。 -
ステージされていないファイルをステージするための追加のプロンプトが表示されたら、Yes をクリックします。
-
これで、変更が Unstaged Changes から Staged Changes に移動したことが確認できます。コミットメッセージを入力します:
Init Git repository
-
Commit ボタンをクリックしてプロジェクトをコミットします。
これでGitリポジトリを初期化できたので、Mule Mavenプラグインを設定していきます。
ステップ 2: Mule Mavenプラグインを構成
ラボ1では、Studioを使ってデプロイできることを確認しました。また、Jarファイルとしてエクスポートし、Anypoint Platform UIからアプリケーションをデプロイすることもできます。
3つ目のオプションは、Mule Maven プラグインを使用することです。これを行うには、pom.xml ファイルを更新します。
-
Anypoint Studio IDEの右側にあるパッケージ・エクスプローラーに戻ります。プロジェクトのルートディレクトリにある pom.xml ファイルを開きます。
-
Mule Maven Plugin へ認証情報を構成します。まず、<plugin> 要素配下にある <configuration> 要素へカーソルを移動します。次ステップにてこの要素内に CloudHub デプロイメントに関する情報を構成します。
-
次のxmlコードをコピーして、<configuration>エレメント内にこの新しい行を貼り付けてください。:
<cloudHubDeployment> <uri>https://anypoint.mulesoft.com</uri> <muleVersion>${mule.version}</muleVersion> <!-- Deploy User Parameter --> <username>${anypoint.username}</username> <password>${anypoint.password}</password> <!-- Environment Parameter --> <environment>${cloudhub.environment}</environment> <applicationName>${cloudhub.app}</applicationName> <businessGroup>${cloudhub.bg}</businessGroup> <workerType>${cloudhub.worker}</workerType> <objectStoreV2>true</objectStoreV2> </cloudHubDeployment>
pom.xml エディタのキャンバス上の任意の場所を右クリックして、 Source > Format を選択すると、XML コードをより見栄えよく再フォーマットすることができます。 多くのパラメータを確認出来ます。
-
muleVersion
: Muleランタイムのバージョン -
username
andpassword
: プラットフォームにデプロイするための資格情報 -
environment
: デプロイされる環境(Sandbox, Production) -
applicationName
: Mule アプリケーションの名前 -
businessGroup
: デプロイされるビジネスグループの名前 -
workerType
: 配備されるワーカーのサイズ。デプロイされるワーカーのサイズ。詳細は こちらを参照してください。
これらのパラメータは後でMavenコマンドを実行する際に設定します。
-
ステップ 3: Maven設定ファイルの作成
-
C:\Users\workshop\.m2
の下のルートユーザーフォルダに移動します。 -
このフォルダに
settings.xml
ファイルがなければ作成してください。作成したファイルの拡張子が正しいかどうか、ウィンドウのメニューから「表示」を選び、「ファイル名の拡張子」オプションにチェックを入れてください。 -
設定ファイル内に以下のコードを貼り付け、
${anypoint.name}
と${anypoint.password}
をあなたのプラットフォームのユーザーとパスワードに置き換えてください。---- <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>anypoint-exchange-v2</id> <username>${anypoint.username}</username> <password>${anypoint.password}</password> </server> </servers> </settings>
Step 4: Pipelineの作成
パイプラインは、多くの利点があります:
-
パイプライン上でのコードレビュー/イテレーション
-
パイプラインの監査証跡
-
パイプラインとして唯一の信頼でき、ソースプロジェクトを複数のメンバーが閲覧・編集可能
-
ウィンドウの左側の、 Package Explorer でプロジェクトのルートを右クリックし、 New > File を選択します。
-
ファイル名を Jenkinsfile とします。新しいファイルがプロジェクトのルートレベルに作成されていることを確認します。
-
新しいJenkinsfileを開きます。以下のスクリプトをコピーしてJenkinsfileに貼り付けます:
pipeline { agent any environment { //adding a comment for the commit test DEPLOY_CREDS = credentials('deploy-anypoint-user') MULE_VERSION = '4.4.0' BG = "<BUSINESS-GROUP>" WORKER = "Micro" M2SETTINGS = "C:\\Users\\workshop\\.m2\\settings.xml" } stages { stage('Build') { steps { bat 'mvn -B -U -e -V clean -gs %M2SETTINGS% -DskipTests package' } } stage('Test') { steps { bat "mvn test" } } stage('Deploy Development') { environment { ENVIRONMENT = 'Sandbox' APP_NAME = '<DEV-API-NAME>' } steps { bat 'mvn -U -V -e -B -gs %M2SETTINGS% -DskipTests deploy -DmuleDeploy -Dmule.version="%MULE_VERSION%" -Danypoint.username="%DEPLOY_CREDS_USR%" -Danypoint.password="%DEPLOY_CREDS_PSW%" -Dcloudhub.app="%APP_NAME%" -Dcloudhub.environment="%ENVIRONMENT%" -Dcloudhub.bg="%BG%" -Dcloudhub.worker="%WORKER%"' } } stage('Deploy Production') { environment { ENVIRONMENT = 'Production' APP_NAME = '<PROD-API-NAME>' } steps { bat 'mvn -U -V -e -B -gs %M2SETTINGS% -DskipTests deploy -DmuleDeploy -Dmule.version="%MULE_VERSION%" -Danypoint.username="%DEPLOY_CREDS_USR%" -Danypoint.password="%DEPLOY_CREDS_PSW%" -Dcloudhub.app="%APP_NAME%" -Dcloudhub.environment="%ENVIRONMENT%" -Dcloudhub.bg="%BG%" -Dcloudhub.worker="%WORKER%"' } } } }
Jenkinsfileは4つの簡単なステップを実行します:
-
Build: jarファイルをビルドします。
-
Test: プロジェクトに設定した MUnit テストを実行します。
-
Deploy to Development: 開発環境のSandboxにデプロイします。
-
Deploy to Production: 問題なければ、本番環境にデプロイします。
ここでは Jenkinsfile の構文については説明しません。詳細は こちらを参照してください。 ワークステーションはwindowsインスタンスなので、shではなくbatを使用するなど、linuxベースとは構文の違いがあります。
-
-
Jenkinsfile 内で <BUSINESS-GROUP> という値を検索します。 この値は、ファイルの 8行目 の先頭付近にあります。この値を引用符で囲んで、Anypoint Platformのビジネスグループ名に置き換えます。
pom.xmlファイルで宣言されている変数が、デプロイ時にどのように置き換えられているかを確認できます。
-
Jenkinsfile を 27行目 までスクロールします。引用符の中で、 <DEV-API-NAME> の値を sandbox-omni-channel-api-{initials} に変更します。この {initials} を自分のイニシャルに置き換えます。
-
Jenkinsfile を 36行目 までスクロールします。引用符の中で、 <PROD-API-NAME> の値を prod-omni-channel-api-{initials} に変更します。この中の {initials} を自分のイニシャルに置き換えます。
-
ウィンドウを Git Gui に戻します。
-
Rescan ボタンを押します。
-
変更をステージングします。
-
コミットします。コミットメッセージの名前は “add Jenkinsfile and update pom.xml” とします。
-
Step 5: Jenkinsを構成
これでJenkinsサーバが起動するはずです。
-
デスクトップからGoogle Chromeを開き、ブラウザのツールバーにあるJenkinsブックマークをクリックします。 Urlは
http://localhost:8080
にしてください。 -
ログインします:
-
ユーザー名:
workshop
-
パスワード:
Anypoint1357!
-
-
これでJenkinsのホームページに移動しました。 Anypoint Platform Credentialsを設定する必要があります。コードの一部にはしたくないので、Credentialsとして追加します。
左側のナビゲーションセクションで、 "Manage Jenkins” → "Manage Credentials" を選択します。
-
下部の “Stores scoped to Jenkins” ,で “Jenkins” を選択します。次の画面で “Global credentials (unrestricted)” を選択します。最後に3つ目の画面で、左ナビゲーション欄にある “Add Credentials” を選択します。
-
対応するフィールドに、ご自身の環境の Anypoint Platform のユーザー名とパスワードを入力します。
-
“ID” テキストフィールドには、 deploy-anypoint-user と入力します。これは、6行目の Mule アプリケーションのJenkinsfile内のIDと一致しなければならないIDです。
-
‘OK’ を選択して、ユーザーの作成を終了します。
データベースユーザやSalesforceユーザなどのように、適切な認証情報ではこの方法を使うことをお勧めします。 次に、プロジェクト用のJenkinsジョブを作成します。
-
ダッシュボードに戻ります。
-
Jenkins のコンソールページにて “Create a job” リンクを選択します。
-
次の画面における “Enter an item name” の下にパイプライン名を入力します。(例: "omni-channel-api" )続いて “Pipeline” を選択し、画面左下に表示されるポップアップウィンドウにて “OK” を押下します。
-
Jenkinsのセットアップページ内で、画面の一番下までスクロールして "Pipeline" と書かれたセクションに移動します。
-
“Definition” ドロップダウンで、"Pipeline script from SCM" というオプションを選択します。
-
"SCM" ドロップダウンで "Git" を選択します。
-
"Repositories" で、 "Repository URL" テキストボックスにリポジトリのパスを入力します。ディレクトリのパスには必ず file:// という接頭辞を付けてください。次のようになります。
file://C:/Users/workshop/AnypointStudio/studio-workspace/omni-channel-api
-
ここで画面下部の “Save” をクリックします。ビルドパイプラインのホーム画面にリダイレクトされます。
-
現在のページから、画面左上の “Jenkins” のナビリンクをクリックします。すると以下のような画面になります。
-
Jenkinsパイプラインのリンクをクリックします。
-
“Build now” をシングルクリックします。すぐにジョブのキックオフとステータス情報が表示されます。ビルドパイプラインはこれでMuleアプリケーションをビルドし、ユニットテストを実行し、アプリケーションをサンドボックス環境にデプロイします。これが完了すると、パイプラインはユニットテストを実行し、アプリケーションを本番環境にデプロイします。
-
ジョブの実行中は、ビルド番号をクリックして、左ナビ欄の "コンソール出力" をクリックすると、ログ情報を見ることができます。
Figure 1. パイプラインの進捗状況表示 -
また、ジョブのホームページから "Open Blue Ocean" をクリックすることで、Blue Oceanのプラグインを介して、よりすっきりとしたUIを見ることができます。
-
また、Anypoint StudioRuntime Manager にデプロイされたMuleアプリケーションは、https://anypoint.mulesoft.com にログインして、左のナビゲーション・ドロップダウンをクリックしてRuntime Managerに移動することでも確認できます。
-
Runtime Managerでは、 サンドボックス にデプロイされたアプリケーションと 本番環境 にデプロイされたアプリケーションの両方を表示できます。Runtime Managerの左ナビゲーション バーにあるサンドボックスの長方形をクリックすることで、サンドボックス ビューとプロダクション ビューを切り替えることができます。
これで CI/CD プロセスが動作し、アプリケーションがデプロイされました。
次のステップでは、ビルドジョブを自動化します。 つまり、変更があるたびにビルドプロセスが自動的に開始されるということです
Step 6: Gitを自動化してJenkinsジョブをトリガーする
最後のステップでは、Git 内にポストコミットファイルを作成して、ローカルコミットを行うたびに、手動で介入することなく Jenkins ジョブを自動的にキックオフするようにします。このラボの目的は、完全に自動化された CI/CD プロセスを設定する方法を実演することです。本番環境では、単なるコミットではなく、Gitのプッシュ後にジョブを自動的に開始する必要があります。
-
Windows のディレクトリエクスプローラーで、Mule アプリケーションのルートディレクトリに移動します。ほとんどの場合、このパスにあるはずです:
C:/Users/workshop/AnypointStudio/studio-workspace/omni-channel-api
-
Mule アプリケーションのルートディレクトリ内で .git > hooks に移動します。次に、post-commitという新しいファイルを作成します。(拡張子はありません)
-
post-commit ファイルを右クリックして Open with を選択し、Notepadを選択して開きます。
-
post-commit ファイル内に以下のコードをコピーして貼り付け、保存してください:
#!/bin/sh set PATH=%PATH%;"C:\Program Files\Git\bin" echo %PATH% sh.exe -x -c "curl 'http://workshop:Anypoint1357!@localhost:8080/job/{BUILD-NAME}/build?token=MULE_WORKSHOP'"
-
{BUILD-NAME}をプロジェクトのビルド名(例: omni-channel-api-workshop)に置き換えてください。
-
Google ChromeウェブブラウザからJenkins管理コンソールに戻ります。
-
Jenkinsジョブプロジェクトのホームページから、左ナビメニューからConfigureを選択します。
-
"Build Triggers" というラベルの付いたセクションまで下にスクロールします。
-
"Trigger builds remotely" のチェックボックスを選択します。
-
“Authentication Token“ のテキストエリア MULE_WORKSHOP と入力します。
この値は、post-commit のスクリプトで入力した値と一致していることに注意してください。
-
Anypoint Studioのomni-channel-apiプロジェクト内で、get:\productssearch とラベルのついたフローまでスクロールダウンします。
-
IDE の右側にある Mule Palette から Logger コンポーネントをドラッグします。次のようなフローになります。
-
Logger コンポーネントの中に、ログに記録したいテキストを追加します。(例: "Hello from the Mule Workshop!)
-
Git Gui に切り替えます。Rescan を選択してディレクトリへの変更を見つけ、Stage Changed を選択してコミットをステージします。最後に、次のようなコミットメッセージを入力します。「Added Logger component」などのコミットメッセージを入力し、コミット ボタンをクリックして変更をコミットします。
-
これらの変更がコミットされると、Jenkinsジョブが自動的に起動します。Google ChromeでJenkins管理コンソールに戻ると、ビルドジョブのステータスを確認することができます。
まとめ
このラボでは、バージョン管理のためにGitで管理するMuleアプリケーションを設定する方法と、Jenkins CI/CDパイプラインの中でMuleがどのようにフィットするかを学びました。 以下のステップを完了しました。
-
Mule アプリケーションの git リポジトリを初期化
-
Jenkinsfileの作成
-
Mule アプリケーションの pom.xml を更新
-
Jenkinsの構成
-
コミット後のアクションを持つgitを設定
-
Mule アプリケーションへの変更をコミット
その結果:
-
アプリケーションがテストを通過し、サンドボックス環境と本番環境にデプロイされるようになりました。 MULEの詳細については、こちらをご覧ください。
-
詳細については、 Mule Maven プラグイン を参照してください。
-
詳細については、 MUnit を参照してください。
-
おめでとうございます! モジュール7の最後のラボであるラボ 4が完了しました
モジュール 8へ進んで下さい。