152 lines
5.1 KiB
YAML
Executable File
152 lines
5.1 KiB
YAML
Executable File
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
|