.gitlab-ci-help.sh 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #!/bin/bash
  2. set -e
  3. MAIN_IMAGE_NAME=${PROJECT}
  4. # 定义 prepareDockerComposeFile:准备 docker-compose.yml 定义文件。
  5. prepareDockerComposeFile() {
  6. echo "[INFO] 准备 docker-compose.yml 文件 (prepareDockerComposeFile)..."
  7. sh -c "sed -i 's|image:\s*${MAIN_IMAGE_NAME}:|image: ${IMAGE_NAME}|g' docker-compose.yml"
  8. echo "✅ docker-compose.yml 文件准备完成"
  9. }
  10. # 定义 waitDockerComposeUp:启动后操作
  11. waitDockerComposeUp() {
  12. echo "[INFO] 检查并等待 docker compose 启动完成 (waitDockerComposeUp)..."
  13. echo "[INFO] 等待 60s 启动 (waitDockerComposeUp)..."
  14. sleep 60
  15. for i in {1..3};
  16. do
  17. echo "[INFO] 等待 30s 启动 (waitDockerComposeUp)..."
  18. sleep 30
  19. ALL_STARTED=1
  20. # 检查服务1 是否已启动
  21. DOCKER_SVC=$((docker compose -f docker-compose.yml ps ${PROJECT} --format '{{.Status}}' | grep -E '(up|Up)\s+[0-9]+' | tail -n 1) || echo '')
  22. if [ "${DOCKER_SVC}" = '' ]; then
  23. echo ${PROJECT}' 未启动!'
  24. ALL_STARTED=0
  25. else
  26. echo ${PROJECT}' 已启动!'
  27. fi
  28. if [ ${ALL_STARTED} -eq 1 ]; then
  29. echo '所有服务已启动!'
  30. exit 0
  31. fi
  32. done;
  33. echo "✅ docker compose 启动完成"
  34. }
  35. # 定义 triggerK8SUpdateImageVersion:触发 K8S 更新镜像版本
  36. triggerK8SUpdateImageVersion() {
  37. echo "[INFO] 触发 k8s kind 更新镜像版本 (triggerK8SUpdateImageVersion)..."
  38. echo "[INFO] 调用 K8S API 触发更新镜像版本 "${LOCAL_REGISTRY_FULL_NAME}
  39. # 设置快捷命令
  40. alias ls_di='docker image ls --format="{{.ID}} {{.Repository}}:{{.Tag}}" | grep ${LOCAL_REGISTRY_GROUP} | sort -V -r | head -n 3'
  41. CURRENT_IMAGE=$(ls_di | head -n 2 | head -n 1)
  42. echo "当前版本"$CURRENT_IMAGE
  43. CURRENT_IMAGE_ID=$(echo $CURRENT_IMAGE | awk -F' ' '{print $1}')
  44. LAST_IMAGE=$(ls_di | head -n 2 | tail -n 1)
  45. echo "前一个版本"$LAST_IMAGE
  46. LAST_IMAGE_ID=$(echo $LAST_IMAGE | awk -F' ' '{print $1}')
  47. #if [ "$condition1" = true ] && ([ "$condition2" = true ] || [ "$condition2" = false ]); then
  48. # echo "条件满足"
  49. #else
  50. # echo "条件不满足"
  51. #fi
  52. if [ ${FORCE_DEPLOY: false} = false ] && [ "${CURRENT_IMAGE}" != "${LAST_IMAGE}" ] && [ "${CURRENT_IMAGE_ID}" = "${LAST_IMAGE_ID}" ]; then
  53. echo "[INFO] 没有发现递送内容存在变化,跳过发版!${LAST_IMAGE_ID} -> ${CURRENT_IMAGE_ID}"
  54. echo $(ls_di)
  55. echo " "
  56. exit 0
  57. fi
  58. # 更新镜像版本的脚本
  59. K8S_ACCESS_KEY='7bpmjzpcbw8c.y72hy3m26d7y6aw6j45nx5m66tcnws33'
  60. K8S_API_BODY='{"kind":"deployments","namespace":"kube-public","name":"'${K8S_deployment_NAME}'","images":{"'${LOCAL_REGISTRY_NAME}'":"'${LOCAL_REGISTRY_FULL_NAME}'"}}'
  61. curl -v --fail -X PUT \
  62. -H "content-type: application/json" \
  63. -H "Cookie: KuboardUsername=admin; KuboardAccessKey=${K8S_ACCESS_KEY}" \
  64. -d ${K8S_API_BODY} \
  65. "http://k8s-ui.hz3r.cn/kuboard-api/cluster/hz3r-k8s-kind/kind/CICDApi/admin/resource/updateImageTag" \
  66. || (echo '调用 Kuboard CI/CD API 失败!request body = '${K8S_API_BODY} && exit 9)
  67. # curl -X PUT \
  68. # -H "content-type: application/json" \
  69. # -H "Cookie: KuboardUsername=admin; KuboardAccessKey=7bpmjzpcbw8c.y72hy3m26d7y6aw6j45nx5m66tcnws33" \
  70. # -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"}}' \
  71. # "http://k8s-ui.hz3r.cn/kuboard-api/cluster/hz3r-k8s-kind/kind/CICDApi/admin/resource/updateImageTag"
  72. echo "[INFO] 触发更新镜像版本成功!\n"
  73. }
  74. # 主逻辑:根据传入参数决定调用哪个函数
  75. if [ "$#" -ne 1 ]; then
  76. echo "用法: $0 {prebuild|postup|k8s}"
  77. echo " prebuild 构建前准备"
  78. echo " postup docker compose up -d 后处理"
  79. echo " k8s 触发 k8s(kind|k3d) 更新镜像版本"
  80. exit 1
  81. fi
  82. case "$1" in
  83. prebuild)
  84. prepareDockerComposeFile
  85. ;;
  86. postup)
  87. waitDockerComposeUp
  88. ;;
  89. k8s)
  90. triggerK8SUpdateImageVersion
  91. ;;
  92. *)
  93. echo "错误: 无效参数 '$1'。请使用 'prebuild' 或 'postup'"
  94. echo "用法: $0 {prebuild|postup|k8s}"
  95. echo " prebuild 构建前准备"
  96. echo " postup docker compose up -d 后处理"
  97. echo " k8s 触发 k8s(kind|k3d) 更新镜像版本"
  98. exit 1
  99. ;;
  100. esac