From 3947b3e0c88a3a97ac2b866ae0d56ac6f6622b39 Mon Sep 17 00:00:00 2001 From: Bryan Joshua Pedini Date: Wed, 21 Aug 2024 22:01:24 +0200 Subject: [PATCH] added deploy process --- .vars | 4 ++++ deploy.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ makefile | 4 ++++ version.sh | 17 ++++++++++------- 4 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 .vars create mode 100755 deploy.sh diff --git a/.vars b/.vars new file mode 100644 index 0000000..7c8066f --- /dev/null +++ b/.vars @@ -0,0 +1,4 @@ +#/usr/bin/env bash + +export DEPLOYMENT_HOST=docker.infra.bjphoster.cloud +export DEPLOYMENT_PATH=/opt/pedini.dev diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..198db41 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -e + +### +# FLOW +### +# +# if the private key variable is set, prepend "-i" to it +# if the username variable is set, append the at sign to it +# if either the deployment host or deployment path variables are not set, return an error +# tarball the built website and scp it to the deployment host +# ssh to the remote host, cd to the deployment path, and get the data path from .env file +# then remove everything in the data path, untar the tarball and reload the server +# finally remove the tarball, both from the remote host and locally (cleanup) + +# Check if the private key variable is set +if [ ! -z "${SSH_PRIVATE_KEY}" ]; then + SSH_PRIVATE_KEY="-i ${SSH_PRIVATE_KEY}" +fi + +# Check if the username variable is set +if [ ! -z "${SSH_USERNAME}" ]; then + SSH_USERNAME="${SSH_USERNAME}@" +fi + +# Check if either the deployment host or deployment path variables are not set +if [ -z "${DEPLOYMENT_HOST}" ] || [ -z "${DEPLOYMENT_PATH}" ]; then + echo "required variable DEPLOYMENT_HOST is not set" + exit 1 +fi + +tar -czf httpdocs.tgz -C public . +scp -o StrictHostKeyChecking=no ${SSH_PRIVATE_KEY} httpdocs.tgz ${SSH_USERNAME}${DEPLOYMENT_HOST}:/tmp/httpdocs.tgz +ssh -o StrictHostKeyChecking=no ${SSH_PRIVATE_KEY} ${SSH_USERNAME}${DEPLOYMENT_HOST} "DEPLOYMENT_PATH=$DEPLOYMENT_PATH bash" << 'EOF' + cd ${DEPLOYMENT_PATH} + DATAPATH=$(cat .env | grep "NGINX_DATA" | sed "s/NGINX_DATA=//g") + rm -rf ${DATAPATH}/{*,.*} + tar xf /tmp/httpdocs.tgz -C ${DATAPATH} + docker compose restart + rm -f /tmp/httpdocs.tgz +EOF +rm -f httpdocs.tgz diff --git a/makefile b/makefile index a244aa4..72cbc17 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,5 @@ #!make +include .vars default: build @@ -8,5 +9,8 @@ prep: build: prep ./version.sh +deploy: + ./deploy.sh + run: prep hugo server diff --git a/version.sh b/version.sh index 4eddd61..1c8a807 100755 --- a/version.sh +++ b/version.sh @@ -1,13 +1,16 @@ #!/usr/bin/env bash set -e -# Get version from user -read -p "Version [latest]: " VERSIONINPUT -# If version was not provided, use the latest commit short hash as version -if [ -z ${VERSIONINPUT} ]; then - APP_VERSION="latest" -else - APP_VERSION=${VERSIONINPUT} +# Check if version is already provided +if [ -z "${APP_VERSION}"]; then + # Get version from user + read -p "Version [latest]: " VERSIONINPUT + # If version was not provided, use the latest commit short hash as version + if [ -z ${VERSIONINPUT} ]; then + APP_VERSION="latest" + else + APP_VERSION=${VERSIONINPUT} + fi fi # Get project commit id and URL