99 lines
2.5 KiB
Bash
99 lines
2.5 KiB
Bash
#!/usr/bin/env sh
|
|
set -eu
|
|
|
|
if [ "$#" -ne 5 ]; then
|
|
echo "用法: $0 <环境> <镜像仓库> <镜像标签> <逗号分隔服务> <环境文件>" >&2
|
|
exit 2
|
|
fi
|
|
|
|
DEPLOY_ENV="$1"
|
|
IMAGE_REPOSITORY="$2"
|
|
IMAGE_TAG="$3"
|
|
SERVICE_CSV="$4"
|
|
ENV_FILE="$5"
|
|
|
|
if [ ! -f "$ENV_FILE" ]; then
|
|
echo "环境文件不存在: $ENV_FILE" >&2
|
|
exit 2
|
|
fi
|
|
|
|
SERVICES=$(printf '%s' "$SERVICE_CSV" | tr ',' ' ')
|
|
|
|
env_file_has_key() {
|
|
grep -q "^$1=" "$ENV_FILE"
|
|
}
|
|
|
|
env_file_value() {
|
|
sed -n "s/^$1=//p" "$ENV_FILE" | tail -n 1 | tr -d '\r'
|
|
}
|
|
|
|
case " $SERVICES " in
|
|
*" finance "*)
|
|
for key in FINANCE_DB_URL FINANCE_DB_USERNAME FINANCE_DB_PASSWORD; do
|
|
if ! env_file_has_key "$key" || [ -z "$(env_file_value "$key")" ]; then
|
|
echo "部署 finance 服务时,环境文件必须包含非空 $key" >&2
|
|
exit 2
|
|
fi
|
|
done
|
|
;;
|
|
esac
|
|
|
|
case " $SERVICES " in
|
|
*" file "*)
|
|
if ! env_file_has_key ROCKETMQ_NAME_SERVER || [ -z "$(env_file_value ROCKETMQ_NAME_SERVER)" ]; then
|
|
echo "部署 file 服务时,环境文件必须包含非空 ROCKETMQ_NAME_SERVER" >&2
|
|
exit 2
|
|
fi
|
|
if ! env_file_has_key MQ_TOPIC_PREFIX; then
|
|
echo "部署 file 服务时,环境文件必须显式包含 MQ_TOPIC_PREFIX:测试填 test-,生产填空字符串" >&2
|
|
exit 2
|
|
fi
|
|
MQ_PREFIX=$(env_file_value MQ_TOPIC_PREFIX)
|
|
case "$DEPLOY_ENV" in
|
|
test)
|
|
if [ "$MQ_PREFIX" != "test-" ]; then
|
|
echo "测试环境部署 file 服务时 MQ_TOPIC_PREFIX 必须为 test-" >&2
|
|
exit 2
|
|
fi
|
|
;;
|
|
production)
|
|
if [ -n "$MQ_PREFIX" ]; then
|
|
echo "生产环境部署 file 服务时 MQ_TOPIC_PREFIX 必须显式为空字符串" >&2
|
|
exit 2
|
|
fi
|
|
;;
|
|
*)
|
|
if [ -z "$MQ_PREFIX" ] || [ "$MQ_PREFIX" = "test-" ]; then
|
|
echo "预发布环境部署 file 服务时 MQ_TOPIC_PREFIX 必须为非空且不能使用 test-" >&2
|
|
exit 2
|
|
fi
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
export DEPLOY_ENV IMAGE_REPOSITORY IMAGE_TAG
|
|
|
|
PULL_POLICY_ARGS=""
|
|
if [ "$DEPLOY_ENV" = "test" ]; then
|
|
PULL_POLICY_ARGS="--pull never"
|
|
else
|
|
docker compose \
|
|
--project-name "firstleg-${DEPLOY_ENV}" \
|
|
--env-file "$ENV_FILE" \
|
|
-f deploy/docker-compose.yml \
|
|
pull $SERVICES
|
|
fi
|
|
|
|
docker compose \
|
|
--project-name "firstleg-${DEPLOY_ENV}" \
|
|
--env-file "$ENV_FILE" \
|
|
-f deploy/docker-compose.yml \
|
|
up -d --remove-orphans $PULL_POLICY_ARGS $SERVICES
|
|
|
|
docker compose \
|
|
--project-name "firstleg-${DEPLOY_ENV}" \
|
|
--env-file "$ENV_FILE" \
|
|
-f deploy/docker-compose.yml \
|
|
ps $SERVICES
|