AWSリソースを使ってCI環境を構築してみた
2024-12-13
azblob://2024/12/13/eyecatch/2024-12-13-ci-cd-aws-github-000.jpg

こんにちは。

今回は実際に業務で作成したCI環境についての記事を書いてみました。

この記事ではどのような構成でCI環境を整えたのかについてを重点的に説明します。

具体的な実装方法についてはまた別の記事で説明できればと思っています。

CI/CDとは

初めによく耳にするCI/CDとはそもそも何かについて説明したいと思います。

CIとは、継続的インテグレーションのことを指します。

変更のマージ、ビルド、およびテストを自動化することであり、自動化されたビルドとテストにより、開発者は手動での作業やテストの重複を省くことができ、効率的な開発プロセスを実現します。

CDとは、継続的デリバリ―または継続的デプロイのことを指します。

CIを含む概念であり、変更のマージからリリースまでを自動化することを指します。

簡単に言うとCI/CDとは、何か特定の技術を指すものではなく、ソフトウェアの変更を常にテストし、自動で本番環境に適用できるような状態にしておく開発手法のことを指します。

CI/CDを導入するメリット

CI/CDを導入することで多くのメリットがあるのですが、ここでは実際に僕が体感したなかでこれはすごいと思った2つを紹介します。

1. リリースの加速

 プログラムのソースコードを変更して、各環境に反映しリリースするまでの作業を手作業で実施しようとすると、多くの時間を要します。ここでCI/CDを活用することで、大幅に時間を短縮することができます。さらに、さらにリリース頻度の加速にもつながります。

2.生産性と品質の向上

 CI/CDを導入すると、これまで人の手で行っていたリリースまでの作業が自動化され、作業者の業務が軽減します。その結果、作業効率が高まり、生産性を向上させることができます。人の手で行う作業についてはどうしても、ミスがつきものとなってしまいます。このミスをなくし、注力できなかった別の作業に時間を費やすことが可能になるため、品質の向上につながります。

CI/CDを導入するデメリット

CI/CDにも、もちろんデメリットはあります。

1. CI/CDパイプラインを構築するための作業負荷が発生する

 CI/CDを最適化するためには、パイプラインの構築が必要になります。しかしこのパイプラインの構築には、かなりの工数が発生するものとなります。

ここで考えることはどうすれば工数が少なく、容易にパイプラインを構築することができるかです。

これを解消してくれたのがAWSでした。

次の章で現在使用しているCIの環境の説明をするので、ぜひ参考にしてみてください。

実際に作成したCI環境

僕がやりたかったこととしてはPRがマージされたタイミングで、資材をビルドしビルド成果物をS3にアップロードすることです。

資材のテストについてはPRが作成された際に、AWS CodeBuildを使用して自動でテストを行うようにしています、このテストの通らなかった場合はそもそもPRをマージすることができないようになっています。

また、S3にアップロードした資材は環境に配置するタイミングに制限があるため手動でAWS CodeDeployを使用して行っています。そのためS3にアップロードするところまでを自動化したものとなります。

前提条件

  • ソースコードの管理をGitHubで行っていること
  • AWSアカウントを持っていること

使用したAWSリソース

  • CodePipeline
  • Code Build

主に使用したリソースはこの2つになります。

他のリソースも詳しく見ると使用しているのですが、、、

簡単な動作は以下です。

GitHubでPRをマージ→CodePipelineがマージを検知してCodePipelineの各ステージが動作する(ここでビルドやテスト)

CodePipelineの1つのステージとしてCodeBuildを使用しているのですが、実際のところ、S3へのアップロードまでを実現したいのであればCodeBuildのみでも可能です。

しかし、後々、デプロイまで自動で行いたいとなったときに、CodePipelineの1つのステージにCodeDeployを追加するだけなので容易に作業を追加することができます。

最後に

今回は、CodeBuildを使用して簡単にCI環境の構築を行いました。また、CD環境の構築が必要になった際に容易に対応できるようにCodePipelineのステージにCodeBuildを追加して、利用しています。

具体的な実装方法についてはまた別のブログで詳しく書こうと思ってます。

他にも、こうやったら簡単にCI/CD環境整えられるよーとかもあるので、これから勉強していきたいと思ってます。

ありがとうございましたー。

参考

今さら聞けないCI/CD(継続的インテグレーション/継続的デリバリー)とは #初心者 - Qiita

CI/CDとは?メリット・デメリットをわかりやすく解説|ITトレンド