From 7efec5e4dd54279eca69df5d5dcb17930cfe7924 Mon Sep 17 00:00:00 2001 From: Josepablo C Date: Mon, 8 Sep 2025 20:31:16 -0600 Subject: [PATCH] feat: Adding dev/prod ci/cd with deploy using Dokploy registry --- .gitlab-ci.yml | 94 +++++++++++++++++++++++++------------- v1/scripts/ci_functions.sh | 41 ++++------------- 2 files changed, 70 insertions(+), 65 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fafadc6..13f0d1f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,58 +1,88 @@ stages: - build - upload + - deploy variables: - PIPELINE_WORK_DIR_V1: "./v1" - CONTAINER_NAME_V1: "etaapi" - PIPELINE_WORK_DIR_V2: "./v2" - CONTAINER_NAME_V2: "etaapi" - PUBLIC_PORT_V1: 7001 - PRIVATE_PORT_V1: 3000 - PUBLIC_PORT_V2: 7002 - PRIVATE_PORT_V2: 3000 + PIPELINE_WORK_DIR_PROD: "./v1" + PIPELINE_WORK_DIR_DEV: "./v1" + CONTAINER_NAME_PROD: "etaapi_prod" + CONTAINER_NAME_DEV: "etaapi_dev" .generic_build_job: &generic_build_job script: - cd $PIPELINE_WORK_DIR - . ./scripts/ci_functions.sh - build_docker $CONTAINER_NAME - only: - - master .generic_upload_job: &generic_upload_job script: - cd $PIPELINE_WORK_DIR - . ./scripts/ci_functions.sh - upload_image - only: - - master -.generic_deploy_job: &generic_deploy_job - script: - - cd $PIPELINE_WORK_DIR - - . ./scripts/ci_functions.sh - - deploy - only: - - master - - -build-v1-job: +build-prod-job: stage: build needs: [] variables: - PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V1" - CONTAINER_NAME: "$CONTAINER_NAME_V1" - PUBLIC_PORT: "$PUBLIC_PORT_V1" - PRIVATE_PORT: "$PRIVATE_PORT_V1" + PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_PROD" + CONTAINER_NAME: "$CONTAINER_NAME_PROD" + only: + - master <<: *generic_build_job -upload-v1-job: +upload-prod-job: stage: upload - needs: ["build-v1-job"] + needs: ["build-prod-job"] variables: - PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V1" - CONTAINER_NAME: "$CONTAINER_NAME_V1" - PUBLIC_PORT: "$PUBLIC_PORT_V1" - PRIVATE_PORT: "$PRIVATE_PORT_V1" + PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_PROD" + CONTAINER_NAME: "$CONTAINER_NAME_PROD" + only: + - master <<: *generic_upload_job + +deploy-prod-job: + stage: deploy + needs: ["upload-prod-job"] + variables: + PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_PROD" + CONTAINER_NAME: "$CONTAINER_NAME_PROD" + only: + - master + script: + - cd $PIPELINE_WORK_DIR + - . ./scripts/ci_functions.sh + - deploy_prod + +build-dev-job: + stage: build + needs: [] + variables: + PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_DEV" + CONTAINER_NAME: "$CONTAINER_NAME_DEV" + only: + - develop + <<: *generic_build_job + +upload-dev-job: + stage: upload + needs: ["build-dev-job"] + variables: + PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_DEV" + CONTAINER_NAME: "$CONTAINER_NAME_DEV" + only: + - develop + <<: *generic_upload_job + +deploy-dev-job: + stage: deploy + needs: ["upload-dev-job"] + variables: + PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_DEV" + CONTAINER_NAME: "$CONTAINER_NAME_DEV" + only: + - develop + script: + - cd $PIPELINE_WORK_DIR + - . ./scripts/ci_functions.sh + - deploy_dev diff --git a/v1/scripts/ci_functions.sh b/v1/scripts/ci_functions.sh index b68061e..8b649bb 100644 --- a/v1/scripts/ci_functions.sh +++ b/v1/scripts/ci_functions.sh @@ -33,39 +33,14 @@ function upload_image(){ set +x } -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:$CONTAINER_VERSION -} - -function deploy_local(){ - # docker login --username $AWS_ECR_USER --password $DOCKER_PWD $REGISTRY_NAME - deploy_uservice $CONTAINER_NAME $PUBLIC_PORT $PRIVATE_PORT $REGISTRY_NAME -} - -function deploy(){ - # Global ENV VAR: GITLAB_CICD_REGISTRY_TOKEN - # Global Env Var: REGISTRY_NAME - # Global Env Var: REGISTRY_USER - # Global Env Var: CONTAINER_NAME - # Global Env Var: PUBLIC_PORT - # Global Env Var: PRIVATE_PORT - # Global Env Var: SYSTEM_HOSTNAME +function deploy_prod(){ set -x - # 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 + echo "Not yet defined" + set +x +} + +function deploy_dev(){ + set -x + echo "Not yet defined" set +x }