1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:GitHub Actions のワークフローを CI/CD の観点から分析し、体系的にまとめてみた

Last updated at Posted at 2025-02-20

はじめに

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をバランスよく組み合わせて、より安定した開発環境を整えていきます。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?