#!/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"