yurake/k8s-3tier-webapp

View on GitHub
.github/workflows/kind-chaos-mesh-ci.yml

Summary

Maintainability
Test Coverage
name: kind Chaos Mesh CI

on:
  push:
    branches:
      - master
    paths:
      - "**.yaml"
      - ".github/workflows/kind-chaos-mesh-ci.yml"
  pull_request:
    paths:
      - "**.yaml"
      - ".github/workflows/kind-chaos-mesh-ci.yml"

env:
  CHAOS_MESH_VERSION: 2.6.4

jobs:
  chaos-mesh-ci:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v4.1.7
      - name: Kind Cluster
        uses: helm/kind-action@v1.10.0

      - name: Print cluster information
        run: |
          kubectl config view
          kubectl cluster-info
          kubectl get nodes
          kubectl get pods -n kube-system
          helm version
          kubectl version --output=yaml

      - name: check server kubectl version
        run: |
          echo "SERVER_KUBECTL_VERSION=$(kubectl version --output=yaml | grep gitVersion | sed 's/.*gitVersion: v\([0-9.]*\).*/\1/g' | sed -n '2p')" >> $GITHUB_ENV

      - name: add v to kubectl version
        run: |
          echo "SERVER_V_KUBECTL_VERSION=$(echo v${{ env.SERVER_KUBECTL_VERSION }})" >> $GITHUB_ENV

      - name: update kubectl version
        uses: azure/setup-kubectl@v4.0.0
        with:
          version: ${{ env.SERVER_V_KUBECTL_VERSION }}

      - name: Deploy an application
        run: |
          kubectl apply -f kubernetes/mysql/mysql-pv.yaml
          kubectl apply -f kubernetes/mysql/mysql-pvc.yaml
          kubectl apply -f kubernetes/mysql/mysql-configmap.yaml
          kubectl apply -f kubernetes/mysql/mysql-secret.yaml
          kubectl apply -f kubernetes/mysql/mysql-deployment.yaml
          kubectl apply -f kubernetes/mysql/mysql-service.yaml
          kubectl apply -f kubernetes/jaxrs-mysql-quarkus/jaxrs-mysql-quarkus-service.yaml
          kubectl apply -f kubernetes/jaxrs-mysql-quarkus/jaxrs-mysql-quarkus-deployment.yaml

      - name: Wait pod status to running
        run: |
          kubectl wait --all-namespaces=true --for=condition=ready pod -l component=quarkus --timeout=15m
          kubectl wait --all-namespaces=true --for=condition=ready pod -l app=mysql --timeout=5m

      - name: Check pods
        run: |
          kubectl get pods -n chaos-testing
          kubectl get pods

      - name: install chaos mesh
        run: |
          curl -sSL https://mirrors.chaos-mesh.org/v2.4.2/install.sh | bash
          kubectl apply -f ./kubernetes/test/chaos-mesh/chaos-mesh-namespace.yaml

      - name: Chaos Mesh apply experiments
        working-directory: ./kubernetes/test/chaos-mesh/experiments
        run: |
          kubectl apply -f burn-cpu.yaml
          kubectl apply -f container-kill.yaml
          kubectl apply -f io-delay.yaml
          kubectl apply -f network-delay.yaml
          kubectl apply -f network-loss.yaml
          kubectl apply -f pod-failure.yaml
          kubectl apply -f pod-kill.yaml
          kubectl apply -f time-shift.yaml

      - name: Check status Chaos Mesh
        run: |
          kubectl get pods -n chaos-mesh
          kubectl get schedule -n chaos-testing

      - name: check log jaxrs-mysql
        if: always()
        run: |
          kubectl describe po $(kubectl get pods | awk '{print $1}' | grep jaxrs-mysql)
          kubectl logs $(kubectl get pods | awk '{print $1}' | grep jaxrs-mysql)

      - name: check log mysql
        if: always()
        run: |
          kubectl describe po $(kubectl get pods | awk '{print $1}' | grep -E ^mysql)
          kubectl logs $(kubectl get pods | awk '{print $1}' | grep -E ^mysql) -c mysql