GitFOSS
.sh
Shell
(text/x-sh)
#!/bin/bash

function build_and_deploy() {
  local host=$1
  local port=$2
  local docker_image_name=$3
  local docker_image_tag=$4
  local remote_ssh_user=$5
  local remote_ssh_host=$6
  local remote_ssh_port=$7
  local remote_dest_path=$8

  echo -e ""
  echo -e "-------------[ PLAN ]--------------"
  echo -e ""
  echo -e "1. docker build --build-arg HOST=${host} --build-arg PORT=${port} -f Dockerfile -t ${docker_image_name}:${docker_image_tag} ."
  echo -e "2. docker save -o ./${docker_image_name}.tar docker.io/library/${docker_image_name}"
  echo -e "3. scp ${docker_image_name}.tar ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path} -P ${remote_ssh_port}"
  echo -e "4. ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker load -i ${docker_image_name}.tar\""
  echo -e "5. ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose up -d --force-recreate web\""
  echo -e "6. ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose exec web yarn migrate:deploy\""
  echo -e "7. ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker system prune -f\""
  echo -e "8. docker system prune -f"
  echo -e ""
  echo -e "--------------[ RUN ]--------------"
  echo -e ""

  {
    echo -e "[..] docker build --build-arg HOST=${host} --build-arg PORT=${port} -f Dockerfile -t ${docker_image_name}:${docker_image_tag} ."
    docker build \
      --build-arg HOST=${host} \
      --build-arg PORT=${port} \
      -t ${docker_image_name}:${docker_image_tag} \
      -f Dockerfile \
      .
    echo -e "[ok] docker build --build-arg HOST=${host} --build-arg PORT=${port} -f Dockerfile -t ${docker_image_name}:${docker_image_tag} ."
  }
  echo -e ""
  {
  echo -e "[..] docker save -o ./${docker_image_name}.tar docker.io/library/${docker_image_name}"
  docker save \
    -o ./${docker_image_name}.tar \
    docker.io/library/${docker_image_name}
  echo -e "[ok] docker save -o ./${docker_image_name}.tar docker.io/library/${docker_image_name}"
  }
  echo -e ""
  {
  echo -e "[..] scp -P ${remote_ssh_port} ${docker_image_name}.tar ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path}"
  scp \
    -P ${remote_ssh_port} \
    ${docker_image_name}.tar \
    ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path}
  echo -e "[ok] scp -P ${remote_ssh_port} ${docker_image_name}.tar ${remote_ssh_user}@${remote_ssh_host}:${remote_dest_path}"
  }
  echo -e ""
  {
  echo -e "[..] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port}\"docker load -i ${docker_image_name}.tar\""
  ssh \
    ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \
    "docker load -i ${remote_dest_path}/${docker_image_name}.tar"
  echo -e "[ok] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker load -i ${docker_image_name}.tar\""
  }
  echo -e ""
  {
  echo -e "[..] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose up -d --force-recreate web\""
  ssh \
    ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \
    "docker-compose up -d --force-recreate web"
  echo -e "[ok] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose up -d --force-recreate web\""
  }
  echo -e ""
  {
  echo -e "[..] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose exec web yarn migrate:deploy\""
  ssh \
    ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \
    "docker-compose exec web yarn migrate:deploy"
  echo -e "[ok] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker-compose exec web yarn migrate:deploy\""
  }
  echo -e ""
  {
  echo -e "[..] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker system prune -f\""
  ssh \
    ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \
    "docker system prune -f"
  echo -e "[ok] ssh ${remote_ssh_user}@${remote_ssh_host} -p ${remote_ssh_port} \"docker system prune -f\""
  }
  echo -e ""
  {
  echo -e "[..] docker system prune -f"
  docker system prune -f
  echo -e "[ok] docker system prune -f"
  }
  echo -e ""
  exit 0
}

build_and_deploy \
  ${HOST:-0.0.0.0} \
  ${PORT:-1337} \
  ${DOCKER_IMAGE_NAME:-gitfoss_web} \
  ${DOCKER_IMAGE_TAG:-latest} \
  ${REMOTE_SSH_USER:-debian} \
  ${REMOTE_SSH_HOST:-gitfoss.dev} \
  ${REMOTE_SSH_PORT:-1338} \
  ${REMOTE_DESTINATION_PATH:-/home/debian/}