#■AWSのCode シリーズ#
CodeCommit
ソースコードを管理するGitリポジトリサービス
CodeBuild
ソースコードのビルド/テスティングサービス
CodeDeploy
ビルドされたモジュールのデプロイサービス
CodePipeline
継続的デリバリー/継続的インテグレーションをサポートするサービス
#1.CodeCommit#
概要
- 簡単にGitリポジトリをホストすることができる。
- サードバーティ製のツールも利用可能。
- プルリクエスト機能も利用可能。
接続方法
その他参考情報
##1-1 CodeCommitのリポジトリを作成する##
##1-2 初期セットアップ、コードのPush##
IAMユーザの権限を使って、CodeCommitのリポジトリに接続し、Pushします。
gitを利用するのに最初に実行。
git config --global credential.helper '!aws --region ap-northeast-1 codecommit credential-helper $@'
git config --global credential.UseHttpPath true
誰が登録したかわかるようにユーザー情報を入れる。
git config --global user.name "[user_name]"
git config --global user.email "[user_email]"
gitでこのディレクトリを管理すると定義する。
git init
##.gitができあがっていることも確認しておく。
ll -a
drwxrwxr-x 7 ec2-user ec2-user 4096 3月 26 00:47 .git
先程作成したリポジトリをリモートとして登録する。
git remote add origin [https_clone_url]
git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
buildspec.yml
src/
nothing added to commit but untracked files present (use "git add" to track)
全てを追加する。
git add -A
git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: buildspec.yml
new file: src/appspec.yml
new file: src/img/img1.jpeg
new file: src/img/img2.jpeg
new file: src/index.php
new file: src/script/clean.sh
コミットする。
git commit -m "first commit"
[master (root-commit) e9e67f0] first commit
6 files changed, 69 insertions(+)
create mode 100644 buildspec.yml
create mode 100644 src/appspec.yml
create mode 100644 src/img/img1.jpeg
create mode 100644 src/img/img2.jpeg
create mode 100644 src/index.php
create mode 100644 src/script/clean.sh
pushする。
git push origin master
[ec2-user@demo-batch work]$ git push origin master
Counting objects: 11, done.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (11/11), 516.43 KiB | 18.44 MiB/s, done.
Total 11 (delta 0), reused 0 (delta 0)
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo-codcommit
* [new branch] master -> master
#2.CodeBuild#
概要
- ビルドサービス
- ソースコードのコンパイルを行ったり、テストを実行する環境を簡単に構築することができる。
- CodeBuild上で行う作業については、buildspec.ymlに定義する。
##2-1 成果物格納用のS3バケットを準備しておく##
S3バケットを作成し、バージョニング を有効にしておく。
バージョニングについては実際に試されている↓の記事が参考になりました。
今さらだけどS3のバージョニングを試してみた。
##2-2 buildspec.ymlを作成する##
##[application-name] は後で必要になるので適当な名前に、
##[S3-bucket-name]は「2-1 成果物格納用のS3バケットを準備しておく」で作成したS3バケットを指定。
version: 0.1
phases:
build:
commands:
- aws deploy push --region ap-northeast-1 --application-name [application-name] --s3-location s3://[S3-bucket-name]/sample.zip --source src
artifacts:
files:
- '**/*'
base-directory: src
name: sample.zip
##2-3 CodeBuildプロジェクトを作成する##
[Source provider][リポジトリ] は「1.AWSCodeCommit」のリポジトリから取ってくるように指定します。
[Operating system]は Ubuntu しか選べません。
Amazon Linux2も選べるようになりましたね。
[Runtime]は PHP にしておきます。
[Service role]は New service role で新しく作成する。※後でポリシーを追加します。
[Type]は AmazonS3
[Bucket name]に作成したS3バケットを指定
[Enable semantic versioning]にチェック
[Namespace type]はBuild IDを指定
##2-4 Service roleにIMAポリシーを追加する##
先ほど作成した、Service roleに以下2つのポリシーを追加してください。
AWSCodeDeployDeployerAccess AmazonS3FullAccess
#3.CodeDeploy#
- デプロイ自動化サービス
- appspec.ymlにデプロイ時の動作を定義する
- デプロイ方式を1台、半分、全台など選択可能。
- デプロイ先にエージェントをインストールする必要がある。
AppSpec の「hooks」
Hooksでライフサイクルイベントを設定してデプロイ時に任意のスクリプトを実行できます。
また、スクリプトの実行ポイントは複数あり、細かく制御可能です。
フックスクリプトはアプリケーションのアーカイブ(zip)にバンドルし、S3やCodeCommitにアップロードします。
通常、アプリケーションにhooksディレクトリやScripsディレクトリを作成し、実行権を付与したスクリプトファイルを配置します。
AppSpec の「hooks」セクション
CodeDeployのApplicationStopイベントフックはどう実行される?
##3-1 EC2インスタンスにIAMロールを作成する##
EC2に以下のIAMロールのポリシーで作成し、EC2にアタッチする。
AmazonS3FullAccess
##3-2 EC2インスタンスにCodeDeployエージェントをインストールする##
wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x install
sudo ./install auto
##3-3 CodeDeploy用のIAMロールを作成する##
CodeDeployに以下のIAMロールのポリシーで作成する。
AWSCodeDeployRole
##3-4 CodeDeployアプリケーションを用意する##
[アプリケーション名]には、CodeBuildで決めたアプリケーション名を入力してください。
[コンピューティングプラットフォーム]は、EC2。
デプロイグループの作成
[デプロイグループ名]に任意のものを入力。
[サービスロール]は、「3-3 CodeDeploy用のIAMロールを作成する」で作成したものを選択。
[デプロイ設定]は、CodeDeployDefault.AllAtOne。
##3-5 CodeBuildを開始する##
[Container] 2019/03/27 11:15:26 Waiting for agent ping
[Container] 2019/03/27 11:15:29 Waiting for DOWNLOAD_SOURCE
[Container] 2019/03/27 11:15:33 Phase is DOWNLOAD_SOURCE
[Container] 2019/03/27 11:15:33 CODEBUILD_SRC_DIR=/codebuild/output/src359827589/src/git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo-codcommit
[Container] 2019/03/27 11:15:33 YAML location is /codebuild/output/src359827589/src/git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo-codcommit/buildspec.yml
[Container] 2019/03/27 11:15:33 Processing environment variables
[Container] 2019/03/27 11:15:33 Moving to directory /codebuild/output/src359827589/src/git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo-codcommit
[Container] 2019/03/27 11:15:33 Registering with agent
[Container] 2019/03/27 11:15:33 Phases found in YAML: 1
[Container] 2019/03/27 11:15:33 BUILD: 1 commands
[Container] 2019/03/27 11:15:33 Phase complete: DOWNLOAD_SOURCE Success: true
[Container] 2019/03/27 11:15:33 Phase context status code: Message:
[Container] 2019/03/27 11:15:33 Entering phase INSTALL
[Container] 2019/03/27 11:15:33 Phase complete: INSTALL Success: true
[Container] 2019/03/27 11:15:33 Phase context status code: Message:
[Container] 2019/03/27 11:15:34 Entering phase PRE_BUILD
[Container] 2019/03/27 11:15:34 Phase complete: PRE_BUILD Success: true
[Container] 2019/03/27 11:15:34 Phase context status code: Message:
[Container] 2019/03/27 11:15:34 Entering phase BUILD
[Container] 2019/03/27 11:15:34 Running command aws deploy push --region ap-northeast-1 --application-name leomaro --s3-location s3://leomaro-codebuild/sample.zip --source src
To deploy with this revision, run:
aws deploy create-deployment --application-name leomaro --s3-location bucket=leomaro-codebuild,key=sample.zip,bundleType=zip,eTag=cc07369e1d36342a99f827d40358d26f,version=q_0JhOdGpyuCg5B1lsavI4Avd5lqnaFa --deployment-group-name <deployment-group-name> --deployment-config-name <deployment-config-name> --description <description>
[Container] 2019/03/27 11:15:40 Phase complete: BUILD Success: true
[Container] 2019/03/27 11:15:40 Phase context status code: Message:
[Container] 2019/03/27 11:15:40 Entering phase POST_BUILD
[Container] 2019/03/27 11:15:40 Phase complete: POST_BUILD Success: true
[Container] 2019/03/27 11:15:40 Phase context status code: Message:
[Container] 2019/03/27 11:15:40 Expanding base directory path: src
[Container] 2019/03/27 11:15:40 Assembling file list
[Container] 2019/03/27 11:15:40 Expanding src
[Container] 2019/03/27 11:15:40 Expanding artifact file paths for base directory src
[Container] 2019/03/27 11:15:40 Assembling file list
[Container] 2019/03/27 11:15:40 Expanding **/*
[Container] 2019/03/27 11:15:40 Found 5 file(s)
[Container] 2019/03/27 11:15:40 Updating artifact name as sample.zip
[Container] 2019/03/27 11:15:40 Phase complete: UPLOAD_ARTIFACTS Success: true
[Container] 2019/03/27 11:15:40 Phase context status code: Message:
CodeDeployのRevisionに作成されていることがわかります。
##3-6 デプロイする##
作成されたRevisionを指定してデプロイしていきます。
[デプロイグループ]は「3-4 CodeDeployアプリケーションを用意する」で作成されたものを指定。
[リビジョンの場所]で「3-5 CodeBuildを開始する」で作成されたものを指定。
これでデプロイは完成です。
#4.CodePipeline#
- 継続的デリバリーをサポートするサービス
- Codecommit/CodeBuild/CodeDeployの流れをパイプラインとして定義することで、ソースコードがコミットされたらデプロイまで自動化
##4-1 パイプラインを作成する##
Step 1:パイプラインの設定を選択する
[パイプライン名]には任意の名前を入力。
[Service role]はNew service roleでここで新しく作成します。
[アーティファクトストア]はカスタムロケーションでS3バケットを指定します。
Step 2:ソースステージを追加する
[ソースプロバイダー]はAWS Codecommitにし、「1.CodeCommit」で作成したものを指定していきます。
Step 3:ビルドステージを追加する
[プロバイダーを構築する]はAWS CodeBuildにし、「2.CodeBuild」で作成したものを指定していきます。
Step 4:デプロイステージを追加する
[デプロイプロバイダー]をAWS CodeDeployにし、「3.CodeDeploy」で作成したものを指定していきます。
Step 5:レビュー
「パイプラインを作成する」
Pipeline作成時と、CodecommitのPush時に動作します。
なので、ここでは何も変わらないので次で動作を確認してみる。
##4-2 CodecommitでPushし動作を確認する##
ファイルを作成してPushする。
git add -A
git commit -m "fix."
git push origin master