72 lines
2.4 KiB
Bash
Executable File
72 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
REMOTE_USER="bee"
|
|
REMOTE_BIN="/usr/local/bin/bee"
|
|
LOCAL_BIN="audit/bee"
|
|
SERVICES="bee-audit bee-web"
|
|
|
|
# --- IP ---
|
|
if [[ $# -ge 1 ]]; then
|
|
HOST="$1"
|
|
else
|
|
read -rp "IP адрес хоста: " HOST
|
|
fi
|
|
[[ -z "$HOST" ]] && { echo "Ошибка: IP не указан"; exit 1; }
|
|
|
|
# --- SSH options ---
|
|
SSH_OPTS=(-o StrictHostKeyChecking=no -o ConnectTimeout=10)
|
|
|
|
# Проверяем, нужен ли пароль
|
|
SSH_PASS=""
|
|
if ! ssh "${SSH_OPTS[@]}" -o BatchMode=yes "${REMOTE_USER}@${HOST}" true 2>/dev/null; then
|
|
if command -v sshpass &>/dev/null; then
|
|
read -rsp "Пароль для ${REMOTE_USER}@${HOST}: " SSH_PASS
|
|
echo
|
|
SSH_CMD=(sshpass -p "$SSH_PASS" ssh "${SSH_OPTS[@]}")
|
|
SCP_CMD=(sshpass -p "$SSH_PASS" scp "${SSH_OPTS[@]}")
|
|
else
|
|
echo "sshpass не установлен. Введите пароль вручную при запросе (или установите SSH-ключ)."
|
|
SSH_CMD=(ssh "${SSH_OPTS[@]}")
|
|
SCP_CMD=(scp "${SSH_OPTS[@]}")
|
|
fi
|
|
else
|
|
SSH_CMD=(ssh "${SSH_OPTS[@]}")
|
|
SCP_CMD=(scp "${SSH_OPTS[@]}")
|
|
fi
|
|
|
|
REMOTE="${REMOTE_USER}@${HOST}"
|
|
|
|
# --- Build ---
|
|
echo "==> Сборка бинарника..."
|
|
(
|
|
cd audit
|
|
VERSION=$(sh ./scripts/resolve-version.sh 2>/dev/null || echo "dev")
|
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
|
go build -ldflags "-X main.Version=${VERSION}" -o bee ./cmd/bee
|
|
)
|
|
echo " OK: $(ls -lh "${LOCAL_BIN}" | awk '{print $5, $9}')"
|
|
|
|
LOCAL_SHA="$(shasum -a 256 "${LOCAL_BIN}" | awk '{print $1}')"
|
|
REMOTE_SHA="$("${SSH_CMD[@]}" "$REMOTE" "if [ -f '${REMOTE_BIN}' ] && command -v sha256sum >/dev/null 2>&1; then sha256sum '${REMOTE_BIN}' | awk '{print \\$1}'; fi" 2>/dev/null || true)"
|
|
if [[ -n "${REMOTE_SHA}" && "${LOCAL_SHA}" == "${REMOTE_SHA}" ]]; then
|
|
echo "==> Бинарник не изменился (${LOCAL_SHA}); копирование и перезапуск сервисов пропущены."
|
|
exit 0
|
|
fi
|
|
|
|
# --- Deploy ---
|
|
echo "==> Копирование на ${REMOTE}..."
|
|
"${SCP_CMD[@]}" "${LOCAL_BIN}" "${REMOTE}:/tmp/bee-new"
|
|
|
|
echo "==> Замена бинарника и перезапуск сервисов..."
|
|
"${SSH_CMD[@]}" "$REMOTE" bash -s <<EOF
|
|
set -e
|
|
sudo mv /tmp/bee-new ${REMOTE_BIN}
|
|
sudo chmod +x ${REMOTE_BIN}
|
|
sudo systemctl restart ${SERVICES}
|
|
sleep 2
|
|
systemctl status ${SERVICES} --no-pager -l
|
|
EOF
|
|
|
|
echo "==> Готово."
|