Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

60 řádky
1.4 KiB

  1. #!/bin/bash
  2. # 用法: ./update-image.sh [目录1] [目录2] ... <new-tag>
  3. # 示例: ./update-image.sh /opt/ov /opt/cn 202604071354-feat-region-sync-glm
  4. #
  5. # 脚本会修改指定目录下 docker-compose.yml 中 new-api 服务的 image tag。
  6. # 如果不传目录参数,默认修改当前目录。
  7. set -e
  8. if [ $# -lt 1 ]; then
  9. echo "错误: 请提供新的 tag"
  10. echo "用法: $0 [目录1] [目录2] ... <new-tag>"
  11. echo "示例: $0 /opt/ov /opt/cn 202604071354-feat-region-sync-glm"
  12. exit 1
  13. fi
  14. TAG="${@: -1}"
  15. if [ $# -gt 1 ]; then
  16. DIRS=("${@:1:$#-1}")
  17. else
  18. DIRS=(".")
  19. fi
  20. update_file() {
  21. local FILE="$1"
  22. local TAG="$2"
  23. if [ ! -f "$FILE" ]; then
  24. echo "跳过: $FILE 不存在"
  25. return
  26. fi
  27. OLD_IMAGE=$(grep -E '^\s+image:.*new-api' "$FILE" | head -1 | sed 's/.*image: *//')
  28. OLD_TAG="${OLD_IMAGE##*:}"
  29. REPO="${OLD_IMAGE%:*}"
  30. if [ -z "$OLD_TAG" ] || [ -z "$REPO" ]; then
  31. echo "错误: 无法从 $FILE 中解析 new-api 的 image 配置"
  32. return 1
  33. fi
  34. NEW_IMAGE="${REPO}:${TAG}"
  35. if [[ "$OSTYPE" == "darwin"* ]]; then
  36. perl -i -pe "s|(\s+image:) *${OLD_IMAGE}|\$1 ${NEW_IMAGE}|" "$FILE"
  37. else
  38. sed -i "s|${OLD_IMAGE}|${NEW_IMAGE}|" "$FILE"
  39. fi
  40. echo "已更新 $FILE:"
  41. echo " 旧: ${OLD_IMAGE}"
  42. echo " 新: ${NEW_IMAGE}"
  43. }
  44. for DIR in "${DIRS[@]}"; do
  45. FILE="${DIR%/}/docker-compose.yml"
  46. update_file "$FILE" "$TAG"
  47. done