【Code3兄弟シリーズ】CodePipeline

記事タイトルとURLをコピーする

こんにちは、技術4課の多田です。

9月から所属部署が技術4課に変わりまして、気分新たに記事を投稿していきます!

さて、今回でCode3兄弟シリーズラストの投稿回になります。
最後は、AWS CodePipeline(以下、CodePipeline)と仲良くなりたいと思います。
尚、過去記事は以下です。

以下が目次です。

  1. CodePipelineとは
  2. CodePiplineの実践
  3. まとめ

CodePipelineとは

CodePipelineとは、アプリケーションのデプロイプロセス(ビルドやテスト等)のフローを自動化するためのサービスです。
CodePipelineでは、次のような特徴があります。

  • AWSマネージドのワークフローコントローラー
  • CodePipelineではデプロイフローの状況をリアルタイムでUIから確認が可能
  • AWSリソースやサードパーティとの連携が充実

以下の画像は、CodePipelineのサービスイメージ図になります。

codepipeline-1

 

料金については、1アクティブパイプライン毎に$1/月がかかります。
ここでいうアクティブパイプラインとは、1度でも実行したパイプラインを指します。
尚、CodeDeployとCodePipelineを連携したサンプルアプリのデプロイについては、次のブログでも紹介しているためご覧ください。

AWSリソースやサードパーティとの連携先については、私が発表した資料のP29,P30に載せていますので、併せてご覧ください。

CodePipelineの実践

それでは、実際にCodePipelineを使っていきましょう。
今回の構成は、以下になります。

image

シリーズの最終系として、Code3兄弟のみでソースコードの管理からEC2へのアプリ展開まで実施します。
ただ、全てのサービスの利用を考慮して利用するリージョンは、バージニアを選択しております。
尚、記事で紹介するのは、CodePipelineの設定に関することのみでその他のCodeCommitやCodeDeployについては、記載を割愛しております。

0.事前準備(Jenkinsの設定)

今回、ビルド処理としてJenkinsを利用しますが、実行環境をEC2上に設定します。
その際、注意点として、「AWSCodePipelineCustomActionAccess」を付与したIAMポリシーをアタッチしてEC2を起動してください。
IAMロールの定義方法については、こちらをご覧ください。


Jenkinsをセットアップ後、CodePipelineのプラグインをインストールします。
Jenkinsの管理画面から [Jenkinsの管理] > [プラグインの管理] > [利用可能タブ]より「AWS CodePipeline Plugin」を検索し、インストールします。
プラグインをインストール後、CodePipelineとの連携設定を行います。

まずは、Jenkinsのプロジェクト名を決めます。
ここで、定義したものがCodePipelineの設定でも必要となります。

presetup-1次に、CodePipelineに関する設定を定義していきます。
AWS Regionには、利用するリージョンを選びます。
Access KeyとSecret Keyで利用するIAMユーザーのcredential情報を入力します。
また、ProviderもCodePipeline側でも定義を行うため、記憶できるものを定義しましょう。

presetup-2次に、Jenkinsのポーリングの間隔を定義します。
「SCMをポーリング」を有効化し、cron形式でポーリング間隔を定義します。今回は、毎分ポーリングするようにしました。
presetup-3

そして、ビルド後の処理に「AWS CodePipeline Publisher」を指定します。
Locationには何も入力せず、保存します。これで最終的にJenkinsの処理が完了後、CodePipelineに結果を渡して後続の処理へと繋げます。
presetup-4

以上で事前準備が完了です。
尚、ビルドの処理の定義についてはCodePipelineとJenkinsの連携設定とは直接関係がないため、割愛させて頂きます。

1.パイプラインに任意の名前をつける

これから作成する、パイプラインに任意の名前をつけます。

codepipeline-1

2.ソースコードを格納しているサービスを選択

まず、Source providerは「AWS CodeCommit」を選択します。
次に、ソースコードを取得するリポジトリとブランチを選択します。

codepipeline-2

3.ビルドのサービスを選択

ビルドの処理を行うため、「Add Jenkins」を選択します。
加えて、Provider nameとProject nameには、事前準備で行ったJenkinsの定義を入力し、Server URLにはJenkinsの管理画面へのアクセスURLを記載します。

codepipeline-3

4.デプロイサービスの選択

インスタンスにデプロイするサービスを選択するのですが、Deploy providerでは「AWS CodeDeploy」を選択します。
Application nameとDeployment groupで使用するCodeDeployの設定を選択します。

codepipeline-6

5.IAMロールの設定

CodePiplineが使用するAWSリソースへのIAMロールを設定します。
「Create role」を選択すれば、新規のIAMロールを作成できます。

codepipeline-7

6.設定の確認

1~5までの設定を確認する画面になります。
問題なければ、「Create pipeline」を選択します。

7.パイプライン作成後の確認

CodePipeline作成後、ソースコードを取得してインスタンスへのデプロイまで処理が実行されます。

result-1

オールグリーンで、処理が完了したため、EC2のコンテンツを確認します。
意図したサーバーのコンテンツが確認できたので、デプロイ成功です。

result-2

まとめ

Code3兄弟との連携でCodePipelineを使ってみましたが、いかがでしたでしょうか?
サードパーティやAWSサービスとの連携の幅が広がっており、今後の展開が楽しみです。
また、Lambdaとの連携もできるので、今後はデプロイプロセスにサーバーが不要になったりするのかな、なんて夢想したりもできます。