はじめに
CI/CD(Continuous Integration / Continuous Deployment or Delivery)は、現代のソフトウェア開発において重要なプロセスです。
今回は、以下のGitHub ActionsのワークフローがCI(継続的インテグレーション)なのか、それともCD(継続的デプロイ/継続的デリバリー)なのかを分析します。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
対象のGitHub Actionsワークフロー
以下のワークフローは main
ブランチへの Go
ファイルの変更時にトリガーされ、Dockerイメージをビルドして Amazon ECR にプッシュするものです。
name: Push to ECR
on:
push:
branches:
- main
paths:
- '**/*.go' # Goファイルに変更があった場合のみ実行
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
# リポジトリのクローン
- name: Checkout code
uses: actions/checkout@v3
# AWS CLI のセットアップ
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v3
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
# Dockerログイン
- name: Log in to Amazon ECR
run: |
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} \
| docker login --username AWS --password-stdin \
$(aws sts get-caller-identity --query 'Account' --output text).dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com
# Dockerイメージのビルド
- name: Build Docker image
run: |
docker build -t ${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }} -f Dockerfile.prod .
# Dockerイメージのタグ付け
- name: Tag Docker image
run: |
docker tag ${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }} \
$(aws sts get-caller-identity --query 'Account' --output text).dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }}
# Dockerイメージのプッシュ
- name: Push Docker image to Amazon ECR
run: |
docker push \
$(aws sts get-caller-identity --query 'Account' --output text).dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/${{ secrets.ECR_REPOSITORY }}:${{ secrets.IMAGE_TAG }}
CI/CDのどちらに該当するのか?
CI(継続的インテグレーション)とは?
CIは、コードの変更を自動でテスト・ビルドし、品質を担保するプロセスを指します。一般的なCIのワークフローには以下のステップが含まれます。
- コードの静的解析(例:Lintチェック)
- ユニットテストの実行
- ビルドの確認
CD(継続的デリバリー/継続的デプロイ)とは?
CDは、ビルド済みのアプリケーションを本番または準本番環境へ継続的にデプロイするプロセスです。
- 継続的デリバリー(Continuous Delivery): 手動承認を経てデプロイ
- 継続的デプロイメント(Continuous Deployment): 自動でデプロイ
今回のワークフローの分析
上記のワークフローでは、以下の処理を行っています。
-
AWS ECR へのDockerイメージのビルド&プッシュ
docker build
docker push
- CIに必要なテストや静的解析の処理がない
このことから、このワークフローはCD(継続的デプロイ/デリバリー)に該当 します。
CIを追加するには?
このワークフローにCIの要素を加えるには、以下のようなユニットテストやLintチェックを追加するのがよいと思います。
# ユニットテストの実行(CIの要素)
- name: Run tests
run: go test -v ./...
このようなテストが組み込まれることで、CI/CDパイプラインの完全な構築が可能になります。
まとめ
- 現在のワークフローはCD(継続的デリバリー/デプロイメント) に該当する
- CI(テストやLintチェック)の要素は含まれていない
- CI/CDのフルパイプラインにするには、テストを追加することが望ましい
GitHub Actionsを活用することで、効率的なCI/CDパイプラインを構築できます。
今後の開発では、CIとCDをバランスよく組み合わせて、より安定した開発環境を整えていきます。