#! /bin/bash # Requirements # Docker: Node v18-alpine function build_docker(){ if [[ $# -lt 1 ]]; then echo $0 "[conatiner name]" return -1 fi CONTAINER_NAME=$1 cat src/config/apiConfig.json > src/config/apiConfig_local.json set -x docker rmi -f "$AWS_ECR_REPO/$CONTAINER_NAME" docker buildx build --no-cache -t $AWS_ECR_REPO/$CONTAINER_NAME ./ set +x } function upload_image(){ #Global ENV VAR: AWS_DEFAULT_REGION #Global ENV VAR: AWS_ECRWRITTER_ID #Global ENV VAR: AWS_ECRWRITTER_SECRET #Global ENV VAR: AWS_ECR_USER #Global ENV VAR: AWS_ECR_REPO #Global ENV VAR: CONTAINER_NAME mkdir .aws echo "[default]" > ./.aws/config echo "region = $AWS_DEFAULT_REGION" >> ./.aws/config echo "output = json" >> ./.aws/config echo "[default]" > ./.aws/credentials echo "aws_access_key_id = $AWS_ECRWRITTER_ID" >> ./.aws/credentials echo "aws_secret_access_key = $AWS_ECRWRITTER_SECRET" >> ./.aws/credentials DOCKER_PWD=$(docker run --rm -v ./.aws/:/root/.aws amazon/aws-cli ecr get-login-password) rm -rf ./.aws docker login -u $AWS_ECR_USER -p $DOCKER_PWD $AWS_ECR_REPO set -x docker push "$AWS_ECR_REPO/$CONTAINER_NAME":latest set +x } function prepare_deployment(){ # Global Env Var: AWS_DEFAULT_REGION # Global Env Var: AWS_ECRWRITTER_ID # Global Env Var: AWS_ECRWRITTER_SECRET # Global Env Var: SYSTEM_HOSTNAME #Generate Docker Access Token mkdir .aws echo "[default]" > ./.aws/config echo "region = $AWS_DEFAULT_REGION" >> ./.aws/config echo "output = json" >> ./.aws/config echo "[default]" > ./.aws/credentials echo "aws_access_key_id = $AWS_ECRWRITTER_ID" >> ./.aws/credentials echo "aws_secret_access_key = $AWS_ECRWRITTER_SECRET" >> ./.aws/credentials export DOCKER_PWD=$(docker run --rm -v ./.aws/:/root/.aws amazon/aws-cli ecr get-login-password) rm -rf ./.aws } function deploy_uservice(){ # CONTAINER NAME # PUBLIC PORT # PRIVATE PORT # ECR REPO if [[ $# -lt 4 ]]; then echo "$0 [container_name] [public port] [private port] [ecr_repo]" return -1 fi container_name=$1 public_port=$2 private_port=$3 ecr_repo=$4 docker stop $container_name && docker rm $container_name docker run -p"$public_port:$private_port" -d --restart unless-stopped --name $container_name $ecr_repo/$container_name:latest } function deploy_local(){ # docker login --username $AWS_ECR_USER --password $DOCKER_PWD $AWS_ECR_REPO deploy_uservice $CONTAINER_NAME $PUBLIC_PORT $PRIVATE_PORT $AWS_ECR_REPO } function deploy(){ # Global Env Var: AWS_ECR_USER # Global Env Var: AWS_ECR_REPO # Global Env Var: CONTAINER_NAME # Global Env Var: PUBLIC_PORT # Global Env Var: PRIVATE_PORT # Global Env Var: AWS_ECR_REPO # Global Env Var: SYSTEM_HOSTNAME prepare_deployment set -x ssh -i ~/.ssh/gitlab_runner gitlab-runner@$SYSTEM_HOSTNAME "docker login --username $AWS_ECR_USER --password $DOCKER_PWD $AWS_ECR_REPO && ./deploy_uservice.sh $CONTAINER_NAME $PUBLIC_PORT $PRIVATE_PORT $AWS_ECR_REPO && exit" #deploy_local set +x }