stages: - build - upload - deploy variables: PIPELINE_WORK_DIR_V1: "./v1" CONTAINER_NAME_V1: "eta-etaapi" PIPELINE_WORK_DIR_V2: "./v2" CONTAINER_NAME_V2: "eta-etaapiv2" PUBLIC_PORT_V1: 7001 PRIVATE_PORT_V1: 3000 PUBLIC_PORT_V2: 7002 PRIVATE_PORT_V2: 3000 .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: 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" <<: *generic_build_job build-v2-job: stage: build needs: [] variables: PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V2" CONTAINER_NAME: "$CONTAINER_NAME_V2" PUBLIC_PORT: "$PUBLIC_PORT_V2" PRIVATE_PORT: "$PRIVATE_PORT_V2" <<: *generic_build_job upload-v1-job: stage: upload needs: ["build-v1-job"] variables: PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V1" CONTAINER_NAME: "$CONTAINER_NAME_V1" PUBLIC_PORT: "$PUBLIC_PORT_V1" PRIVATE_PORT: "$PRIVATE_PORT_V1" <<: *generic_upload_job upload-v2-job: stage: upload needs: ["build-v2-job"] variables: PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V2" CONTAINER_NAME: "$CONTAINER_NAME_V2" PUBLIC_PORT: "$PUBLIC_PORT_V2" PRIVATE_PORT: "$PRIVATE_PORT_V2" <<: *generic_upload_job deploy-v1-job: stage: deploy needs: ["upload-v1-job"] variables: PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V1" CONTAINER_NAME: "$CONTAINER_NAME_V1" PUBLIC_PORT: "$PUBLIC_PORT_V1" PRIVATE_PORT: "$PRIVATE_PORT_V1" <<: *generic_deploy_job deploy-v2-job: stage: deploy needs: ["upload-v2-job"] variables: PIPELINE_WORK_DIR: "$PIPELINE_WORK_DIR_V2" CONTAINER_NAME: "$CONTAINER_NAME_V2" PUBLIC_PORT: "$PUBLIC_PORT_V2" PRIVATE_PORT: "$PRIVATE_PORT_V2" <<: *generic_deploy_job