package_release.sh 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env bash
  2. #
  3. # 打包 deployment/ 为可上传的 tar.gz 发布包
  4. # 用法: cd deployment && bash package_release.sh
  5. #
  6. set -euo pipefail
  7. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  8. ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
  9. VERSION="$(date +%Y%m%d)"
  10. ARCHIVE_NAME="dataops-platform-release-${VERSION}.tar.gz"
  11. OUTPUT_DIR="${ROOT_DIR}/dist"
  12. required=(
  13. "${SCRIPT_DIR}/app"
  14. "${SCRIPT_DIR}/database"
  15. "${SCRIPT_DIR}/requirements.txt"
  16. "${SCRIPT_DIR}/wsgi.py"
  17. "${SCRIPT_DIR}/gunicorn_config.py"
  18. "${SCRIPT_DIR}/deploy_dataops.sh"
  19. "${SCRIPT_DIR}/scripts/run_dataops.sh"
  20. "${SCRIPT_DIR}/dataops.env"
  21. )
  22. for path in "${required[@]}"; do
  23. if [[ ! -e "${path}" ]]; then
  24. echo "缺少发布文件: ${path}" >&2
  25. echo "请先执行: bash deployment/sync_release.sh" >&2
  26. exit 1
  27. fi
  28. done
  29. mkdir -p "${OUTPUT_DIR}"
  30. TMP_DIR="$(mktemp -d)"
  31. trap 'rm -rf "${TMP_DIR}"' EXIT
  32. RELEASE_ROOT="${TMP_DIR}/dataops-platform"
  33. mkdir -p "${RELEASE_ROOT}"
  34. copy_into_release() {
  35. local src="$1"
  36. local rel="$2"
  37. if [[ -e "${src}" ]]; then
  38. mkdir -p "$(dirname "${RELEASE_ROOT}/${rel}")"
  39. cp -a "${src}" "${RELEASE_ROOT}/${rel}"
  40. fi
  41. }
  42. copy_into_release "${SCRIPT_DIR}/app" "app"
  43. copy_into_release "${SCRIPT_DIR}/database" "database"
  44. copy_into_release "${SCRIPT_DIR}/config" "config"
  45. copy_into_release "${SCRIPT_DIR}/scripts" "scripts"
  46. copy_into_release "${SCRIPT_DIR}/requirements.txt" "requirements.txt"
  47. copy_into_release "${SCRIPT_DIR}/wsgi.py" "wsgi.py"
  48. copy_into_release "${SCRIPT_DIR}/gunicorn_config.py" "gunicorn_config.py"
  49. copy_into_release "${SCRIPT_DIR}/__init__.py" "__init__.py"
  50. copy_into_release "${SCRIPT_DIR}/deploy_dataops.sh" "deploy_dataops.sh"
  51. copy_into_release "${SCRIPT_DIR}/dataops.env" "dataops.env"
  52. copy_into_release "${SCRIPT_DIR}/.env.production.example" ".env.production.example"
  53. copy_into_release "${SCRIPT_DIR}/README.md" "README.md"
  54. copy_into_release "${SCRIPT_DIR}/DEPLOYMENT_GUIDE.md" "DEPLOYMENT_GUIDE.md"
  55. copy_into_release "${SCRIPT_DIR}/CHECKLIST.md" "CHECKLIST.md"
  56. copy_into_release "${SCRIPT_DIR}/MANIFEST.md" "MANIFEST.md"
  57. tar -czf "${OUTPUT_DIR}/${ARCHIVE_NAME}" -C "${TMP_DIR}" dataops-platform
  58. echo "发布包已生成: ${OUTPUT_DIR}/${ARCHIVE_NAME}"
  59. echo "上传后在服务器执行:"
  60. echo " tar -xzf ${ARCHIVE_NAME}"
  61. echo " cd dataops-platform"
  62. echo " sudo bash deploy_dataops.sh"