| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #!/usr/bin/env bash
- #
- # 将仓库最新源码同步到 deployment/ 发布目录(开发机/CI 执行)
- # 用法: bash deployment/sync_release.sh
- #
- set -euo pipefail
- ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
- DEPLOY_DIR="${ROOT_DIR}/deployment"
- echo "[sync] 根目录: ${ROOT_DIR}"
- echo "[sync] 发布目录: ${DEPLOY_DIR}"
- copy_tree() {
- local src="$1"
- local dst="$2"
- if [[ ! -d "${src}" ]]; then
- echo "[sync] 跳过(不存在): ${src}"
- return 0
- fi
- rm -rf "${dst}"
- cp -a "${src}" "${dst}"
- echo "[sync] ${src} -> ${dst}"
- }
- copy_file() {
- local src="$1"
- local dst="$2"
- if [[ ! -f "${src}" ]]; then
- echo "[sync] 跳过(不存在): ${src}"
- return 0
- fi
- cp -f "${src}" "${dst}"
- echo "[sync] ${src} -> ${dst}"
- }
- copy_tree "${ROOT_DIR}/app" "${DEPLOY_DIR}/app"
- copy_tree "${ROOT_DIR}/database" "${DEPLOY_DIR}/database"
- for file in requirements.txt gunicorn_config.py __init__.py; do
- copy_file "${ROOT_DIR}/${file}" "${DEPLOY_DIR}/${file}"
- done
- if [[ ! -f "${DEPLOY_DIR}/wsgi.py" ]]; then
- cat >"${DEPLOY_DIR}/wsgi.py" <<'EOF'
- """WSGI entry point for production deployment."""
- from app import create_app
- application = create_app()
- app = application
- EOF
- echo "[sync] 已生成 ${DEPLOY_DIR}/wsgi.py"
- fi
- mkdir -p "${DEPLOY_DIR}/scripts"
- for script in dataops-common.sh deploy_dataops.sh run_dataops.sh start_dataops.sh stop_dataops.sh restart_dataops.sh; do
- copy_file "${ROOT_DIR}/scripts/${script}" "${DEPLOY_DIR}/scripts/${script}"
- done
- # 统一 LF,避免 Windows 编辑导致 bash 报错
- if command -v sed >/dev/null 2>&1; then
- find "${DEPLOY_DIR}" -type f \( -name '*.sh' -o -name 'dataops.env' -o -name '.env.production.example' \) \
- -exec sed -i 's/\r$//' {} + 2>/dev/null || true
- fi
- chmod +x "${DEPLOY_DIR}/deploy_dataops.sh" "${DEPLOY_DIR}/sync_release.sh" 2>/dev/null || true
- chmod +x "${DEPLOY_DIR}/scripts/"*.sh 2>/dev/null || true
- echo "[sync] 完成。下一步: cd deployment && bash package_release.sh"
|