Files
lehuo/infra/ubuntu/scripts/rollback.sh
T

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"