CodePipelineが面白い
最近はmining expressの記事一色だったので、たまにはエンジニアらしく技術方面の真面目な記事もアップしておきます。
昨今、サーバレスアーキテクチャが人気を博しておりますが、私の勤務先でもサーバレスへの移行が徐々に進んでおります。その中で現在私は、デプロイ周りのシステム構築整備を担当しており、AWSのCodePipelineというサービスに注目しています。
そこで本記事では、gitlabにて管理しているソースコードをCodePipelineとgitlab-ciの機能を活用することにより、まずはgitlabからCodeBuildへソースコードを転送、ビルドさせる方法について紹介したいと思います。最終的には、ビルド後のアーティファクトをさらにCodePipeline上を経由し、CodeDeployにてBlue/Greenデプロイさせるというのが目的になりますが、その内容はまた後日ご紹介します。
本記事で紹介するデプロイフローの大まかな流れを簡単に表すとこんな感じ。 GitLab-CI >> S3 >> CodePipeLineがS3イベント検知 >> CodeBuild >> ビルド
では参りましょう。
① gitlab-ci
gitlab-ciの設定は、ソースプロジェクトのルートディレクトリに .gitlab-ci.yml
という名前のyamlファイルをおいておくことで設定できます。CIにやらせたいことは大きく2つです。1つはプロジェクト全体をzip化させること。もう1つはzipしたファイルをS3にアップロードすることです。実際のサンプルを以下に示しました。 script
という設定項目に注目していただいたら何をしたいのかおわかりいただけるかと思います。
s3-source-upload: <<: *deploy_prepare stage: production script: - cd $APPHOME && zip -r ../source.zip . - aws s3 cp ../source.zip $S3BUCKET/test_project/ only: - tags - master
② CodePipelineの設定
S3からCodeBuild、そしてCodeDeployまでのPipelineはすべてCodePipelineの管理画面上からできちゃうみたいなので、早速CodePipelineを設定します。以下、画像キャプチャにて管理画面での設定方法を載せました。
まずは、「パイプラインの作成」を押す。
S3の設定は、gitlab-ciで設定した、ソースコードのアップロード先の情報を入力します
これで設定完了です。 改めて、CodePipelineの画面に戻ると、、、、 無事、S3からCodeBuildへのパイプラインが完成していますね。
残念ながらCodeBuild上でのビルド処理でエラーが出ているようですね。 詳細をクリックすると、、、
画面上でログまで見れちゃうんですね。おもしろい。試しにlsしてるとこを見てもらうとわかるのですが、zipしたアーカイブは自動で最初のカレントディレクトリに解凍されてるみたいでした。
③ codebuildの設定
codebuildを動かすためにもyamlでの設定ファイルが必要です。先程のgitlab-ciと同じく、プロジェクトのルートディレクトリに buildspec.yml
という名前でファイルを置いておくと、AWS側が勝手にそれを認識してくれて、そのymlファイルでのビルド設定内容に基づいてビルドを行ってくれるらしいのです。goのアプリなら例えばこんな感じで記述。
version: 0.2 phases: pre_build: commands: - cd /.go/src/test_project - dep ensure build: commands: - go build -o test_project
簡単ですね。
というわけで、AWSのCodePipelineで遊んでみた話でした。一度構築できたら、コードをプッシュするだけで、サーバへのデプロイまで終わらせられるのは、とてつもない運用工数削減になりそうで、いまからワクワクしてます。
次は、CodeBuildからCodeDeployへつなげてみようと思います。お楽しみに。