28 lines
1.2 KiB
Bash
28 lines
1.2 KiB
Bash
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
# shellcheck source=lib.sh
|
|
source "$(dirname -- "${BASH_SOURCE[0]}")/lib.sh"
|
|
|
|
env_file="${1:-/etc/lehuo/lehuo.env}"
|
|
require_env_file "$env_file"
|
|
release_dir='/opt/lehuo/releases'
|
|
[[ -f "$release_dir/previous" ]] || { echo '没有可回滚的上一镜像标签。' >&2; exit 1; }
|
|
|
|
previous_tag="$(<"$release_dir/previous")"
|
|
current_tag="$(<"$release_dir/current")"
|
|
[[ -n "$previous_tag" && "$previous_tag" != 'latest' ]] || { echo '上一镜像标签无效。' >&2; exit 1; }
|
|
|
|
if ! docker image inspect "lehuo-api:${previous_tag}" >/dev/null 2>&1 || ! docker image inspect "lehuo-admin:${previous_tag}" >/dev/null 2>&1; then
|
|
echo '上一版本镜像在本机不存在,停止回滚。' >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo '注意:此操作只回滚应用镜像,不回滚数据库。migration 必须保持向后兼容。'
|
|
IMAGE_TAG="$previous_tag" compose "$env_file" up -d --no-build api web
|
|
bash "$(dirname -- "${BASH_SOURCE[0]}")/smoke.sh" "$env_file"
|
|
printf '%s\n' "$previous_tag" > "$release_dir/current"
|
|
printf '%s\n' "$current_tag" > "$release_dir/previous"
|
|
chmod 600 "$release_dir/current" "$release_dir/previous"
|
|
printf '应用已回滚到:%s\n' "$previous_tag"
|