Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- stages:
- - build
- - feature
- - deploy
- - review
- variables:
- ENV_URL_DEVELOP: http://secret.ru/backend
- ENV_URL_STAGING: http://secret.ru/backend
- ENV_URL_MASTER: http://secret.ru/backend
- ENV_URL_FEATURE: http://secret.ru/feature/backend
- IMAGE: ${CI_REGISTRY_IMAGE}/${CI_COMMIT_REF_NAME}:${CI_PIPELINE_ID}
- DOCKERFILE: Dockerfile
- STACK_FILE: docker-stack.yml
- EXTERNAL_PORT: 8081
- INTERNAL_PORT: 8080
- SERVICE_NAME: utilities-backend_${CI_COMMIT_REF_NAME}
- DOCKER_HOST_DEVELOP: "secret01.ru secret02.ru secret03.ru"
- DOCKER_HOST_STAGING: "secret11.ru secret12.ru secret13.ru"
- DOCKER_HOST_MASTER: "secret21.ru secret22.ru secret23.ru"
- DOCKER_HOST_FEATURE: "secret-feature.ru"
- before_script:
- - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
- #----------BUILD-----------
- build:
- stage: build
- script:
- - docker build --no-cache --build-arg NAME_PROJECT=${CI_PROJECT_NAME} --pull --target app -t ${IMAGE} -f ${DOCKERFILE} .
- - docker push ${IMAGE}
- - docker image prune -f --filter "dangling=true" && docker container prune -f
- tags:
- - build
- #-----------SCRIPT DEPLOY---------
- .deploy-script: &deploy-script
- script:
- - if [ ${CI_COMMIT_REF_NAME} == "develop" ];
- then export ENV_URL=${ENV_URL_DEVELOP} DOCKER_HOST_TEMP=${DOCKER_HOST_DEVELOP};
- elif [ ${CI_COMMIT_REF_NAME} == "staging" ]; then export ENV_URL=${ENV_URL_STAGING} DOCKER_HOST_TEMP=${DOCKER_HOST_STAGING};
- elif [ ${CI_COMMIT_REF_NAME} == "master" ]; then export ENV_URL=${ENV_URL_MASTER} DOCKER_HOST_TEMP=${DOCKER_HOST_MASTER};
- else export EXTERNAL_PORT=$(( RANDOM % 1000 + 31000 )) ENV_URL=${ENV_URL_FEATURE} DOCKER_HOST_TEMP=${DOCKER_HOST_FEATURE} && echo -e "\n########################\n#\n# STAND URL $ENV_URL:$EXTERNAL_PORT\n#\n########################";
- fi;
- - mkdir -p ~/.docker && echo ${TLSCACERT} | base64 -d > ~/.docker/ca.pem && echo ${TLSCERT} | base64 -d > ~/.docker/cert.pem && echo ${TLSKEY} | base64 -d > ~/.docker/key.pem && export DOCKER_TLS_VERIFY=1
- - for host in ${DOCKER_HOST_TEMP};
- do export DOCKER_HOST=tcp://${host}:2376 &&
- if [ "$(docker ps -q -f name=${SERVICE_NAME})" ];
- then docker stop ${SERVICE_NAME} && docker rm ${SERVICE_NAME};
- elif [ "$(docker ps -aq -f name=${SERVICE_NAME})" ];
- then docker rm ${SERVICE_NAME};
- fi;
- docker run -ti -d --restart always -p ${EXTERNAL_PORT}:${INTERNAL_PORT} -e TZ=Europe/Moscow -e PGHOST=${PGHOST} -e PGPORT=${PGPORT} -e PGDATABASE=${PGDATABASE} -e PGUSERNAME=${PGUSERNAME} -e PGPASSWORD=${PGPASSWORD} -e NETPORT=${INTERNAL_PORT} --name ${SERVICE_NAME} ${IMAGE}; done;
- - sleep 15;
- - for host in ${DOCKER_HOST_TEMP};
- do export DOCKER_HOST=tcp://${host}:2376 &&
- if [[ $(docker inspect ${SERVICE_NAME} --format '{{ .State.Status}}') != "running" ]];
- then echo "CT is not Running!" && docker logs ${TEST_CT} && docker rm -f ${SERVICE_NAME} && exit 1; else echo "CT Running!";
- fi;
- done;
- - rm -rf ~/.docker && unset DOCKER_TLS_VERIFY DOCKER_HOST
- tags:
- - build
- .review-script: &review-script
- script:
- - mkdir -p ~/.docker && echo ${TLSCACERT} | base64 -d > ~/.docker/ca.pem && echo ${TLSCERT} | base64 -d > ~/.docker/cert.pem && echo ${TLSKEY} | base64 -d > ~/.docker/key.pem && DOCKER_TLS_VERIFY=1 DOCKER_HOST=${DOCKER_HOST_FEATURE} docker rm -f ${SERVICE_NAME}
- - rm -rf ~/.docker && unset DOCKER_TLS_VERIFY DOCKER_HOST
- #------------DEPLOY--------------
- deploy feature:
- stage: feature
- script:
- <<: *deploy-script
- environment:
- name: feature/${CI_COMMIT_REF_NAME}
- except:
- - develop
- - staging
- - master
- deploy develop:
- stage: deploy
- <<: *deploy-script
- environment:
- name: ${CI_COMMIT_REF_NAME}
- url: ${ENV_URL_DEVELOP}
- only:
- - develop
- deploy staging:
- stage: deploy
- <<: *deploy-script
- environment:
- name: ${CI_COMMIT_REF_NAME}
- url: ${ENV_URL_STAGING}
- only:
- - staging
- when: manual
- deploy production:
- stage: deploy
- <<: *deploy-script
- environment:
- name: ${CI_COMMIT_REF_NAME}
- url: ${ENV_URL_MASTER}
- only:
- - master
- when: manual
- #-------STOP FEATURE ENV-------
- stop_review:
- stage: review
- <<: *review-script
- when: manual
- except:
- - develop
- - staging
- - master
- environment:
- name: feature/${CI_BUILD_REF_NAME}
- action: stop
- tags:
- - build
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement