stages: - docker-build - deploy build-web-release: stage: docker-build image: docker:latest only: - /^release/.*$/ variables: DOCKER_DRIVER: "overlay2" OUTBO_BACKEND_URL: "https://outbo-api.stage.ermlab.com" services: - docker:dind before_script: - docker version - docker info - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} ${CI_REGISTRY} script: - docker pull ${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_BEFORE_SHA} || true - docker pull ${CI_REGISTRY_IMAGE}/web:latest || true - docker build -f web.Dockerfile --build-arg outbo_env=staging --build-arg backend_url=https://outbo-api.stage.ermlab.com/ --cache-from ${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_BEFORE_SHA} --cache-from ${CI_REGISTRY_IMAGE}/web:latest -t ${CI_REGISTRY_IMAGE}/web:latest -t ${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_SHA} ./evg-outbo-web - docker push ${CI_REGISTRY_IMAGE}/web:latest - docker push ${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_SHA} after_script: - docker logout ${CI_REGISTRY} build-web-master: stage: docker-build image: docker:latest only: - master variables: DOCKER_DRIVER: "overlay2" services: - docker:dind before_script: - docker version - docker info - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} ${CI_REGISTRY} script: - docker pull ${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_BEFORE_SHA} || true - docker pull ${CI_REGISTRY_IMAGE}/web:latest || true - docker build --build-arg outbo_env=production --build-arg backend_url=https://api.outbo.pl/ -f web.Dockerfile --cache-from ${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_BEFORE_SHA} --cache-from ${CI_REGISTRY_IMAGE}/web:latest -t ${CI_REGISTRY_IMAGE}/web:latest -t ${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_SHA} ./evg-outbo-web - docker push ${CI_REGISTRY_IMAGE}/web:latest - docker push ${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_SHA} after_script: - docker logout ${CI_REGISTRY} build-api: stage: docker-build image: docker:latest only: - /^release/.*$/ - master variables: DOCKER_DRIVER: "overlay2" services: - docker:dind before_script: - docker version - docker info - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} ${CI_REGISTRY} script: - docker pull ${CI_REGISTRY_IMAGE}/api:${CI_COMMIT_BEFORE_SHA} || true - docker pull ${CI_REGISTRY_IMAGE}/api:latest || true - docker build -f api.Dockerfile --cache-from ${CI_REGISTRY_IMAGE}/api:${CI_COMMIT_BEFORE_SHA} --cache-from ${CI_REGISTRY_IMAGE}/api:latest -t ${CI_REGISTRY_IMAGE}/api:latest -t ${CI_REGISTRY_IMAGE}/api:${CI_COMMIT_SHA} ./evg-outbo-api - docker push ${CI_REGISTRY_IMAGE}/api:latest - docker push ${CI_REGISTRY_IMAGE}/api:${CI_COMMIT_SHA} after_script: - docker logout ${CI_REGISTRY} deploy-staging: stage: deploy image: kroniak/ssh-client only: - /^release/.*$/ services: - docker:dind before_script: - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config - echo "${STAGE_KEY}" > ~/.ssh/id_ed25519 - chmod 600 ~/.ssh/id_ed25519 - eval "$(ssh-agent -s)" - ssh-add ~/.ssh/id_ed25519 - ssh-keyscan -H ${STAGE_HOST} >> ~/.ssh/known_hosts script: - scp -r ./docker-compose.staging.yml ${STAGE_USER}@${STAGE_HOST}:~/docker-compose/evg-outbo/docker-compose.yml - > ssh ${STAGE_USER}@${STAGE_HOST} << EOF docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} cd ~/docker-compose/evg-outbo/ sed -i -e 's#__FRONTEND_IMAGE__#${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_SHA}#' docker-compose.yml sed -i -e 's#__BACKEND_IMAGE__#${CI_REGISTRY_IMAGE}/api:${CI_COMMIT_SHA}#' docker-compose.yml docker pull ${CI_REGISTRY_IMAGE}/api:${CI_COMMIT_SHA} docker pull ${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_SHA} docker-compose rm --force backend docker-compose rm --force frontend docker-compose up -d backend docker-compose up -d frontend EOF deploy-production: stage: deploy image: kroniak/ssh-client only: - master services: - docker:dind before_script: - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config - echo "${PROD_KEY}" > ~/.ssh/id_ed25519 - chmod 600 ~/.ssh/id_ed25519 - eval "$(ssh-agent -s)" - ssh-add ~/.ssh/id_ed25519 - ssh-keyscan -H ${PROD_HOST} >> ~/.ssh/known_hosts script: - scp -r ./docker-compose.prod.yml ${PROD_USER}@${PROD_HOST}:~/docker-compose.yml - > ssh ${PROD_USER}@${PROD_HOST} << EOF docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} sed -i -e 's#COMPOSE_BACKEND_IMAGE=.*#COMPOSE_BACKEND_IMAGE=${CI_REGISTRY_IMAGE}/api:${CI_COMMIT_SHA}#' .env sed -i -e 's#COMPOSE_FRONTEND_IMAGE=.*#COMPOSE_FRONTEND_IMAGE=${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_SHA}#' .env docker pull ${CI_REGISTRY_IMAGE}/web:${CI_COMMIT_SHA} docker pull ${CI_REGISTRY_IMAGE}/api:${CI_COMMIT_SHA} docker-compose rm --force backend docker-compose rm --force frontend docker-compose up -d backend docker-compose up -d frontend EOF