chore: split dev and production deployment env
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
deploy_env="${1:?Usage: deploy-backend.sh test|production}"
|
||||
|
||||
case "${deploy_env}" in
|
||||
test)
|
||||
env_file=".env.test"
|
||||
;;
|
||||
production)
|
||||
env_file=".env.production"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown deploy environment: ${deploy_env}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
project_name="${PROJECT_NAME:-access-manage}"
|
||||
base_dir="${DEPLOY_BASE_DIR:-/srv/www}"
|
||||
target_dir="${DEPLOY_TARGET_DIR:-${base_dir}/${deploy_env}/${project_name}}"
|
||||
deploy_remote="${DEPLOY_REMOTE:-}"
|
||||
release_id="${BUILD_NUMBER:-manual}-$(git rev-parse --short=12 HEAD 2>/dev/null || date +%Y%m%d%H%M%S)"
|
||||
package_dir=".deploy/${project_name}"
|
||||
|
||||
rm -rf "${package_dir}"
|
||||
mkdir -p "${package_dir}"
|
||||
|
||||
cp -R dist "${package_dir}/dist"
|
||||
cp -R migrations "${package_dir}/migrations"
|
||||
cp -R deploy "${package_dir}/deploy"
|
||||
cp package.json pnpm-lock.yaml "${package_dir}/"
|
||||
|
||||
remote_shell() {
|
||||
if [[ -n "${deploy_remote}" ]]; then
|
||||
ssh "${deploy_remote}" "$@"
|
||||
else
|
||||
bash -lc "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
remote_copy() {
|
||||
local source_dir="$1"
|
||||
local dest_dir="$2"
|
||||
|
||||
if [[ -n "${deploy_remote}" ]]; then
|
||||
rsync -az --delete "${source_dir}/" "${deploy_remote}:${dest_dir}/"
|
||||
else
|
||||
mkdir -p "${dest_dir}"
|
||||
rsync -az --delete "${source_dir}/" "${dest_dir}/"
|
||||
fi
|
||||
}
|
||||
|
||||
release_dir="${target_dir}/releases/${release_id}"
|
||||
shared_dir="${target_dir}/shared"
|
||||
|
||||
remote_shell "mkdir -p '${release_dir}' '${shared_dir}' '${target_dir}/logs'"
|
||||
remote_copy "${package_dir}" "${release_dir}"
|
||||
remote_shell "
|
||||
set -euo pipefail
|
||||
if [ -f '${shared_dir}/${env_file}' ]; then
|
||||
ln -sfn '../../shared/${env_file}' '${release_dir}/${env_file}'
|
||||
else
|
||||
echo 'Missing ${shared_dir}/${env_file}; create it before starting the service.' >&2
|
||||
fi
|
||||
ln -sfn '${release_dir}' '${target_dir}/current'
|
||||
"
|
||||
|
||||
if [[ -n "${DEPLOY_POST_DEPLOY_CMD:-}" ]]; then
|
||||
remote_shell "cd '${target_dir}/current' && ${DEPLOY_POST_DEPLOY_CMD}"
|
||||
else
|
||||
echo "Deployed ${project_name} ${deploy_env} to ${target_dir}/current"
|
||||
echo "Set DEPLOY_POST_DEPLOY_CMD in Jenkins to install production dependencies, run migrations, and restart the service."
|
||||
fi
|
||||
Reference in New Issue
Block a user