テックブログ

技術ネタ

CI/CDをテストしてみる

こんにちは。恥ずかしなら大雑把な概念はわかっているものの、よくわかっていない部分もあるのでAWS で CI/CD をテストしてみたいと思います。
以前 github について弊社スタッフ記事があるのでこちらもご参考ください。
https://www.netassist.ne.jp/techblog/33079/

用意したもの

ローカルでgit command が使える端末
EC2
codecommit,codepipline,codedeply

1.IAM関連

基本的にここは各自の要件にあわせて適切な設定をお願いします。
リポジトリに push する環境用のIAMユーザで AWS CodeCommit 用の認証設定が必要になります。
今回は、
codedeploy 用に AmazonEC2RoleforAWSCodeDeployとAWSCodeDeployRoleを付与したロール
codebuild 用に codecommit に対するカスタムロールを作成付与
EC2用に AmazonEC2RoleforAWSCodeDeploy,AWSCodeDeployRole を付与
を実施しました。もしかしたら過剰に設定した可能性がありますが、一旦精査は後回しにします。

構成イメージ

codecommit作成

リポジトリを作成します。
任意の名称で構いませんが、IAMロールの名称指定で細かく指定する場合は、入力ミスに気をつけてください。

IAM作成

git認証用の設定をしてくだい。今回はhttpsのpush

EC2にはタグ付け
codedeploy 対象になるため、他と被らないように注意してください。

CodeDeploy作成

アプリケーションの作成
コンピューティングプラットフォーム は今回は EC2/オンプレミス を指定
デプロイグループで EC2 に設定するタグと値を指定今回は キーを Deploy、値を prod で設定

CodePipeline 作成

カスタムパイプライン
ソースは codecommit
リポジトリは作ったものを指定
ブランチ名も作ったものを指定
ビルドとテストはスキップ
デプロイは AWS CodeDploy、アプリケーション名とデプロイグループを作ったものを指定

デプロイ先のEC設定

agentインストール

sudo dnf install ruby -y
sudo dnf install wget -y
cd /tmp wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
chmod +x install
sudo ./install auto 
sudo systemctlenable --now codedeploy-agent

操作端末側

任意の方法で

clone git remote add origin https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/XXXXXX

以下のファイルは必須になります。
・appspec.yml
・buildspec.yml
必要なら
・scripts/restart.sh
・app/index.html

appspec.yml

version:0.0
os:linux
files:
-source:/
destination:/var/www/app
hooks:
AfterInstall:
-location:scripts/restart.sh
timeout:60
runas:root

scripts/restart.sh

#!/bin/bash
systemctl restart nginx

chmod +x scripts/restart.sh

buildspec.yml

version: 0.2

phases:
install:
commands:
- echo Installing dependencies…
pre_build:
commands:
- echo Running pre-build commands…
build:
commands:
- echo Building the application…
post_build:
commands:
- echo Build completed successfully!

artifacts:
files:
- '*/'

他なんらかのファイル(実際の htmlファイルなど)

push

$ git add .
$ git status
On branch main
Your branch is based on 'origin/master', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md
        modified:   appspec.yml
        modified:   buildspec.yml
        modified:   scripts/restart.sh
        modified:   test.html
$ git commit -m "today file"
$ git push origin main
Username for 'https://git-codecommit.ap-northeast-1.amazonaws.com': 
Password for 'https://XXXXXXXXXXXXXXXXXXX@git-codecommit.ap-northeast-1.amazonaws.com':

ここで iam に設定したユーザー名とパスワードを問われるので入力してください。
うまくいくと codepipeline上の画面ですべてに緑色のチェックが入ります。

# ll
total 16
-rw-r--r--. 1 root root   0 Jan  5 15:51 20260105
-rw-r--r--. 1 root root 364 Jan  5 15:51 appspec.yml
-rw-r--r--. 1 root root 327 Jan  5 15:51 buildspec.yml
-rw-r--r--. 1 root root  33 Jan  5 15:51 README.md
drwxr-xr-x. 2 root root  24 Jan  5 15:51 scripts
-rw-r--r--. 1 root root  10 Jan  5 15:51 test.html

実際のサーバー場にも同じようにファイルが作成されていたら問題ありません。

リポジトリを更新したら自動でデプロイまで行われたことが確認できました。
実際にはテストのフローを挟むと思いますが、変更したファイルを必要な環境に更新してくれるため、手作業よりも大幅に時間の短縮が見込めます。

ただパイプラインの構築は慣れが必要かもしれません。
AWSでは必須ファイルもあるので、何故かうまくいかないといったことも発生しました。
今回は単純なファイルなため、影響もありませんが、複数人で継続して運用していくには、ルール決め、保守作業なども必要になるかと思います。
また作業内容によってはCI/CDを無理に構築しなくても問題ないかもしれません。

今後AIの台頭によってこういったものがどうなってしまうのかわかりませんが、前提の知識として覚えておこうと思います。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください