Sign In

Curriculum 25: Production Workflows

CI/CD Pipelines

18 min · 35 XP

kubectl in CI/CD Pipelines

Integrating kubectl into CI/CD pipelines automates Kubernetes deployments, ensuring consistent and repeatable releases.

kubectl in GitHub Actions

A typical workflow authenticates to the cluster and applies manifests:

name: Deploy to Kubernetes
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

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

      - name: Configure kubeconfig
        run: |
          echo "$KUBECONFIG_DATA" | base64 -d > $HOME/.kube/config
        env:
          KUBECONFIG_DATA: ${{ secrets.KUBECONFIG }}

      - name: Deploy
        run: |
          kubectl set image deployment/myapp \
            myapp=myregistry/myapp:${{ github.sha }}
          kubectl rollout status deployment/myapp --timeout=300s

Image Tagging Strategies

Use deterministic tags tied to your CI pipeline rather than mutable tags like latest:

# Tag with Git SHA for traceability
docker build -t myregistry/myapp:${GITHUB_SHA} .

# Update the deployment image
kubectl set image deployment/myapp \
  myapp=myregistry/myapp:${GITHUB_SHA}

# Verify the rollout succeeded
kubectl rollout status deployment/myapp

Rollout Strategies

Control how updates are delivered to minimize downtime:

# Check current rollout strategy
kubectl get deployment myapp -o jsonpath='{.spec.strategy}'

# Trigger a rolling update
kubectl set image deployment/myapp myapp=myregistry/myapp:v2.0.0

# Pause a rollout for manual verification
kubectl rollout pause deployment/myapp

# Resume after validation
kubectl rollout resume deployment/myapp

# Rollback if something goes wrong
kubectl rollout undo deployment/myapp

Using rollout status in your pipeline ensures the job fails if pods do not become ready, providing fast feedback on broken deployments.