From 4779442335a4a55bd7c5482488af540f6d9ea1c9 Mon Sep 17 00:00:00 2001 From: huangzhangshu Date: Thu, 28 Nov 2024 16:01:54 +0800 Subject: [PATCH] chore: get cloud test result --- .github/utils/utils.sh | 33 +++++ .github/workflows/test-cloud-k3d-self.yml | 136 +++++++++++++-------- .github/workflows/test-cloud-k3d.yml | 142 ++++++++++++++-------- 3 files changed, 210 insertions(+), 101 deletions(-) diff --git a/.github/utils/utils.sh b/.github/utils/utils.sh index 5c4ef22b..0f0852aa 100644 --- a/.github/utils/utils.sh +++ b/.github/utils/utils.sh @@ -48,6 +48,7 @@ Usage: $(basename "$0") 35) bump chart version 36) parse test result 37) update k3d coredns configmap + 38) get cloud test result -tn, --tag-name Release tag name -gr, --github-repo Github Repo -gt, --github-token Github token @@ -377,6 +378,35 @@ get_e2e_test_result() { echo "$TEST_RET" } +set_cloud_test_runs_jobs() { + jobs_name=$1 + jobs_url=$2 + for test_ret in `echo "$TEST_RESULT" | sed 's/##/ /g'`; do + test_type=${test_ret%%|*} + test_type2=${test_ret#*|} + if [[ "$jobs_name" == *"$test_type" && "$jobs_name" != *"-${test_type}" ]]; then + TEST_RET=$TEST_RET"##$test_type2|$jobs_url" + fi + done +} + +get_cloud_test_result() { + for i in {1..2}; do + jobs_url="$GITHUB_API/repos/$GITHUB_REPO/actions/runs/$RUN_ID/jobs?per_page=200&page=$i" + jobs_list=$( gh_curl -s $jobs_url ) + total_count=$( echo "$jobs_list" | jq '.total_count' ) + for i in $(seq 0 $total_count); do + if [[ "$i" == "$total_count" ]]; then + break + fi + jobs_name=$( echo "$jobs_list" | jq ".jobs[$i].name" --raw-output ) + jobs_url=$( echo "$jobs_list" | jq ".jobs[$i].html_url" --raw-output ) + set_cloud_test_runs_jobs "$jobs_name" "$jobs_url" + done + done + echo "$TEST_RET" +} + get_job_url() { JOB_URL="" jobs_url="$GITHUB_API/repos/$GITHUB_REPO/actions/runs/$RUN_ID/jobs?per_page=200&page=1" @@ -1180,6 +1210,9 @@ main() { 37) update_k3d_coredns_cm ;; + 38) + get_cloud_test_result + ;; esac } diff --git a/.github/workflows/test-cloud-k3d-self.yml b/.github/workflows/test-cloud-k3d-self.yml index b64d17ad..7352f6af 100644 --- a/.github/workflows/test-cloud-k3d-self.yml +++ b/.github/workflows/test-cloud-k3d-self.yml @@ -26,9 +26,12 @@ on: required: false default: '1.30' outputs: - test-result: - description: "e2e test result" - value: "${{ jobs.cloud-test-k3d.outputs.test-result }}" + installer-result: + description: "kb cloud installer result" + value: "${{ jobs.cloud-test-k3d.outputs.installer-result }}" + deployer-result: + description: "kb cloud env deployer result" + value: "${{ jobs.cloud-test-k3d.outputs.deployer-result }}" run-name: Test Cloud Version:${{ inputs.cloud-version }} K3s Version:${{ inputs.k3s-version }} @@ -55,9 +58,8 @@ jobs: needs: [ enable-runner ] runs-on: [ self-hosted, k3s-runner ] outputs: - deploy-result: ${{ steps.deploy_cloud.outputs.deploy-result }} - test-result: ${{ steps.test_result.outputs.test-result }} - test-type: ${{ steps.test_result.outputs.test-type }} + installer-result: ${{ steps.install_kb_cloud.outputs.installer-result }} + deployer-result: ${{ steps.deploy_kb_cloud_env.outputs.deployer-result }} runner-name: ${{ steps.get_runner_name.outputs.runner-name }} steps: - name: Checkout apecloud-cd Code @@ -85,54 +87,60 @@ jobs: run: | helm repo add jetstack https://charts.jetstack.io --force-update helm install \ - cert-manager jetstack/cert-manager \ - --namespace cert-manager \ - --create-namespace \ - --version v1.16.0 \ - --set crds.enabled=true + cert-manager jetstack/cert-manager \ + --namespace cert-manager \ + --create-namespace \ + --version v1.16.0 \ + --set crds.enabled=true - name: install kb cloud run: | helm repo add kb-chart https://apecloud.github.io/helm-charts helm install installer kb-chart/kb-cloud-installer \ - --namespace kb-cloud \ - --create-namespace \ - --version ${{ inputs.cloud-version }} \ - --set image.registry="docker.io" \ - --set version=${{ inputs.cloud-version }} \ - --set kubernetesProvider=k3d \ - --set fqdn.domain=mytest.kubeblocks.com \ - --set tls.enabled=true + --namespace kb-cloud \ + --create-namespace \ + --version ${{ inputs.cloud-version }} \ + --set image.registry="docker.io" \ + --set version=${{ inputs.cloud-version }} \ + --set kubernetesProvider=k3d \ + --set fqdn.domain=mytest.kubeblocks.com \ + --set tls.enabled=true - name: check kb-cloud-installer pod Completed + id: install_kb_cloud run: | sleep 10 check_status=0 for i in {1..200}; do - if kubectl get pods -n kb-cloud | grep "kb-cloud-installer" | grep Completed ; then - echo "KB Cloud is ready" - check_status=1 - break - fi - echo "Waiting for KB Cloud to be ready..." - kubectl get pods -n kb-cloud - echo "" - sleep 5 + if kubectl get pods -n kb-cloud | grep "kb-cloud-installer" | grep Completed ; then + echo "KB Cloud is ready" + check_status=1 + break + fi + echo "Waiting for KB Cloud to be ready..." + kubectl get pods -n kb-cloud + echo "" + sleep 5 done + installer_result="[PASSED]" if [[ $check_status -eq 0 ]]; then - echo "KB Cloud is not ready" + echo "KB Cloud is not ready" + installer_result="[FAILED]" + echo installer-result="${installer_result}" >> $GITHUB_OUTPUT - installer_pods=$(kubectl get pods -n kb-cloud | grep "kb-cloud-installer" ) - echo "installer pod: $installer_pods" - installer_pod_names="$(echo "${installer_pods}" | awk '{print $1}')" - for installer_pod_name in $(echo "${installer_pod_names}"); do - echo "==================== pod ${installer_pod_name} logs ====================" - kubectl logs -n kb-cloud ${installer_pod_name} - done + installer_pods=$(kubectl get pods -n kb-cloud | grep "kb-cloud-installer" ) + echo "installer pod: $installer_pods" + installer_pod_names="$(echo "${installer_pods}" | awk '{print $1}')" + for installer_pod_name in $(echo "${installer_pod_names}"); do + echo "==================== pod ${installer_pod_name} logs ====================" + kubectl logs -n kb-cloud ${installer_pod_name} + done - exit 1 + exit 1 + else + echo installer-result="${installer_result}" >> $GITHUB_OUTPUT fi - name: deploy KB Cloud Env @@ -157,41 +165,71 @@ jobs: helm install deployer kb-chart/kb-cloud-deployer \ --namespace kb-system \ --create-namespace \ - --version 0.0.1 \ + --version ${{ inputs.cloud-version }} \ --set image.registry="docker.io" \ --set license="${CLOUD_LICENSE}" \ --set kubeconfig="${K8S_KUBECONFIG}" - name: check kb-cloud-deployer pod Completed + id: deploy_kb_cloud_env run: | sleep 10 check_status=0 for i in {1..200}; do - if kubectl get pods -n kb-system | grep "kb-cloud-deployer" | grep Completed ; then - echo "KB Cloud Env is ready" - check_status=1 - break - fi - echo "Waiting for KB Cloud Env to be ready..." - kubectl get pods -n kb-system - echo "" - sleep 5 + if kubectl get pods -n kb-system | grep "kb-cloud-deployer" | grep Completed ; then + echo "KB Cloud Env is ready" + check_status=1 + break + fi + echo "Waiting for KB Cloud Env to be ready..." + kubectl get pods -n kb-system + echo "" + sleep 5 done + deployer_result="[PASSED]" if [[ $check_status -eq 0 ]]; then echo "KB Cloud Env is not ready" + deployer_result="[FAILED]" + echo deployer-result="${deployer_result}" >> $GITHUB_OUTPUT deployer_pods=$(kubectl get pods -n kb-system | grep "kb-cloud-deployer" ) echo "deployer pod: $deployer_pods" deployer_pod_names="$(echo "${deployer_pods}" | awk '{print $1}')" for deployer_pod_name in $(echo "${deployer_pod_names}"); do - echo "==================== pod ${deployer_pod_name} logs ====================" - kubectl logs -n kb-system ${deployer_pod_name} + echo "==================== pod ${deployer_pod_name} logs ====================" + kubectl logs -n kb-system ${deployer_pod_name} done exit 1 + else + echo deployer-result="${deployer_result}" >> $GITHUB_OUTPUT fi + - name: send test result message + if: ${{ always() }} + run: | + INSTALLER_RESULT="${{ steps.install_kb_cloud.outputs.installer-result }}" + DEPLOYER_RESULT="${{ steps.deploy_kb_cloud_env.outputs.deployer-result }}" + TEST_RESULT="cloud-test-k3d|Installer|${INSTALLER_RESULT}" + TEST_RESULT="${TEST_RESULT}##cloud-test-k3d|Deployer|${DEPLOYER_RESULT}" + echo "${TEST_RESULT}" + + TEST_RESULT=$( bash ${{ github.workspace }}/apecloud-cd/.github/utils/utils.sh --type 38 \ + --github-repo "${{ github.repository }}" \ + --github-token "${{ env.GITHUB_TOKEN }}" \ + --test-result "${TEST_RESULT}" \ + --run-id "$GITHUB_RUN_ID" ) + echo $TEST_RESULT + + date_ret=$(date +%Y-%m-%d-%T) + TEST_TITLE="[${{ env.CLOUD_BRANCH }}] Cloud E2E Installer&Deployer on Env:K3s [${date_ret}]" + + python3 ${{ github.workspace }}/apecloud-cd/.github/utils/send_mesage.py \ + --url "${{ vars.TEST_BOT_WEBHOOK }}" \ + --title "$TEST_TITLE" \ + --result "$TEST_RESULT" + - name: get runner name id: get_runner_name if: ${{ always() }} diff --git a/.github/workflows/test-cloud-k3d.yml b/.github/workflows/test-cloud-k3d.yml index ca64ecda..7498452b 100644 --- a/.github/workflows/test-cloud-k3d.yml +++ b/.github/workflows/test-cloud-k3d.yml @@ -26,9 +26,12 @@ on: required: false default: '1.30' outputs: - test-result: - description: "e2e test result" - value: "${{ jobs.cloud-test-k3d.outputs.test-result }}" + installer-result: + description: "kb cloud installer result" + value: "${{ jobs.cloud-test-k3d.outputs.installer-result }}" + deployer-result: + description: "kb cloud env deployer result" + value: "${{ jobs.cloud-test-k3d.outputs.deployer-result }}" run-name: Test Cloud Version:${{ inputs.cloud-version }} K3s Version:${{ inputs.k3s-version }} @@ -45,9 +48,8 @@ jobs: cloud-test-k3d: runs-on: ubuntu-latest outputs: - deploy-result: ${{ steps.deploy_cloud.outputs.deploy-result }} - test-result: ${{ steps.test_result.outputs.test-result }} - test-type: ${{ steps.test_result.outputs.test-type }} + installer-result: ${{ steps.install_kb_cloud.outputs.installer-result }} + deployer-result: ${{ steps.deploy_kb_cloud_env.outputs.deployer-result }} steps: - name: Checkout apecloud-cd Code uses: actions/checkout@v4 @@ -89,54 +91,60 @@ jobs: run: | helm repo add jetstack https://charts.jetstack.io --force-update helm install \ - cert-manager jetstack/cert-manager \ - --namespace cert-manager \ - --create-namespace \ - --version v1.16.0 \ - --set crds.enabled=true + cert-manager jetstack/cert-manager \ + --namespace cert-manager \ + --create-namespace \ + --version v1.16.0 \ + --set crds.enabled=true - name: install kb cloud run: | helm repo add kb-chart https://apecloud.github.io/helm-charts helm install installer kb-chart/kb-cloud-installer \ - --namespace kb-cloud \ - --create-namespace \ - --version ${{ inputs.cloud-version }} \ - --set image.registry="docker.io" \ - --set version=${{ inputs.cloud-version }} \ - --set kubernetesProvider=k3d \ - --set fqdn.domain=mytest.kubeblocks.com \ - --set tls.enabled=true + --namespace kb-cloud \ + --create-namespace \ + --version ${{ inputs.cloud-version }} \ + --set image.registry="docker.io" \ + --set version=${{ inputs.cloud-version }} \ + --set kubernetesProvider=k3d \ + --set fqdn.domain=mytest.kubeblocks.com \ + --set tls.enabled=true - name: check kb-cloud-installer pod Completed + id: install_kb_cloud run: | sleep 10 check_status=0 for i in {1..200}; do - if kubectl get pods -n kb-cloud | grep "kb-cloud-installer" | grep Completed ; then - echo "KB Cloud is ready" - check_status=1 - break - fi - echo "Waiting for KB Cloud to be ready..." - kubectl get pods -n kb-cloud - echo "" - sleep 5 + if kubectl get pods -n kb-cloud | grep "kb-cloud-installer" | grep Completed ; then + echo "KB Cloud is ready" + check_status=1 + break + fi + echo "Waiting for KB Cloud to be ready..." + kubectl get pods -n kb-cloud + echo "" + sleep 5 done + installer_result="[PASSED]" if [[ $check_status -eq 0 ]]; then - echo "KB Cloud is not ready" - - installer_pods=$(kubectl get pods -n kb-cloud | grep "kb-cloud-installer" ) - echo "installer pod: $installer_pods" - installer_pod_names="$(echo "${installer_pods}" | awk '{print $1}')" - for installer_pod_name in $(echo "${installer_pod_names}"); do - echo "==================== pod ${installer_pod_name} logs ====================" - kubectl logs -n kb-cloud ${installer_pod_name} - done - - exit 1 + echo "KB Cloud is not ready" + installer_result="[FAILED]" + echo installer-result="${installer_result}" >> $GITHUB_OUTPUT + + installer_pods=$(kubectl get pods -n kb-cloud | grep "kb-cloud-installer" ) + echo "installer pod: $installer_pods" + installer_pod_names="$(echo "${installer_pods}" | awk '{print $1}')" + for installer_pod_name in $(echo "${installer_pod_names}"); do + echo "==================== pod ${installer_pod_name} logs ====================" + kubectl logs -n kb-cloud ${installer_pod_name} + done + + exit 1 + else + echo installer-result="${installer_result}" >> $GITHUB_OUTPUT fi - name: deploy KB Cloud Env @@ -161,38 +169,68 @@ jobs: helm install deployer kb-chart/kb-cloud-deployer \ --namespace kb-system \ --create-namespace \ - --version 0.0.1 \ + --version ${{ inputs.cloud-version }} \ --set image.registry="docker.io" \ --set license="${CLOUD_LICENSE}" \ --set kubeconfig="${K8S_KUBECONFIG}" - name: check kb-cloud-deployer pod Completed + id: deploy_kb_cloud_env run: | sleep 10 check_status=0 for i in {1..200}; do - if kubectl get pods -n kb-system | grep "kb-cloud-deployer" | grep Completed ; then - echo "KB Cloud Env is ready" - check_status=1 - break - fi - echo "Waiting for KB Cloud Env to be ready..." - kubectl get pods -n kb-system - echo "" - sleep 5 + if kubectl get pods -n kb-system | grep "kb-cloud-deployer" | grep Completed ; then + echo "KB Cloud Env is ready" + check_status=1 + break + fi + echo "Waiting for KB Cloud Env to be ready..." + kubectl get pods -n kb-system + echo "" + sleep 5 done + deployer_result="[PASSED]" if [[ $check_status -eq 0 ]]; then echo "KB Cloud Env is not ready" - + deployer_result="[FAILED]" + echo deployer-result="${deployer_result}" >> $GITHUB_OUTPUT + deployer_pods=$(kubectl get pods -n kb-system | grep "kb-cloud-deployer" ) echo "deployer pod: $deployer_pods" deployer_pod_names="$(echo "${deployer_pods}" | awk '{print $1}')" for deployer_pod_name in $(echo "${deployer_pod_names}"); do - echo "==================== pod ${deployer_pod_name} logs ====================" - kubectl logs -n kb-system ${deployer_pod_name} + echo "==================== pod ${deployer_pod_name} logs ====================" + kubectl logs -n kb-system ${deployer_pod_name} done exit 1 + else + echo deployer-result="${deployer_result}" >> $GITHUB_OUTPUT fi + + - name: send test result message + if: ${{ always() }} + run: | + INSTALLER_RESULT="${{ steps.install_kb_cloud.outputs.installer-result }}" + DEPLOYER_RESULT="${{ steps.deploy_kb_cloud_env.outputs.deployer-result }}" + TEST_RESULT="cloud-test-k3d|Installer|${INSTALLER_RESULT}" + TEST_RESULT="${TEST_RESULT}##cloud-test-k3d|Deployer|${DEPLOYER_RESULT}" + echo "${TEST_RESULT}" + + TEST_RESULT=$( bash ${{ github.workspace }}/apecloud-cd/.github/utils/utils.sh --type 38 \ + --github-repo "${{ github.repository }}" \ + --github-token "${{ env.GITHUB_TOKEN }}" \ + --test-result "${TEST_RESULT}" \ + --run-id "$GITHUB_RUN_ID" ) + echo $TEST_RESULT + + date_ret=$(date +%Y-%m-%d-%T) + TEST_TITLE="[${{ env.CLOUD_BRANCH }}] Cloud E2E Installer&Deployer on Env:K3s [${date_ret}]" + + python3 ${{ github.workspace }}/apecloud-cd/.github/utils/send_mesage.py \ + --url "${{ vars.TEST_BOT_WEBHOOK }}" \ + --title "$TEST_TITLE" \ + --result "$TEST_RESULT"