Skip to content

Test Cloud Version:0.29.0-alpha.120 K3s Version:1.30 #8

Test Cloud Version:0.29.0-alpha.120 K3s Version:1.30

Test Cloud Version:0.29.0-alpha.120 K3s Version:1.30 #8

name: Test Cloud On K3D Self Runner
on:
workflow_dispatch:
inputs:
cloud-version:
description: 'kb-cloud version (e.g. 0.29.0-alpha.110)'
type: string
required: false
default: '0.29.0-alpha.110'
k3s-version:
description: 'k3s cluster version (e.g. 1.30)'
type: string
required: false
default: '1.30'
workflow_call:
inputs:
cloud-version:
description: 'kb-cloud version (e.g. 0.29.0-alpha.110)'
type: string
required: false
default: '0.29.0-alpha.110'
k3s-version:
description: 'k3s cluster version (e.g. 1.30)'
type: string
required: false
default: '1.30'
outputs:
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 }}
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
K3D_NAME: kbcloud
CLOUD_LICENSE: ${{ secrets.CLOUD_LICENSE }}
permissions:
id-token: write
contents: read
jobs:
enable-runner:
uses: ./.github/workflows/enable-self-runner.yml
with:
CLOUD_PROVIDER: "eks"
GITHUB_REPO: "${{ github.repository }}"
RUNNER_NAMESPACE: "default"
RUNNER_LABEL: "k3s-runner"
secrets: inherit
cloud-test-k3d:
needs: [ enable-runner ]
runs-on: [ self-hosted, k3s-runner ]
outputs:
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
uses: actions/checkout@v4
with:
repository: apecloud/apecloud-cd
path: apecloud-cd
- name: setup k3d k3s
uses: nolar/setup-k3d-k3s@v1
with:
k3d-name: "${{ env.K3D_NAME }}"
version: "v${{ inputs.k3s-version }}"
github-token: ${{ env.GITHUB_TOKEN }}
k3d-args: -p 443:443@loadbalancer -p 80:80@loadbalancer --agents 2
- name: update k3d coredns cm
run: |
for i in {1..3}; do
bash ${{ github.workspace }}/apecloud-cd/.github/utils/utils.sh --type 37
sleep 1
done
- name: install cert-manager
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
- 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
- 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
done
installer_result="[PASSED]"
if [[ $check_status -eq 0 ]]; then
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
run: |
echo "get k8s config"
k8s_cluster_name=$(kubectl config get-clusters | sed '1d')
kubectl config set-cluster ${k8s_cluster_name} --insecure-skip-tls-verify=true
k8s_kubeconfig_yaml=$(kubectl config view --minify -o yaml --raw)
kubeconfig_file_name="k8s_kubeconfig_file.yaml"
touch ${kubeconfig_file_name}
echo "${k8s_kubeconfig_yaml}" > ${kubeconfig_file_name}
yq e -i '.clusters[0].cluster.server = "https://kubernetes.default:443"' ${kubeconfig_file_name}
k8s_kubeconfig=$(cat ${kubeconfig_file_name})
echo "------------------------------------------------------------"
echo "${k8s_kubeconfig}"
echo "------------------------------------------------------------"
K8S_KUBECONFIG="$(echo "${k8s_kubeconfig}" | base64)"
CLOUD_LICENSE="${{ env.CLOUD_LICENSE }}"
echo "deploy KB Cloud Env"
helm install deployer kb-chart/kb-cloud-deployer \
--namespace kb-system \
--create-namespace \
--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
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}
done
exit 1
else
echo deployer-result="${deployer_result}" >> $GITHUB_OUTPUT
fi
- name: get runner name
id: get_runner_name
if: ${{ always() }}
run: |
echo runner-name=${RUNNER_NAME} >> $GITHUB_OUTPUT
send-message:
needs: [ cloud-test-k3d ]
runs-on: ubuntu-latest
if: ${{ always() }}
steps:
- name: Checkout apecloud-cd Code
uses: actions/checkout@v4
with:
repository: apecloud/apecloud-cd
path: ./
- name: send test result message
run: |
INSTALLER_RESULT="${{ needs.install_kb_cloud.outputs.installer-result }}"
DEPLOYER_RESULT="${{ needs.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 }}/.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="[${{ inputs.cloud-version }}] Cloud E2E Installer&Deployer on Env:K3s [${date_ret}]"
python3 ${{ github.workspace }}/.github/utils/send_mesage.py \
--url "${{ vars.TEST_BOT_WEBHOOK }}" \
--title "$TEST_TITLE" \
--result "$TEST_RESULT"
remove-runner:
needs: [ cloud-test-k3d ]
runs-on: ubuntu-latest
if: ${{ always() }}
steps:
- name: Checkout apecloud-cd Code
uses: actions/checkout@v4
with:
repository: apecloud/apecloud-cd
path: ./
- name: remove runner
run: |
bash .github/utils/utils.sh --type 25 \
--github-token "${{ env.GITHUB_TOKEN }}" \
--github-repo "${{ github.repository }}" \
--runner-name ${{ needs.cloud-test-k3d.outputs.runner-name }}
- uses: azure/setup-kubectl@v3
with:
version: "v1.28.3"
- uses: aws-actions/setup-sam@v2
if: ${{ inputs.cloud-provider == 'eks' }}
with:
use-installer: true
- uses: aws-actions/configure-aws-credentials@v4
if: ${{ inputs.cloud-provider == 'eks' && env.AWS_ACCESS_KEY_ID != '' && env.AWS_SECRET_ACCESS_KEY != '' }}
with:
aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }}
aws-region: "${{ env.AWS_REGION }}"
- if: ${{ inputs.cloud-provider == 'eks' }}
run: |
aws eks --region ${{ env.AWS_REGION }} update-kubeconfig --name ${{ env.AWS_CLUSTER }} \
--role-arn $(aws iam get-role --role-name ${{ env.AWS_CLUSTER }}-admin-role --query 'Role.Arn' --output text)
- if: ${{ inputs.cloud-provider == 'gke' && env.GOOGLE_CREDENTIALS != '' }}
id: 'auth'
name: 'Authenticate to Google Cloud'
uses: 'google-github-actions/auth@v1'
with:
credentials_json: '${{ env.GOOGLE_CREDENTIALS }}'
- name: setup gke-gcloud-auth-plugin
if: ${{ inputs.cloud-provider == 'gke' }}
uses: simenandre/setup-gke-gcloud-auth-plugin@v1
- uses: google-github-actions/get-gke-credentials@v1
if: ${{ inputs.cloud-provider == 'gke' }}
with:
cluster_name: ${{ env.CLUSTER_NAME }}
location: ${{ env.GCP_REGION }}
- name: delete runner pod
env:
RUNNER_NAME: ${{ needs.cloud-test-k3d.outputs.runner-name }}
run: |
runner_pod_exists=$(kubectl get pod | (grep "${{ env.RUNNER_NAME }}"||true))
if [[ -n "${runner_pod_exists}" ]]; then
kubectl delete pod "${{ env.RUNNER_NAME }}" --force
fi
disable-runner:
if: ${{ always() }}
needs: [ cloud-test-k3d ]
uses: ./.github/workflows/enable-self-runner.yml
with:
CLOUD_PROVIDER: "eks"
GITHUB_REPO: "${{ github.repository }}"
RUNNER_NAMESPACE: "default"
RUNNER_LABEL: "k3s-runner"
ENABLE: "disable"
secrets: inherit