#概要
CodePipeline CodeCommit CodeBuild CodeDeploy を用いたデプロイの流れをざっくり解説しました。
細かい設定や、ファイルへの記述は最後に書いていないです。
#参考にさせていただいた講座および引用させていただいた画像
Techpit 「Laravel × CircleCI × AWSで学ぶCI/CD」 shonansurvivors様 著
#基盤となる図
1~7まではローカルからCircleCIを通して、featureブランチでテストをパスした後masterにマージ。そしてテストを行っている。
その後からCode〇〇を用いたデプロイの開始である。
#Code〇〇のそれぞれの役割
##CodePipeline
デプロイをするためのパイプラインを文字通り作っている。以下の図のようにCodeCommit CodeBuild CodeDeploy をこのパイプラインに当てはめる。
これがデプロイするためのパイプライン(CodePipeline)である。
下記の図で上からCodeCommit CodeBuild CodeDeploy の順に並ぶ。
CodePipeline を作成する際にCodeCommit CodeBuild CodeDeploy という3つのパーツを当てはめる。
また、CodePipelineを作成するときにCodePipeline用のS3バケットが自動で作成される。
#Codecommit
CodeCommitとは、AWS上に存在するGitリポジトリのサービス(AWS版のGitHubのようなもの)。
CodeCommitに最新のmasterブランチがプッシュされると、そのコードがS3にコピーされ(図の9)、これをCodeBuildが取得します(図の10)。
#Codebuild
CodebuildはS3から先程コピーされたソースコードを取得。
テスト、パッケージのインストールを実行して、すぐにデプロイできるアーティファクトを生成する役割(図の10,11,12)。
例としては、yarn install yarn test rake assets:precompile等を実行してデプロイできる準備を行う。
テストをここで行うこともできるので、CircleCIでのテストを省略可能。
行いたいコマンドをbuildspec.yml に記述しアプリケーションのトップディレクトリに配置する。(詳しくは後)
#CodeDeploy
デプロイを指示する役割(図の13)。S3からビルド後のファイル群を取り出し、EC2にデプロイします(図の14)。
また、EC2からRDSのDBに対してマイグレーションを実行します(図の15)
appspec.yml というファイルをアプリケーションのトップディレクトリに配置することによってデプロイする際のコマンド(rails db:migrate など)を指定することができる(後に詳しく)
#全体の流れ
全体の流れとしては
① CircleCIでのテストをパスしたソースコードをCodeCommitにpush
② そのソースコードをCodeCommitからS3にコピー
③ CodebuildがS3からソースコードを取得し、デプロイの準備のためのコマンドを実行
④ CodeDeployがデプロイを指示。その際に、データベースのマイグレーションなど行いたいコマンドを実行。