Kubernetes Learning 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

✅ はじめに:CI/CDとKubernetesの関係

CI/CD(継続的インテグレーション/継続的デリバリー)ツールを使うと、コードの変更からKubernetesへの自動デプロイまでをシームレスに行えるようになります。

たとえば、次のような流れです:

1. Git に Push
2. Jenkins または GitHub Actions がビルド&Dockerイメージ作成
3. イメージをコンテナレジストリに push
4. kubectl apply などで Kubernetes にデプロイ

🚀 Jenkins からのデプロイ例

Jenkinsfile(例)

pipeline {
  agent any

  stages {
    stage('Build Docker Image') {
      steps {
        script {
          dockerImage = docker.build("my-app:${BUILD_NUMBER}")
        }
      }
    }

    stage('Push to Registry') {
      steps {
        script {
          docker.withRegistry('https://registry.example.com', 'docker-creds') {
            dockerImage.push()
          }
        }
      }
    }

    stage('Deploy to Kubernetes') {
      steps {
        sh 'kubectl apply -f k8s/deployment.yaml'
      }
    }
  }
}

ポイント

  • Jenkins のエージェントで Docker をビルド
  • レジストリに push(事前に認証設定が必要)
  • kubectl apply で Kubernetes に反映

🧭 GitHub Actions からのデプロイ例

.github/workflows/deploy.yaml

name: Deploy to Kubernetes

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Set up Docker
      uses: docker/setup-buildx-action@v2

    - name: Build Docker image
      run: docker build -t my-app:${{ github.sha }} .

    - name: Login to DockerHub
      run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin

    - name: Push image
      run: docker push my-app:${{ github.sha }}

    - name: Set up kubectl
      uses: azure/setup-kubectl@v3

    - name: Deploy to Kubernetes
      run: |
        kubectl apply -f k8s/deployment.yaml

ポイント

  • GitHubリポジトリに Push されると自動トリガー
  • secrets 機能を使って認証情報を安全に管理
  • kubectl を使ってマニフェストを適用

💡 どちらを選ぶ?

観点JenkinsGitHub Actions
導入の手軽さ自前でサーバ構築が必要GitHubリポジトリと連携するだけ
柔軟性高い(プラグイン豊富)標準構成で十分なことが多い
運用コストやや重い軽量、GitHub上で完結

📌 実際の注意点

  • kubectl を使うには kubeconfig の用意が必要
  • レジストリやクラスタへのアクセスには Secretsの設定 が不可欠
  • デプロイ前に kubectl diff で差分確認を自動化するのもおすすめ

🏁 まとめ

CI/CDツールを使えば、次のような自動化パイプラインが実現できます:

mh

Related Posts

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

You Missed

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

  • 投稿者 mh
  • 6月 24, 2025
  • 88 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第13章:ストレージとデータベースの基礎 : オブジェクトストレージ: Cloud Storage(バケット、オブジェクト、ストレージクラス)- あなたの「データ置き場」

  • 投稿者 mh
  • 6月 23, 2025
  • 101 views

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

  • 投稿者 mh
  • 6月 21, 2025
  • 102 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第12章:Cloud CDN(Content Delivery Network):あなたのWebサイトを「世界中のユーザーに超高速で届ける宅配便ネットワーク」

  • 投稿者 mh
  • 6月 20, 2025
  • 119 views

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

  • 投稿者 mh
  • 6月 19, 2025
  • 111 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 123 views