Files
outbo-2-stgclone/.gitlab-ci.yml
T
2024-11-27 13:18:16 +01:00

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