Spring Tools、Git、CodePipeline、CodeCommit、CodeBuild、CodeDeploy を利用した CI/CD 環境の構築と導入手順を解説します。
前回、AWSのCI/CD環境の構築手順の解説をしましたが、今回は Spring Tools を利用しています。
【AWS】DevOps(CI/CD)の導入手順(CodePipeline、CodeCommit、CodeBuild、CodeDeploy)
構成
今回は以下の構成で Ci/CD 環境を構築しています。
- 開発 ← Spring Tools 4
- ソースコード管理 ← AWS CodeCommit
- ビルド ← AWS CodeBuild
- デプロイ ← AWS CodeDeploy
- パイプライン ← AWS CodePipeline
Spring Tools 4
Spring Tools 4 をインストールして環境を設定し簡単な Java のプログラムを作ります。
Spring Tools 4 のインストール
まずは Spring Tools 4 をインストールします。
以下の URL に移動します。
Spring Tools 4 for Eclipse の「4.xx.xx -WINDOWS X86_4」のボタンをクリックしパッケージをダウンロードします。
下図のように jar ファイルがダウンロードされるので解凍ソフトで解凍します。
更に contents.zip も解凍します。
解凍してできた「sts-4.11.1.RELEASE」フォルダを C: 直下に移動します。
C: 直下に移動します。
以上でインストールは完了です。
Spring Tools 4の起動
「sts-4.11.1.RELEASE」配下の「SpringToolSuite4.exe」をダブルクリックして起動します。
workspace フォルダを指定して「Launch」ボタンをクリックします。
Spring Tools 4 が起動することを確認します。
サンプル Java プログラムの作成
サンプルの簡単な Java プログラムを作成します。
このプログラムは Tomcat8 で動かします。
まずはプロジェクトを作成します。
メニューより「File」‐「New」‐「Spring Starter Project」をクリックします。
下図のように設定をして「Next」ボタンをクリックします。
- Packaging ← War
- Java Version ← 8
どれがどの機能を提供するのか不明なので、とりあえず Web 配下を全部チェック入れています。
設定が終わったら「Next」ボタンをクリックします。
「Finish」ボタンをクリックしてプロジェクトを作成します。
新規 Class ファイルを作成します。
プロジェクトより「com.example.demo(例)」を右クリックして「New」‐「Class」をクリックします。
Nameに任意の名前「HelloWorldController(例)」と入力し「Finish」ボタンをクリックします。
HelloWorldController.java の Class ファイルが作成されていることを確認します。
以下のように簡単なプログラムを作成します。
package com.example.demo; |
以下のようにプログラムを作成して保存します。
起動確認
ここで Java プログラムが起動することを確認します。
下のタブより「Boot Dashboard」を選択します。
対象のプロジェクトを選択して右クリックし「(Re)start」をクリックします。
エラーなく起動することを確認します。
ブラウザを起動してアドレス欄に「http://localhost/hello」と入力し下図のようにメッセージが表示されることを確認します。
以上で Spring Tools 4 の設定が完了しました。
Git リポジトリを作成する
次に Git リポジトリを作成します。
メニューより「Window」‐「Perspective」‐「Open Perspective」‐「Oter」をクリックします。
「Git」を選択して「Open」をクリックします。
まだ何もGit Repository がない状態です。
一旦 Java の画面に戻ります。
プロジェクトを選択して右クリックし「Team」‐「Share Project」をクリックします。
「Use or create repository in parent folder of project」にチェックを入れてフォルダを選択し「Create Repository」をクリックします。
「Finish」ボタンをクリックします。
gitの画面に移動します。
Local フォルダができていますが、まだ何も入っていません。
「Git Staging」タブをクリックし「Unstaged Changes」の全部のファイルを選択し、下の「Staged Changes」にドラッグ&ドロップします。
「Staged Changes」にファイルが移動したところを確認し Commit Message に「First Commit」と入力し「Commit」ボタンをクリックします。
master ブランチが作成されていることを確認します。
Git Repositoryの動作確認
Git Repository の動作確認をします。
Java のソースコードを更新してファイルを保存します。
修正したソースコードを保存して「Git Staging」タブに移動すると以下のようにファイルが表示されているので下の「Staged Changes」にドラッグ&ドロップします。
「Staged Changes」にファイルをドラッグ&ドロップし、Commit Message にコメントを記入して「Commit」ボタンをクリックします。
「Boot Dashboard」タブをクリックしてプロジェクトを選択して右クリックし「(Re)start」をクリックします。
プログラムが更新されていることを確認します。
以上で Spring Tools 4 側の設定は完了です。
AWS CodeCommit
Spring Tools 4 側の設定が完了したら AWS の CodeCommit の設定をします、
CodeCommit レポジトリの作成
まずは CodeCommit レポジトリの作成をします。
CodeCommit のダッシュボードに移動します。
左側ペインより「リポジトリ」をクリックして「リポジトリを作成」ボタンをクリックします。
「リポジトリ名」を設定し「作成」ボタンをクリックします。
CodeCommit リポジトリへアクセスするための IAM ユーザの作成
次に CodeCommit リポジトリへアクセスするための IAM ユーザの作成をします。
AWS CodeCommit リポジトリへアクセスするための権限も必要になります。
IAM ダッシュボードに移動します。
左側ペインより「ユーザー」をクリックして「ユーザーを追加」ボタンをクリックします。
「ユーザー名」と「アクセスの種類」を「プログラムによるアクセス」にチェックを入れて「次のステップ:アクセス権限」ボタンをクリックします。
「ユーザーを追加」画面で「既存のポリシーを直接アタッチ」を選択し「AWSCodeCommitFullAccess」を選択し「次のステップ:タグ」ボタンをクリックします。
タグの追加(オプション)でそのまま「次のステップ:確認」ボタンをクリックします。
「確認」画面で設定を確認し「ユーザーの作成」ボタンをクリックします。
「.csv のダウンロード」ボタンをクリックして保存します。
作成した IAM ユーザーをクリックします。
「認証情報」タグをクリックします。
「AWS CodeCommit の HTTPS Git 認証情報」で「認証情報を生成」ボタンをクリックします。
「認証情報を作成」画面で「証明書のダウンロード」ボタンをクリックして保存します。
CodeCommit で作成したリポジトリ(例では demo)に移動し「接続のステップ」で「HTTPS」タブをクリックしてリポジトリのクローンを作成するコマンドの「コピー」ボタンをクリックします。
Spring Tools 4 の Java の画面に移動しプロジェクトを選択して右クリックし「Team」‐「Remote」‐「Push」をクリックします。
「Destination Git Repository」画面で URI を選択してペーストをして情報を入力します。入力したら「Next」ボタンをクリックします。
「Source ref:」と「Destination ref:」に「master」ブランチを選択し「Add Spec」ボタンをクリックします。
下図のように追加されたことを確認し「Next」ボタンをクリックします。
「Finish」ボタンをクリックします。
AWS CodeCommit のレポジトリに Push された画面が表示されるので「Close」ボタンをクリックします。
AWS CodeCommit のレポジトリに Push されたことを確認
AWS CodeCommit のレポジトリに Push されたことを確認します。
CodeCommit のダッシュボードに移動し、左側ペインより「リポジトリ」をクリックし、対象のリポジトリに移動します。
ローカルのリポジトリが AWS CodeCommit のリポジトリに Push されていることを確認します。
動作確認
再度ソースコードを更新してコミットとプッシュをします。
ソースコードを更新したら、ファイルを「Staged Cheges」エリアに持ってきて、Commit Message を記載して「Commit and Push」ボタンをクリックします。
以下の「Destination Git Repository」画面が表示されることを確認します。
AWS CodeCommit の対象のリポジトリに移動して対象のリポジトリの「HTTPS」をクリックしてコピーします。
URI を選択してペーストすると下図のように情報を入力されるので「Preview」ボタンをクリックします。
「Preview」ボタンをクリックします。
「Push」ボタンをクリックします。
AWS CodeCommit への Push が完了した画面が表示されることを確認します。
下図のようにソースコードの更新が反映されていることを確認します。
もう1つブランチを作成する
ここで master ブランチの他にもう1つブランチを作成します。
CodeCommit のダッシュボードに移動して対象のリポジトリを選択し、左側ペインより「ブランチ」をクリックし「ブランチの作成」ボタンをクリックします。
「ブランチの作成」画面で「ブランチ名」と「ブランチ元」を入力し「ブランチの作成」ボタンをクリックします。
下図のようにブランチが2つできていることを確認します。
ブランチを使った動作確認
作成したブランチを使った動作確認をします。
再度ソースコードを改修して「Commit and Push」ボタンをクリックします。
AWS CodeCommit のダッシュボードに移動し対象のリポジトリを選択し、左側ペインより「コミット」を選択し「コミットの比較」タブをクリックします。
ソースに「master」、ターゲットに作成したブランチを選択して比較ボタンをクリックします。
ソースコードの差分を確認します。
通知の設定
イベントが発生した際に SNSトピックを利用して通知をする設定もできます。
CodeCommitのダッシュボードの左側ペインより「設定」をクリックし「通知」タブをクリックし「通知ルールの作成」ボタンをクリックします。
「通知ルールの設定」画面で通知名を設定し、「詳細タイプ」は「フル」を選択し「通知をトリガーするイベント」は「すべてを選択する」をクリックしてすべて選択します。
ターゲットで「ターゲットの作成」ボタンをクリックします。
※ここで既存のターゲットを選択することもできますが、エラーになることがあります。その場合は既存のターゲットを選択せずに新規でターゲットの作成をしてください。
「ターゲットの作成」画面で以下のように設定して「作成」ボタンをクリックします。
- ターゲットタイプ ← SNS トピック
- トピック名 ← 自走的に作成されたトピック名
通知ルールが作成されたことを確認します。
トピックが作成されたら SNS ダッシュボードに移動します。
先ほど作成したトピックをクリックします。
「サブスクリプションの作成」ボタンをクリックします。
「サブスクリプションの作成」画面で以下のように設定します。
- トピックARN ← 先ほど作成したトピックを選択します。
- プロトコル ← Eメールを選択します。
- エンドポイント ← メールアドレス(xxxx@gmail.com等)を入力します。
次にトリガーを作成します。
「トリガー」タブをクリックして「トリガーの作成」ボタンをクリックします。
「トリガーの作成」画面で以下のように設定します。
- トリガー名 ← 任意の名前を設定します。
- イベント ← すべてのリポジトリイベントを設定します。
- ブランチ名 ← master を設定します。(10個までブランチを設定できます。)
「サービスの詳細」画面で以下のように設定して「トリガーの作成」ボタンをクリックします。
- 使用するサービスの選択 ← Amazon SNS
- SNSトピック ← 別途作成した SNS トピックを選択します。
トリガーが作成されたことを確認します。
メール確認
実際に CodeCommit の処理を実行しメールが送信されることを確認します。
プルリクエストの作成
次にプルリクエストを作成します。
対象のリポジトリを選択し、左側ペインより「ブランチ」をクリックし「プルリクエストの作成」ボタンをクリックします。
「プルリクエストの作成」画面で以下のように設定して「比較」ボタンをクリックします。
- ソース ← master
- ターゲット ← 作成したブランチ
タイトルを設定します。
「プルリクエストの作成」ボタンをクリックします。
プルリクエストが作成されたことを確認し、「変更」タグをクリックします。
変更内容を確認し問題がなければ「マージ」ボタンをクリックします。
「リクエストの詳細マージ」画面でマージ戦略をデフォルトの「早送りマージ」のままにして「プルリクエストのマージ」ボタンをクリックします。
マージ済みになっていることを確認します。
マージ結果の確認
マージ結果の確認をします。
「master」と作成したブランチのコミットが同じであることを確認します。
「コミットの比較」タブをクリックしソースとターゲットを設定しちがいがないことをかくにんしま
メールでも通知が来ていることを確認します。
AWS CodeBuild
次は AWS CodeBuild に入ります。
CodeBuild はフルマネジメントサービスで、ソースコードのコンパイルや、単体テストの実行やデプロイ可能なアーティファクト(artifact)を提供します。
S3 バケットの作成
S3 バケットを作成します。
S3 のダッシュボードに移動しします。
「バケットを作成」ボタンをクリックします。
バケット名を設定します。
その他はデフォルトのままで「バケットを作成」ボタンをクリックします。
次にビルドセットを保存するフォルダを作成します。
先ほど作成したバケットをクリックします。
「フォルダの作成」ボタンをクリックします。
フォルダ名を設定して「フォルダの作成」ボタンをクリックします。
S3 のバージョニングを有効化する
S3 のバージョニングを有効化します。
CodeBuild の設定
CodeBuild のダッシュボードに移動します。
「ビルドプロジェクトを作成する」ボタンをクリックします。
「ビルドプロジェクトを作成する」画面で以下のように設定して下にスクロールします。
- プロジェクト名 ← 任意の名前を付けます。
- 説明 ← 任意の説明を記載します。
- ビルドバッジ ← ビルドバッジを有効にするにチェックを入れます。
以下のように設定して下にスクロールします。
- ソースプロバイダ ← AWS CodeCommit を選択します。
- リポジトリ ← 作成したリポジトリを選択します。
- リファレンスタイプ ← ブランチにチェックを入れます。
- ブランチ ← master を選択します。
追加設定で以下のように設定して下にスクロールします。
- Git サブモジュール ← gitサブモジュールを有効にするにチェックを入れます。
環境設定で以下のように設定して下にスクロールします。
- 環境イメージ ← マネージド型イメージにチェックを入れます。
- オペレーティングシステム ← Amazon Linux2 を選択します、
- ランタイム ← Standard を選択します。
- イメージ ← 一番最新のもの(一番数値が大きいもの)を選択します。
- イメージのバージョン ← このランタイムバージョンには常に最新のイメージを使用してくださいを選択します。
- 環境タイプ ← Linux を選択します。
以下のように設定して下にスクロールします。
- サービスロール ← 新しいサービスロールにチェックを入れます。
- ロール名 ← 自動的に入ります。
- ビルド仕様 ← buildspec ファイルを使用するにチェックを入れます。
バッチ設定はそのままの状態で下にスクロールします。
アーティファクトの設定で以下のように設定して下にスクロールします。
- タイム ← Amazon S3 を選択します。
- バケット名 ← S3 で作成したバケット名を入力します。
- セマンティックバージョニングの有効化 ← チェックを入れます。
- パス‐オプショナル ← S3 バケットの下に作成したフォルダ名を入力します。
以下のように設定して下にスクロールします。
- アーティファクトのパッケージ化 ← Zip にチェックを入れます。
- アーティファクト暗号化の解除 ← チェックを入れます。
ログの設定で以下のように設定して「ビルドプロジェクトを作成する」ボタンをクリックします。
- CloudWatch Logs ‐オプショナル ← チェックを入れます。
- グループ名 ← 任意のグループ名を入力します。
- ストリーム名 ← 任意のストリーム名を入力します。
ビルドプロジェクトが作成されたことを確認します。
Maven install を実行する
ここで Maven clean と Maven install を実行します。
プロジェクトを右クリックし、「Run As」‐「Maven clean」をクリックします。
下図のように「BUILD SUCCESS」が表示されていることを確認します。
次に Maven install をやります。
プロジェクトを選択して右クリックし、「Run As」‐「Maven install」をクリックします。
pom.xml ファイルの修正
次に pom.xml ファイルを修正します。
pom.xml ファイルをダブルクリックして開きます。
■修正前
■修正後
ここまで進めたら再度上の手順の「Maven clean」と「Maven install」を実行します。
buildspec.yml ファイルを作成する
ここで buildspec.yml ファイルを作成します。
プロジェクトを選択して右クリックし、「New」‐「File」をクリックします。
「Create New File」画面で「File name」を「buildspec.yml」として「Finish」ボタンをクリックします。
以下のように buildspec.yml ファイルに追記します。
■buildspec.yml ファイル
version: 0.2 runtime-versions: |
「pom.xml」の修正と「buildspec.yml」ファイルが追加されたので保存して「Commit and Push」します。
ビルドを開始する
ここまで準備したら実際にビルドを開始します。
作成したビルドプロジェクトに移動し「ビルドを開始」ボタンをクリックします。
ステータスが「成功」になっていることを確認します。
CloudWatch の設定
以下のページを参考に CodeBuild のビルド通知を設定します。
CodeBuild のビルド通知サンプル
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-build-notifications.html
ステートチェンジとフェーズチェンジの2つを作ります。
CloudWatchのダッシュボードに移動します。
■ステートチェンジ
最初にステートチェンジのルールを作成します。
以下のページを参考にイベントパターンを設定します。
CodeBuild のビルド通知サンプル
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-build-notifications.html
■フェーズチェンジ
次にフェーズチェンジのルールを作成します。
以下のページを参考にイベントパターンを設定します。
CodeBuild のビルド通知サンプル
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-build-notifications.html
最終的に以下のように2つのルールを作成しました。
下図のようなメールが届きます。
AWS CodeDeploy
次は AWS CodeDeploy について設定をしていきます。
プラットフォームは EC2、AutoScalling や ELB だけでなく、データセンターのオンプレも可能です。
ソースは S3 や GitHub が可能です。
CodeDeploy 用サービスロールの作成
IAM のダッシュボードに移動します。
EC2 インスタンスへの割り当て用の IAM ロールのポリシーの作成
次に EC2 インスタンスに割り当てる IAM ロールのポリシーを作成します。
EC2 インスタンスへの割り当て用の IAM ロールの作成
次にロールを作成します。
EC2 インスタンスの作成
次にデプロイ先となる EC2 インスタンスを構築します。
ここでは Tomcat8 の関係で Amazon Linux を構築します。
EC2のダッシュボードに移動します。
■ユーザデータ
#!/bin/bash |
■tomcat8の起動確認
[ec2-user@ip-172-31-1-231 ~]$ sudo service codedeploy-agent status
[ec2-user@ip-172-31-1-231 ~]$ sudo java -version
[ec2-user@ip-172-31-1-231 ~]$ sudo service tomcat8 status
[ec2-user@ip-172-31-1-231 ~]$ sudo service tomcat8 start
[ec2-user@ip-172-31-1-231 ~]$ sudo service tomcat8 status [ec2-user@ip-172-31-1-231 ~]$ [ OK ] |
■tomcat8の動作確認
[ec2-user@ip-172-31-1-231 ~]$ ps -ef | grep java
[ec2-user@ip-172-31-1-231 ~]$ cd /usr/share/tomcat8/
[ec2-user@ip-172-31-1-231 tomcat8]$ ls
[ec2-user@ip-172-31-1-231 tomcat8]$ cd webapps/
[ec2-user@ip-172-31-1-231 webapps]$ ls |
■tomcat8の動作確認
[ec2-user@ip-172-31-1-231 webapps]$ pwd
[ec2-user@ip-172-31-1-231 webapps]$ sudo mkdir ROOT
[ec2-user@ip-172-31-1-231 webapps]$ cd ROOT
[ec2-user@ip-172-31-1-231 ROOT]$ sudo vi index.html |
ブラウザを起動し、下図のように「http://パブリックIP:8080」で表示されることを確認します。
アプリケーションの作成
CodeDeployのダッシュボードに移動します。
デプロイメントグループの作成
先ほど作成したアプリケーションのデプロイグループを作成します。
対象のアプリケーションをクリックします。
「トリガーの作成」ボタンをクリックすると別画面が起動するので下図のように設定をします。
インスタンスのトリガーはブルー/グリーンで利用します。今回はブルー/グリーンは使用しないので選択しません。
appspec.ymlファイルの作成
以下のように appspec.yml ファイルを作成します。
■appspec.yml ファイル
|
次に scripts フォルダを作成します。
デプロイメントの実行
準備ができたらデプロイを実行します。
「デプロイの作成」ボタンをクリックします。
AWS CodePipeline
最後に CodePipeline の設定をします。
コメント