Reuse SSH session in deploy script
This commit is contained in:
@@ -5,6 +5,18 @@ set -euo pipefail
|
|||||||
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
repo_root="$(cd "$script_dir/.." && pwd)"
|
repo_root="$(cd "$script_dir/.." && pwd)"
|
||||||
|
|
||||||
|
ssh_control_path=""
|
||||||
|
cleanup() {
|
||||||
|
local exit_code=$?
|
||||||
|
|
||||||
|
if [[ -n "$ssh_control_path" ]] && ssh -o ControlPath="$ssh_control_path" -O exit "$REMOTE_HOST" >/dev/null 2>&1; then
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit "$exit_code"
|
||||||
|
}
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
if [[ $# -gt 1 ]]; then
|
if [[ $# -gt 1 ]]; then
|
||||||
echo "Usage: $0 [deploy-config-file]" >&2
|
echo "Usage: $0 [deploy-config-file]" >&2
|
||||||
exit 1
|
exit 1
|
||||||
@@ -43,6 +55,7 @@ dockerfile_path="$repo_root/deploy/vserver.Dockerfile"
|
|||||||
project_path="$repo_root/src/RolemasterDb.App/RolemasterDb.App.csproj"
|
project_path="$repo_root/src/RolemasterDb.App/RolemasterDb.App.csproj"
|
||||||
remote_release_dir="$REMOTE_APP_DIR/releases/$release_id"
|
remote_release_dir="$REMOTE_APP_DIR/releases/$release_id"
|
||||||
remote_tarball_path="$remote_release_dir/release.tar.gz"
|
remote_tarball_path="$remote_release_dir/release.tar.gz"
|
||||||
|
ssh_control_path="/tmp/rolemasterdb-deploy-${USER:-$(id -un)}-$(date -u +%Y%m%d%H%M%S)-$$.sock"
|
||||||
|
|
||||||
if [[ ! -f "$seed_db_path" ]]; then
|
if [[ ! -f "$seed_db_path" ]]; then
|
||||||
echo "Seed database not found: $seed_db_path" >&2
|
echo "Seed database not found: $seed_db_path" >&2
|
||||||
@@ -56,6 +69,14 @@ fi
|
|||||||
|
|
||||||
mkdir -p "$artifact_root"
|
mkdir -p "$artifact_root"
|
||||||
|
|
||||||
|
echo "Opening shared SSH connection to $REMOTE_HOST..."
|
||||||
|
ssh \
|
||||||
|
-o ControlMaster=yes \
|
||||||
|
-o ControlPersist=10m \
|
||||||
|
-o ControlPath="$ssh_control_path" \
|
||||||
|
-Nf \
|
||||||
|
"$REMOTE_HOST"
|
||||||
|
|
||||||
echo "Publishing RolemasterDb.App..."
|
echo "Publishing RolemasterDb.App..."
|
||||||
rm -rf "$publish_dir"
|
rm -rf "$publish_dir"
|
||||||
mkdir -p \
|
mkdir -p \
|
||||||
@@ -73,7 +94,9 @@ cp "$dockerfile_path" "$stage_dir/Dockerfile"
|
|||||||
tar -C "$stage_dir" -czf "$tarball_path" .
|
tar -C "$stage_dir" -czf "$tarball_path" .
|
||||||
|
|
||||||
echo "Creating remote release directory..."
|
echo "Creating remote release directory..."
|
||||||
ssh "$REMOTE_HOST" bash -s -- "$remote_release_dir" "$REMOTE_DATA_DIR" <<'EOF'
|
ssh \
|
||||||
|
-o ControlPath="$ssh_control_path" \
|
||||||
|
"$REMOTE_HOST" bash -s -- "$remote_release_dir" "$REMOTE_DATA_DIR" <<'EOF'
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
release_dir="$1"
|
release_dir="$1"
|
||||||
data_dir="$2"
|
data_dir="$2"
|
||||||
@@ -81,10 +104,15 @@ mkdir -p "$release_dir" "$data_dir"
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo "Uploading bundle to $REMOTE_HOST..."
|
echo "Uploading bundle to $REMOTE_HOST..."
|
||||||
scp "$tarball_path" "$REMOTE_HOST:$remote_tarball_path"
|
scp \
|
||||||
|
-o ControlPath="$ssh_control_path" \
|
||||||
|
"$tarball_path" "$REMOTE_HOST:$remote_tarball_path"
|
||||||
|
|
||||||
echo "Building image and restarting container on $REMOTE_HOST..."
|
echo "Building image and restarting container on $REMOTE_HOST..."
|
||||||
ssh "$REMOTE_HOST" bash -s -- \
|
remote_env_file_escaped="$(printf '%q' "$REMOTE_ENV_FILE")"
|
||||||
|
ssh \
|
||||||
|
-o ControlPath="$ssh_control_path" \
|
||||||
|
"$REMOTE_HOST" bash -s -- \
|
||||||
"$release_id" \
|
"$release_id" \
|
||||||
"$REMOTE_APP_DIR" \
|
"$REMOTE_APP_DIR" \
|
||||||
"$REMOTE_DATA_DIR" \
|
"$REMOTE_DATA_DIR" \
|
||||||
@@ -93,8 +121,7 @@ ssh "$REMOTE_HOST" bash -s -- \
|
|||||||
"$HOST_BIND_ADDRESS" \
|
"$HOST_BIND_ADDRESS" \
|
||||||
"$HOST_PORT" \
|
"$HOST_PORT" \
|
||||||
"$CONTAINER_PORT" \
|
"$CONTAINER_PORT" \
|
||||||
"$REMOTE_USE_SUDO" \
|
"$REMOTE_USE_SUDO" <<EOF
|
||||||
"$REMOTE_ENV_FILE" <<'EOF'
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
release_id="$1"
|
release_id="$1"
|
||||||
@@ -106,7 +133,7 @@ host_bind_address="$6"
|
|||||||
host_port="$7"
|
host_port="$7"
|
||||||
container_port="$8"
|
container_port="$8"
|
||||||
remote_use_sudo="$9"
|
remote_use_sudo="$9"
|
||||||
remote_env_file="${10}"
|
remote_env_file=$remote_env_file_escaped
|
||||||
|
|
||||||
release_dir="$remote_app_dir/releases/$release_id"
|
release_dir="$remote_app_dir/releases/$release_id"
|
||||||
tarball_path="$release_dir/release.tar.gz"
|
tarball_path="$release_dir/release.tar.gz"
|
||||||
|
|||||||
Reference in New Issue
Block a user