This repository has been archived by the owner on Feb 18, 2024. It is now read-only.
lvjing2 pushed module-controller code #266
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |