feat(CICD): Testing gitlab-cicd registry

This commit is contained in:
Josepablo C
2024-09-10 23:11:47 -06:00
parent 656adde7b1
commit 2cd5d4d6ef
3 changed files with 70 additions and 117 deletions

View File

@@ -5,9 +5,9 @@ stages:
variables: variables:
PIPELINE_WORK_DIR_V1: "./v1" PIPELINE_WORK_DIR_V1: "./v1"
CONTAINER_NAME_V1: "eta-etaapi" CONTAINER_NAME_V1: "etaapi"
PIPELINE_WORK_DIR_V2: "./v2" PIPELINE_WORK_DIR_V2: "./v2"
CONTAINER_NAME_V2: "eta-etaapiv2" CONTAINER_NAME_V2: "etaapi"
PUBLIC_PORT_V1: 7001 PUBLIC_PORT_V1: 7001
PRIVATE_PORT_V1: 3000 PRIVATE_PORT_V1: 3000
PUBLIC_PORT_V2: 7002 PUBLIC_PORT_V2: 7002
@@ -48,15 +48,15 @@ build-v1-job:
PRIVATE_PORT: "$PRIVATE_PORT_V1" PRIVATE_PORT: "$PRIVATE_PORT_V1"
<<: *generic_build_job <<: *generic_build_job
build-v2-job: # build-v2-job:
stage: build # stage: build
needs: [] # needs: []
variables: # variables:
PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V2" # PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V2"
CONTAINER_NAME: "$CONTAINER_NAME_V2" # CONTAINER_NAME: "$CONTAINER_NAME_V2"
PUBLIC_PORT: "$PUBLIC_PORT_V2" # PUBLIC_PORT: "$PUBLIC_PORT_V2"
PRIVATE_PORT: "$PRIVATE_PORT_V2" # PRIVATE_PORT: "$PRIVATE_PORT_V2"
<<: *generic_build_job # <<: *generic_build_job
upload-v1-job: upload-v1-job:
stage: upload stage: upload
@@ -68,15 +68,15 @@ upload-v1-job:
PRIVATE_PORT: "$PRIVATE_PORT_V1" PRIVATE_PORT: "$PRIVATE_PORT_V1"
<<: *generic_upload_job <<: *generic_upload_job
upload-v2-job: # upload-v2-job:
stage: upload # stage: upload
needs: ["build-v2-job"] # needs: ["build-v2-job"]
variables: # variables:
PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V2" # PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V2"
CONTAINER_NAME: "$CONTAINER_NAME_V2" # CONTAINER_NAME: "$CONTAINER_NAME_V2"
PUBLIC_PORT: "$PUBLIC_PORT_V2" # PUBLIC_PORT: "$PUBLIC_PORT_V2"
PRIVATE_PORT: "$PRIVATE_PORT_V2" # PRIVATE_PORT: "$PRIVATE_PORT_V2"
<<: *generic_upload_job # <<: *generic_upload_job
deploy-v1-job: deploy-v1-job:
stage: deploy stage: deploy
@@ -88,12 +88,12 @@ deploy-v1-job:
PRIVATE_PORT: "$PRIVATE_PORT_V1" PRIVATE_PORT: "$PRIVATE_PORT_V1"
<<: *generic_deploy_job <<: *generic_deploy_job
deploy-v2-job: # deploy-v2-job:
stage: deploy # stage: deploy
needs: ["upload-v2-job"] # needs: ["upload-v2-job"]
variables: # variables:
PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V2" # PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V2"
CONTAINER_NAME: "$CONTAINER_NAME_V2" # CONTAINER_NAME: "$CONTAINER_NAME_V2"
PUBLIC_PORT: "$PUBLIC_PORT_V2" # PUBLIC_PORT: "$PUBLIC_PORT_V2"
PRIVATE_PORT: "$PRIVATE_PORT_V2" # PRIVATE_PORT: "$PRIVATE_PORT_V2"
<<: *generic_deploy_job # <<: *generic_deploy_job

View File

