build.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #!/bin/bash
  2. set -e
  3. project_dir=$(pwd)
  4. version='1.0.1'
  5. env='dev'
  6. image_name='ai-flow-py'
  7. registry='registry.cn-shenzhen.aliyuncs.com/bantbox'
  8. REMOTE_DEV="root@192.168.0.155"
  9. REMOTE_TEST="root@34.146.228.227"
  10. REMOTE_PRO="root@34.146.222.45"
  11. usage() {
  12. echo -e "\n"
  13. echo -e "Usage: \n\t$0 [-e env] [-v version] [-h]\n"
  14. echo -e "[-h]: Show usage\n"
  15. echo -e "[-e] Env: Build env. (dev/test/pro)"
  16. echo -e "[-v] Version: Version of build.\n"
  17. }
  18. login() {
  19. echo "[+] Logging in to Docker registry..."
  20. docker login --username=arche@1030463161912241 --password=bantbox@2021 registry.cn-shenzhen.aliyuncs.com
  21. }
  22. build() {
  23. local full_tag="${registry}/${image_name}:${version}-${env}"
  24. echo "[+] ================================"
  25. echo "[+] Start building..."
  26. echo "[+] Image: ${image_name}"
  27. echo "[+] Version: ${version}"
  28. echo "[+] Env: ${env}"
  29. echo "[+] Tag: ${full_tag}"
  30. echo "[+] ================================"
  31. echo "[+] Building Docker image..."
  32. docker build -t "${image_name}:${version}" .
  33. echo "[+] Tagging image..."
  34. docker tag "${image_name}:${version}" "${full_tag}"
  35. echo "[+] Pushing image to registry..."
  36. docker push "${full_tag}"
  37. echo "[+] Build & push finished"
  38. echo "[+] ================================"
  39. restart_app
  40. }
  41. restart_app() {
  42. echo "[+] Restart ${image_name}"
  43. echo "[+] --------------------------------"
  44. local remote=''
  45. local cmd=''
  46. local full_tag="${registry}/${image_name}:${version}-${env}"
  47. local redis_host=''
  48. local redis_password='redis@aitori!@#'
  49. local redis_port='6379'
  50. local redis_db='1'
  51. case $env in
  52. dev)
  53. remote=$REMOTE_DEV
  54. redis_host='10.146.0.2'
  55. ;;
  56. test)
  57. remote=$REMOTE_TEST
  58. redis_host='10.146.0.2'
  59. ;;
  60. pro)
  61. remote=$REMOTE_PRO
  62. redis_host='10.146.0.3'
  63. ;;
  64. esac
  65. cmd="docker run -d \
  66. --name ${image_name} \
  67. --restart always \
  68. -p 8080:8080 \
  69. -m 2g \
  70. -e AI_FLOW_REDIS_HOST=${redis_host} \
  71. -e AI_FLOW_REDIS_PORT=${redis_port} \
  72. -e AI_FLOW_REDIS_PASSWORD=${redis_password} \
  73. -e AI_FLOW_REDIS_DB=${redis_db} \
  74. -e AI_FLOW_STORE_BACKEND=redis \
  75. -v /data/ai-flow/data:/app/data \
  76. -v /data/ai-flow/resources:/app/resources \
  77. --volume /etc/localtime:/etc/localtime \
  78. ${full_tag}"
  79. ssh "$remote" << EEOOFF
  80. docker rm -f ${image_name} 2>/dev/null || true
  81. docker pull ${full_tag}
  82. ${cmd}
  83. exit
  84. EEOOFF
  85. echo "[+] Restart ${image_name} finished"
  86. echo "[+] --------------------------------"
  87. }
  88. while getopts "e:v:h" arg; do
  89. case $arg in
  90. e)
  91. env=$OPTARG
  92. echo "[+] Build env: $env"
  93. ;;
  94. v)
  95. version=$OPTARG
  96. echo "[+] Build version: $version"
  97. ;;
  98. h)
  99. usage
  100. exit 0
  101. ;;
  102. esac
  103. done
  104. login
  105. build