94 lines
3.0 KiB
Bash
94 lines
3.0 KiB
Bash
#! /bin/bash
|
|
|
|
# Requirements
|
|
# Docker: Node v18-alpine
|
|
function build_docker(){
|
|
if [[ $# -lt 1 ]]; then
|
|
echo $0 "[conatiner name]"
|
|
return -1
|
|
fi
|
|
CONTAINER_NAME=$1
|
|
|
|
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
|
|
}
|