| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- #!/bin/bash
- set -e
- MAIN_IMAGE_NAME=${PROJECT}
- # 定义 prepareDockerComposeFile:准备 docker-compose.yml 定义文件。
- prepareDockerComposeFile() {
- echo "[INFO] 准备 docker-compose.yml 文件 (prepareDockerComposeFile)..."
- sh -c "sed -i 's|image:\s*${MAIN_IMAGE_NAME}:|image: ${IMAGE_NAME}|g' docker-compose.yml"
- echo "✅ docker-compose.yml 文件准备完成"
- }
- # 定义 waitDockerComposeUp:启动后操作
- waitDockerComposeUp() {
- echo "[INFO] 检查并等待 docker compose 启动完成 (waitDockerComposeUp)..."
- echo "[INFO] 等待 60s 启动 (waitDockerComposeUp)..."
- sleep 60
- for i in {1..3};
- do
- echo "[INFO] 等待 30s 启动 (waitDockerComposeUp)..."
- sleep 30
- ALL_STARTED=1
- # 检查服务1 是否已启动
- DOCKER_SVC=$((docker compose -f docker-compose.yml ps ${PROJECT} --format '{{.Status}}' | grep -E '(up|Up)\s+[0-9]+' | tail -n 1) || echo '')
- if [ "${DOCKER_SVC}" = '' ]; then
- echo ${PROJECT}' 未启动!'
- ALL_STARTED=0
- else
- echo ${PROJECT}' 已启动!'
- fi
- if [ ${ALL_STARTED} -eq 1 ]; then
- echo '所有服务已启动!'
- exit 0
- fi
- done;
- echo "✅ docker compose 启动完成"
- }
- # 定义 triggerK8SUpdateImageVersion:触发 K8S 更新镜像版本
- triggerK8SUpdateImageVersion() {
- echo "[INFO] 触发 k8s kind 更新镜像版本 (triggerK8SUpdateImageVersion)..."
- echo "[INFO] 调用 K8S API 触发更新镜像版本 "${LOCAL_REGISTRY_FULL_NAME}
- # 设置快捷命令
- alias ls_di='docker image ls --format="{{.ID}} {{.Repository}}:{{.Tag}}" | grep ${LOCAL_REGISTRY_GROUP} | sort -V -r | head -n 3'
- CURRENT_IMAGE=$(ls_di | head -n 2 | head -n 1)
- echo "当前版本"$CURRENT_IMAGE
- CURRENT_IMAGE_ID=$(echo $CURRENT_IMAGE | awk -F' ' '{print $1}')
- LAST_IMAGE=$(ls_di | head -n 2 | tail -n 1)
- echo "前一个版本"$LAST_IMAGE
- LAST_IMAGE_ID=$(echo $LAST_IMAGE | awk -F' ' '{print $1}')
- #if [ "$condition1" = true ] && ([ "$condition2" = true ] || [ "$condition2" = false ]); then
- # echo "条件满足"
- #else
- # echo "条件不满足"
- #fi
- if [ ${FORCE_DEPLOY: false} = false ] && [ "${CURRENT_IMAGE}" != "${LAST_IMAGE}" ] && [ "${CURRENT_IMAGE_ID}" = "${LAST_IMAGE_ID}" ]; then
- echo "[INFO] 没有发现递送内容存在变化,跳过发版!${LAST_IMAGE_ID} -> ${CURRENT_IMAGE_ID}"
- echo $(ls_di)
- echo " "
- exit 0
- fi
- # 更新镜像版本的脚本
- K8S_ACCESS_KEY='7bpmjzpcbw8c.y72hy3m26d7y6aw6j45nx5m66tcnws33'
- K8S_API_BODY='{"kind":"deployments","namespace":"kube-public","name":"'${K8S_deployment_NAME}'","images":{"'${LOCAL_REGISTRY_NAME}'":"'${LOCAL_REGISTRY_FULL_NAME}'"}}'
- curl -v --fail -X PUT \
- -H "content-type: application/json" \
- -H "Cookie: KuboardUsername=admin; KuboardAccessKey=${K8S_ACCESS_KEY}" \
- -d ${K8S_API_BODY} \
- "http://k8s-ui.hz3r.cn/kuboard-api/cluster/hz3r-k8s-kind/kind/CICDApi/admin/resource/updateImageTag" \
- || (echo '调用 Kuboard CI/CD API 失败!request body = '${K8S_API_BODY} && exit 9)
- # curl -X PUT \
- # -H "content-type: application/json" \
- # -H "Cookie: KuboardUsername=admin; KuboardAccessKey=7bpmjzpcbw8c.y72hy3m26d7y6aw6j45nx5m66tcnws33" \
- # -d '{"kind":"deployments","namespace":"kube-public","name":"business-webapi","images":{"localhost:5001/business-webapi":"localhost:5001/business-webapi:yourNewVersion","localhost:5001/zjjhyiwuyq-webapi":"localhost:5001/zjjhyiwuyq-webapi:yourNewVersion"}}' \
- # "http://k8s-ui.hz3r.cn/kuboard-api/cluster/hz3r-k8s-kind/kind/CICDApi/admin/resource/updateImageTag"
- echo "[INFO] 触发更新镜像版本成功!\n"
- }
- # 主逻辑:根据传入参数决定调用哪个函数
- if [ "$#" -ne 1 ]; then
- echo "用法: $0 {prebuild|postup|k8s}"
- echo " prebuild 构建前准备"
- echo " postup docker compose up -d 后处理"
- echo " k8s 触发 k8s(kind|k3d) 更新镜像版本"
- exit 1
- fi
- case "$1" in
- prebuild)
- prepareDockerComposeFile
- ;;
- postup)
- waitDockerComposeUp
- ;;
- k8s)
- triggerK8SUpdateImageVersion
- ;;
- *)
- echo "错误: 无效参数 '$1'。请使用 'prebuild' 或 'postup'"
- echo "用法: $0 {prebuild|postup|k8s}"
- echo " prebuild 构建前准备"
- echo " postup docker compose up -d 后处理"
- echo " k8s 触发 k8s(kind|k3d) 更新镜像版本"
- exit 1
- ;;
- esac
|