Mímisbrunnr知恵の泉

← クラウドインフラ 一覧

🎓 レベル:基礎 | 重要度:A(必須)

📎 前提:Dockerイメージとレイヤ | 関連:デプロイ戦略(ローリング・ブルーグリーン・カナリア)GitOpsと自動化

要点(BLUF)

概念 ── CI と CD

CI は「統合の痛みを毎日に分散する」発想。各自が長くブランチを抱えると、最後の合流(マージ)が地獄になる。だからこまめに統合し、そのたびに自動テストして、壊れを小さいうちに潰します。

CD は CI の先。

flowchart LR
    commit["git push(コミット)"] --> ci["CI: ビルド+テスト"]
    ci --> art["イメージ作成・登録"]
    art --> deliv["継続的デリバリ: いつでも出せる状態"]
    deliv -->|"人が承認"| prod1["本番デプロイ"]
    deliv -->|"自動(継続的デプロイ)"| prod2["本番デプロイ"]

仕組み ── パイプラインの段

パイプラインは段(stage/job)の連なり。前段が成功したら次段へ進み、どこかで失敗すれば止まって通知します。典型構成:

flowchart LR
    s1["lint(静的チェック)"] --> s2["test(自動テスト)"]
    s2 --> s3["build(イメージ作成:3章)"]
    s3 --> s4["push(レジストリ登録)"]
    s4 --> s5["deploy(K8s/IaC へ:4・5章)"]

3章のイメージ作り(Dockerイメージとレイヤ)のレイヤキャッシュがここで効きます。依存を先・コードを後にしておくと CI のビルドが速い。

動く例 ── GitHub Actions の最小ワークフロー

push をトリガに lint→test→build を流す例(YAML・要最新確認のアクション版)。

# .github/workflows/ci.yml
name: ci
on:
  push:
    branches: [ main ]
jobs:
  build-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Python セットアップ
        uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - name: 依存インストール
        run: pip install -r requirements.txt
      - name: テスト
        run: pytest -q
      - name: Docker イメージをビルド
        run: docker build -t myapp:${{ github.sha }} .

ポイントは トリガ(on)・ジョブ・ステップの3要素。push で起動し、ステップを上から実行、どれかが失敗すれば赤くなって止まる。${{ github.sha }}コミットごとに一意なイメージタグを付ける(latest を避ける=Dockerイメージとレイヤ)。

なぜ自動化するのか

⚠️ よくある誤解・落とし穴

対応ラボ

cloud-infra-study/labs/06-01_ci.yml(push で lint→test→build を流す GitHub Actions ワークフロー雛形。リポジトリの .github/workflows/ に置いて動作確認)。

関連

第6章 CI/CD 目次