Files
RawMark/deploy/stop.sh
T
eezd 403824eccb
Development CI / check-and-package (push) Successful in 4m21s
GitHub Git mirror / mirror (push) Successful in 6s
Development CI / image (push) Successful in 22s
Development CI / deploy-development (push) Successful in 16s
fix(ci): deploy version tags and install instance controls
2026-11-02 15:37:54 +08:00

41 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Manage only this DEV instance under the deployment lock.
set -euo pipefail
if (( $# != 0 )); then
printf '用法:bash %s\n' "$0" >&2
exit 2
fi
instance_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
cd -- "$instance_dir"
for tool in docker flock env; do
command -v "$tool" >/dev/null 2>&1 || { printf '缺少命令:%s\n' "$tool" >&2; exit 1; }
done
exec 9>>.deploy.lock
flock -n 9 || { printf '实例正在部署或启停,请稍后重试\n' >&2; exit 1; }
files=()
for filename in compose.yaml compose.yml docker-compose.yaml docker-compose.yml; do
[[ ! -f $filename ]] || files+=("$filename")
done
if (( ${#files[@]} != 1 )); then
printf '实例必须有且只有一个 Compose 主文件,当前找到 %d 个\n' "${#files[@]}" >&2
exit 1
fi
# Keep Docker client access; resolve application settings only from instance files.
compose=(env -i "PATH=$PATH")
for variable in HOME DOCKER_CONFIG DOCKER_HOST DOCKER_CONTEXT DOCKER_TLS_VERIFY DOCKER_CERT_PATH XDG_RUNTIME_DIR SSH_AUTH_SOCK; do
if [[ -v $variable ]]; then
compose+=("$variable=${!variable}")
fi
done
compose+=(docker compose --project-directory "$instance_dir" -f "$instance_dir/${files[0]}")
# Explicit env files disable Compose's implicit .env, so include both in order.
for filename in .env images.env; do
if [[ -f $filename ]]; then
compose+=(--env-file "$instance_dir/$filename")
fi
done
"${compose[@]}" config --quiet
# Preserve containers, networks, volumes and persistent data.
"${compose[@]}" stop
printf '已停止实例:%s\n' "${instance_dir##*/}"