Skip to content
This repository has been archived by the owner on Feb 18, 2024. It is now read-only.

liu-657667 pushed module-controller code #253

liu-657667 pushed module-controller code

liu-657667 pushed module-controller code #253

name: Module Controller Integration Test
run-name: ${{ github.actor }} pushed module-controller code
on:
push:
branches:
- master
paths:
- 'module-controller/**'
pull_request:
branches:
- master
paths:
- 'module-controller/**'
# enable manually running the workflow
workflow_dispatch:
env:
CGO_ENABLED: 0
GOOS: linux
WORK_DIR: module-controller
TAG: ci-test-master-latest
DOCKERHUB_REGISTRY: serverless-registry.cn-shanghai.cr.aliyuncs.com
MODULE_CONTROLLER_IMAGE_PATH: opensource/test/module-controller
INTEGRATION_TESTS_IMAGE_PATH: opensource/test/module-controller-integration-tests
POD_NAMESPACE: default
defaults:
run:
working-directory: module-controller
jobs:
unit-test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Docker login
uses: docker/login-action@v2.2.0
with:
registry: ${{ env.DOCKERHUB_REGISTRY }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
logout: false
- name: Set up Docker buildx
uses: docker/setup-buildx-action@v2
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ hashFiles('${{ env.WORK_DIR }}/*Dockerfile') }}
- name: Build and push module-controller Docker images
uses: docker/build-push-action@v4.1.1
with:
context: ${{ env.WORK_DIR }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
file: ${{ env.WORK_DIR }}/Dockerfile
platforms: linux/amd64
push: true
tags: ${{ env.DOCKERHUB_REGISTRY }}/${{ env.MODULE_CONTROLLER_IMAGE_PATH }}:${{ env.TAG }}
- run: sleep 30
- name: Set up Minikube
run: |
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
- name: Start Minikube
run: minikube start
- name: Prepare development env
run: |
kubectl apply -f config/crd/bases/serverless.alipay.com_moduledeployments.yaml
kubectl apply -f config/crd/bases/serverless.alipay.com_modulereplicasets.yaml
kubectl apply -f config/crd/bases/serverless.alipay.com_modules.yaml
kubectl apply -f config/crd/bases/serverless.alipay.com_moduletemplates.yaml
kubectl apply -f config/rbac/role.yaml
kubectl apply -f config/rbac/role_binding.yaml
kubectl apply -f config/rbac/service_account.yaml
kubectl apply -f config/samples/ci/dynamic-stock-deployment.yaml
kubectl apply -f config/samples/ci/module-deployment-controller.yaml
kubectl apply -f config/samples/ci/dynamic-stock-service.yaml
- run: sleep 60
- name: minikube logs
run: minikube logs
- name: get pod
run: |
kubectl get pod
- name: describe pod
run: |
kubectl describe pod
- run: sleep 10
- name: log base pod
run: |
podname=$(kubectl get pod -l app=dynamic-stock -o name | cut -d/ -f2)
minikube logs $podname
- name: wait base pod available
run: |
kubectl wait --for=condition=available deployment/dynamic-stock-deployment --timeout=300s
- name: wait module controller pod available
run: |
kubectl wait --for=condition=available deployment/module-controller --timeout=300s
- name: Apply moduledeployment
run: |
kubectl apply -f config/samples/module-deployment_v1alpha1_moduledeployment_provider.yaml
- name: get moduledeployment
run: |
kubectl get moduledeployment
- name: get modulereplicaset
run: |
kubectl get modulereplicaset
- run: sleep 15
- name: get module
run: |
kubectl get module -oyaml
- name: exist module
run: |
moduleCount=$(kubectl get module | wc -l)
if [[ $moduleCount -lt 1 ]]; then
echo "ERROR: 不存在module"
exit 1
fi
- run: sleep 15
- name: get module controller logs
run: |
kubectl logs deployment/module-controller
- name: wait module available
run: |
# 定义要等待的资源名称和字段值
modulename=$(kubectl get module -o name)
desired_field_value="Available"
# 定义等待的超时时间(以秒为单位)
timeout_seconds=300
start_time=$(date +%s)
end_time=$((start_time + timeout_seconds))
while true; do
current_time=$(date +%s)
if [ $current_time -gt $end_time ]; then
echo "等待超时"
exit 1
fi
# 使用 kubectl get 命令获取资源对象的详细信息,并提取自定义字段的值
field_value=$(kubectl get $modulename -o custom-columns=STATUS:.status.status --no-headers)
if [ "$field_value" == "$desired_field_value" ]; then
echo "字段值已满足条件"
exit 0
else
echo "等待字段值满足条件..."
echo "期望状态是: $desired_field_value, 当前状态是: $field_value"
sleep 5 # 等待一段时间后再次检查
fi
done
- name: check module
run: |
podname=$(kubectl get pod -l app=dynamic-stock -o name)
kubectl exec -it $podname -- sh -c 'ls -al'
kubectl exec -it $podname -- sh -c 'ls -al ~/'
kubectl exec -it $podname -- sh -c 'ls -al ~/logs'
kubectl exec -it $podname -- sh -c 'ls -al ~/logs/sofa-ark'
kubectl exec -it $podname -- sh -c 'grep "Install Biz: provider:1.0.2 success" ~/logs/sofa-ark/*.log'
- name: scaledown module
run:
kubectl apply -f config/samples/ci/module-deployment_v1alpha1_moduledeployment_provider_scaledown.yaml
- run: sleep 15
- name: not exist module
run: |
moduleCount=$(kubectl get module | wc -l)
if [[ $moduleCount -gt 0 ]]; then
echo "ERROR: module依旧存在"
exit 1
fi
- name: Apply moduledeployment scaleup module
run: |
kubectl apply -f config/samples/module-deployment_v1alpha1_moduledeployment_provider.yaml
- name: get moduledeployment
run: |
kubectl get moduledeployment
- name: get modulereplicaset
run: |
kubectl get modulereplicaset
- run: sleep 15
- name: get module
run: |
kubectl get module -oyaml
- name: exist module
run: |
moduleCount=$(kubectl get module | wc -l)
if [[ $moduleCount -lt 1 ]]; then
echo "ERROR: 不存在module"
exit 1
fi
- name: scaleup then wait module available
run: |
# 定义要等待的资源名称和字段值
modulename=$(kubectl get module -o name)
desired_field_value="Available"
# 定义等待的超时时间(以秒为单位)
timeout_seconds=300
start_time=$(date +%s)
end_time=$((start_time + timeout_seconds))
while true; do
current_time=$(date +%s)
if [ $current_time -gt $end_time ]; then
echo "等待超时"
exit 1
fi
# 使用 kubectl get 命令获取资源对象的详细信息,并提取自定义字段的值
field_value=$(kubectl get $modulename -o custom-columns=STATUS:.status.status --no-headers)
if [ "$field_value" == "$desired_field_value" ]; then
echo "字段值已满足条件"
exit 0
else
echo "等待字段值满足条件..."
sleep 5 # 等待一段时间后再次检查
fi
done
- name: scaleup then check module
run: |
podname=$(kubectl get pod -l app=dynamic-stock -o name)
kubectl exec -it $podname -- sh -c 'ls -al'
kubectl exec -it $podname -- sh -c 'ls -al ~/'
kubectl exec -it $podname -- sh -c 'ls -al ~/logs'
kubectl exec -it $podname -- sh -c 'ls -al ~/logs/sofa-ark'
kubectl exec -it $podname -- sh -c 'grep "Install Biz: provider:1.0.2 success" ~/logs/sofa-ark/*.log'
- name: delete module
run: |
moduleName=$(kubectl get module -o name | cut -d/ -f2)
kubectl delete -n default module $moduleName
- run: sleep 10
- name: delete module then check module is existed
run: |
moduleCount=$(kubectl get module | wc -l)
if [[ $moduleCount -lt 1 ]]; then
echo "ERROR: 不存在module"
exit 1
fi
- name: delete then wait module available
run: |
# 定义要等待的资源名称和字段值
modulename=$(kubectl get module -o name)
desired_field_value="Available"
# 定义等待的超时时间(以秒为单位)
timeout_seconds=300
start_time=$(date +%s)
end_time=$((start_time + timeout_seconds))
while true; do
current_time=$(date +%s)
if [ $current_time -gt $end_time ]; then
echo "等待超时"
exit 1
fi
# 使用 kubectl get 命令获取资源对象的详细信息,并提取自定义字段的值
field_value=$(kubectl get $modulename -o custom-columns=STATUS:.status.status --no-headers)
if [ "$field_value" == "$desired_field_value" ]; then
echo "字段值已满足条件"
exit 0
else
echo "等待字段值满足条件..."
sleep 5 # 等待一段时间后再次检查
fi
done
- name: delete module then check module
run: |
podname=$(kubectl get pod -l app=dynamic-stock -o name)
kubectl exec -it $podname -- sh -c 'ls -al'
kubectl exec -it $podname -- sh -c 'ls -al ~/'
kubectl exec -it $podname -- sh -c 'ls -al ~/logs'
kubectl exec -it $podname -- sh -c 'ls -al ~/logs/sofa-ark'
kubectl exec -it $podname -- sh -c 'grep "Install Biz: provider:1.0.2 success" ~/logs/sofa-ark/*.log'
- name: delete pod
run: |
podname=$(kubectl get pod -l app=dynamic-stock -o name | cut -d/ -f2)
kubectl delete -n default pod $podname
- run: sleep 15
- name: get pod
run: |
kubectl get pod
- name: describe pod
run: |
kubectl describe pod
- name: wait base pod available
run: |
kubectl wait --for=condition=available deployment/dynamic-stock-deployment --timeout=300s
- run: sleep 15
- name: delete pod then wait module available
run: |
# 定义要等待的资源名称和字段值
modulename=$(kubectl get module -o name)
desired_field_value="Available"
# 定义等待的超时时间(以秒为单位)
timeout_seconds=300
start_time=$(date +%s)
end_time=$((start_time + timeout_seconds))
while true; do
current_time=$(date +%s)
if [ $current_time -gt $end_time ]; then
echo "等待超时"
exit 1
fi
# 使用 kubectl get 命令获取资源对象的详细信息,并提取自定义字段的值
field_value=$(kubectl get $modulename -o custom-columns=STATUS:.status.status --no-headers)
if [ "$field_value" == "$desired_field_value" ]; then
echo "字段值已满足条件"
exit 0
else
echo "等待字段值满足条件..."
sleep 5 # 等待一段时间后再次检查
fi
done
- run: sleep 15
- name: delete pod then check module
run: |
podname=$(kubectl get pod -l app=dynamic-stock -o name)
max_attempts=10
timeout=300
interval=30
for ((i=0; i<$max_attempts; i++)); do
# 执行您的日志检索命令
log_entry=$(kubectl exec -it $podname -- sh -c 'grep "Install Biz: provider:1.0.2 success" ~/logs/sofa-ark/*.log || true' 2>/dev/null)
# 如果找到了日志条目,则退出循环
if [ -n "$log_entry" ]; then
echo "找到日志条目。"
break
fi
# 如果这不是最后一次尝试,则等待一段时间后继续
if [ $i -lt $((max_attempts-1)) ]; then
echo "未找到日志条目。等待 $interval 秒后进行下一次尝试。"
sleep $interval
else
# 如果是最后一次尝试,则输出超时消息
echo "已达到最大尝试次数。未找到日志条目。"
fi
done
- name: scaledown module then delete deployment
run:
kubectl apply -f config/samples/ci/module-deployment_v1alpha1_moduledeployment_provider_scaledown.yaml
- name: wait module delete
run: |
timeout_seconds=300
start_time=$(date +%s)
end_time=$((start_time + timeout_seconds))
while true; do
moduleCount=$(kubectl get module | wc -l)
current_time=$(date +%s)
if [ $current_time -gt $end_time ]; then
echo "等待超时"
exit 1
fi
if [[ $moduleCount -lt 1 ]]; then
echo "module已缩容"
exit 0
else
echo "等待module删除"
sleep 5
fi
done
- name: delete deployment
run: |
kubectl delete -n default deployment dynamic-stock-deployment
- run: sleep 10
- name: log module-controller
run: |
podname=$(kubectl get po -l app=module-controller -o name)
kubectl logs $podname
- name: delete deployment then wait source clean
run: |
timeout_seconds=300
start_time=$(date +%s)
end_time=$((start_time + timeout_seconds))
while true; do
current_time=$(date +%s)
if [ $current_time -gt $end_time ]; then
echo "等待超时"
exit 1
fi
moduleCount=$(kubectl get -n default module | wc -l)
moduleReplicaSetCount=$(kubectl get -n default moduleReplicaSet | wc -l)
moduleDeploymentCount=$(kubectl get -n default moduleDeployment | wc -l)
deploymentCount=$(kubectl get -n default deployment dynamic-stock-deployment | wc -l)
echo deploymentCount is $deploymentCount
echo moduleDeploymentCount is $moduleDeploymentCount
echo moduleReplicaSetCount is $moduleReplicaSetCount
echo moduleCount is $moduleCount
if [[ $deploymentCount -lt 1 && $moduleCount -lt 1 && $moduleReplicaSetCount -lt 1 && $moduleDeploymentCount -lt 1 ]]; then
echo "所有资源已删除"
exit 0
else
if [[ $moduleCount -ge 1 ]]; then
echo "等待module删除..."
fi
if [[ $moduleReplicaSetCount -ge 1 ]]; then
echo "等待moduleReplicaSet删除..."
fi
if [[ $moduleDeploymentCount -ge 1 ]]; then
echo "等待moduleDeployment删除..."
fi
if [[ $deploymentCount -ge 1 ]]; then
echo "等待deployment删除..."
fi
sleep 5
fi
done