@@ -1,8 +1,15 @@
#! /bin/bash #! /bin/bash
REGISTRY_USER="jcruzbaas@gmail.com"
REGISTRY_NAME="registry.gitlab.com/jcruzbaasworkspace/enruta"
REGISTRY_SERVER="registry.gitlab.com"
CONTAINER_VERSION="latest"
# Requirements # Requirements
# Docker: Node v18-alpine # Docker: Node v18-alpine
function build_docker(){ function build_docker(){
#Global ENV VAR: REGISTRY_NAME
#Global ENV VAR: CONTAINER_NAME
if [[ $# -lt 1 ]]; then if [[ $# -lt 1 ]]; then
echo $0 "[conatiner name]" echo $0 "[conatiner name]"
return -1 return -1
@@ -11,50 +18,21 @@ function build_docker(){
cat src/config/apiConfig.json > src/config/apiConfig_local.json cat src/config/apiConfig.json > src/config/apiConfig_local.json
set -x set -x
docker rmi -f "$AWS_ECR_REPO/$CONTAINER_NAME" docker rmi -f "$REGISTRY_NAME/$CONTAINER_NAME"
docker buildx build --no-cache -t $AWS_ECR_REPO/$CONTAINER_NAME ./ docker buildx build --no-cache -t $REGISTRY_NAME/$CONTAINER_NAME ./
set +x set +x
} }
function upload_image(){ function upload_image(){
#Global ENV VAR: AWS_DEFAULT_REGION #Global ENV VAR: REGISTRY_NAME
#Global ENV VAR: AWS_ECRWRITTER_ID #Global ENV VAR: GITLAB_CICD_REGISTRY_TOKEN
#Global ENV VAR: AWS_ECRWRITTER_SECRET
#Global ENV VAR: AWS_ECR_USER
#Global ENV VAR: AWS_ECR_REPO
#Global ENV VAR: CONTAINER_NAME #Global ENV VAR: CONTAINER_NAME
mkdir .aws docker login $REGISTRY_SERVER -u "$REGISTRY_USER" -p "$GITLAB_CICD_REGISTRY_TOKEN"
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 set -x
docker push "$AWS_ECR_REPO/$CONTAINER_NAME":latest docker push "$REGISTRY_NAME/$CONTAINER_NAME":$CONTAINER_VERSION
set +x 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(){ function deploy_uservice(){
# CONTAINER NAME # CONTAINER NAME
# PUBLIC PORT # PUBLIC PORT
@@ -70,25 +48,24 @@ function deploy_uservice(){
ecr_repo=$4 ecr_repo=$4
docker stop $container_name && docker rm $container_name 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 docker run -p"$public_port:$private_port" -d --restart unless-stopped --name $container_name $ecr_repo/$container_name:$CONTAINER_VERSION
} }
function deploy_local(){ function deploy_local(){
# docker login --username $AWS_ECR_USER --password $DOCKER_PWD $AWS_ECR_REPO # docker login --username $AWS_ECR_USER --password $DOCKER_PWD $REGISTRY_NAME
deploy_uservice $CONTAINER_NAME $PUBLIC_PORT $PRIVATE_PORT $AWS_ECR_REPO deploy_uservice $CONTAINER_NAME $PUBLIC_PORT $PRIVATE_PORT $REGISTRY_NAME
} }
function deploy(){ function deploy(){
# Global Env Var: AWS_ECR_USER # Global ENV VAR: GITLAB_CICD_REGISTRY_TOKEN
# Global Env Var: AWS_ECR_REPO # Global Env Var: REGISTRY_NAME
# Global Env Var: REGISTRY_USER
# Global Env Var: CONTAINER_NAME # Global Env Var: CONTAINER_NAME
# Global Env Var: PUBLIC_PORT # Global Env Var: PUBLIC_PORT
# Global Env Var: PRIVATE_PORT # Global Env Var: PRIVATE_PORT
# Global Env Var: AWS_ECR_REPO
# Global Env Var: SYSTEM_HOSTNAME # Global Env Var: SYSTEM_HOSTNAME
prepare_deployment
set -x 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" # ssh -i ~/.ssh/gitlab_runner gitlab-runner@$SYSTEM_HOSTNAME "docker login $REGISTRY_SERVER --username $REGISTRY_USER --password $GITLAB_CICD_REGISTRY_TOKEN && ./deploy_uservice.sh $CONTAINER_NAME $PUBLIC_PORT $PRIVATE_PORT $REGISTRY_NAME && exit"
#deploy_local deploy_local
set +x set +x
} }

View File

@@ -1,8 +1,15 @@
#! /bin/bash #! /bin/bash
REGISTRY_USER="jcruzbaas@gmail.com"
REGISTRY_NAME="registry.gitlab.com/jcruzbaasworkspace/enruta"
REGISTRY_SERVER="registry.gitlab.com"
CONTAINER_VERSION="2"
# Requirements # Requirements
# Docker: Node v18-alpine # Docker: Node v18-alpine
function build_docker(){ function build_docker(){
#Global ENV VAR: REGISTRY_NAME
#Global ENV VAR: CONTAINER_NAME
if [[ $# -lt 1 ]]; then if [[ $# -lt 1 ]]; then
echo $0 "[conatiner name]" echo $0 "[conatiner name]"
return -1 return -1
@@ -10,50 +17,21 @@ function build_docker(){
CONTAINER_NAME=$1 CONTAINER_NAME=$1
set -x set -x
docker rmi -f "$AWS_ECR_REPO/$CONTAINER_NAME" docker rmi -f "$REGISTRY_NAME/$CONTAINER_NAME"
docker buildx build --no-cache -t $AWS_ECR_REPO/$CONTAINER_NAME ./ docker buildx build --no-cache -t $REGISTRY_NAME/$CONTAINER_NAME ./
set +x set +x
} }
function upload_image(){ function upload_image(){
#Global ENV VAR: AWS_DEFAULT_REGION #Global ENV VAR: REGISTRY_NAME
#Global ENV VAR: AWS_ECRWRITTER_ID #Global ENV VAR: GITLAB_CICD_REGISTRY_TOKEN
#Global ENV VAR: AWS_ECRWRITTER_SECRET
#Global ENV VAR: AWS_ECR_USER
#Global ENV VAR: AWS_ECR_REPO
#Global ENV VAR: CONTAINER_NAME #Global ENV VAR: CONTAINER_NAME
mkdir .aws docker login $REGISTRY_SERVER -u "$REGISTRY_USER" -p "$GITLAB_CICD_REGISTRY_TOKEN"
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 set -x
docker push "$AWS_ECR_REPO/$CONTAINER_NAME":latest docker push "$REGISTRY_NAME/$CONTAINER_NAME":$CONTAINER_VERSION
set +x 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(){ function deploy_uservice(){
# CONTAINER NAME # CONTAINER NAME
# PUBLIC PORT # PUBLIC PORT
@@ -69,25 +47,23 @@ function deploy_uservice(){
ecr_repo=$4 ecr_repo=$4
docker stop $container_name && docker rm $container_name 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 docker run -p"$public_port:$private_port" -d --restart unless-stopped --name $container_name $ecr_repo/$container_name:$CONTAINER_VERSION
} }
function deploy_local(){ function deploy_local(){
# docker login --username $AWS_ECR_USER --password $DOCKER_PWD $AWS_ECR_REPO # docker login --username $AWS_ECR_USER --password $DOCKER_PWD $REGISTRY_NAME
deploy_uservice $CONTAINER_NAME $PUBLIC_PORT $PRIVATE_PORT $AWS_ECR_REPO deploy_uservice $CONTAINER_NAME $PUBLIC_PORT $PRIVATE_PORT $REGISTRY_NAME
} }
function deploy(){ function deploy(){
# Global Env Var: AWS_ECR_USER # Global ENV VAR: GITLAB_CICD_REGISTRY_TOKEN
# Global Env Var: AWS_ECR_REPO # Global Env Var: REGISTRY_NAME
# Global Env Var: REGISTRY_USER
# Global Env Var: CONTAINER_NAME # Global Env Var: CONTAINER_NAME
# Global Env Var: PUBLIC_PORT # Global Env Var: PUBLIC_PORT
# Global Env Var: PRIVATE_PORT # Global Env Var: PRIVATE_PORT
# Global Env Var: AWS_ECR_REPO
# Global Env Var: SYSTEM_HOSTNAME # Global Env Var: SYSTEM_HOSTNAME
prepare_deployment
set -x 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" ssh -i ~/.ssh/gitlab_runner gitlab-runner@$SYSTEM_HOSTNAME "docker login $REGISTRY_SERVER --username $REGISTRY_USER --password $GITLAB_CICD_REGISTRY_TOKEN $REGISTRY_NAME && ./deploy_uservice.sh $CONTAINER_NAME $PUBLIC_PORT $PRIVATE_PORT $REGISTRY_NAME && exit"
#deploy_local
set +x set +x
} }