Loading .gitlab-ci.yml +57 −142 Original line number Diff line number Diff line include: - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/packaging.yml' - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/deployment.yml' - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/maintenance.yml' stages: - package - test-package - deploy - maintenance services: - docker:dind variables: DOCKER_DRIVER: overlay2 POSTGRESQL_IMAGE_NAME: ${CI_REGISTRY_IMAGE} POSTGRESQL_IMAGE_TAG: ${CI_COMMIT_SHA} BACKUP_IMAGE_NAME: registry.gitlab.com/redmic-project/postgres/backup-db BACKUP_IMAGE_TAG: latest STACK: postgres docker-build-commit-non-master-branches: stage: package image: docker:stable only: - branches except: - master - schedules .deploy: script: - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} - docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}-latest . - docker push ${CI_REGISTRY_IMAGE} docker-build-commit-master-branch: stage: package image: docker:stable only: - master except: - schedules script: - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} - docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} -t ${CI_REGISTRY_IMAGE}:latest . - docker push ${CI_REGISTRY_IMAGE} docker-tag-already-built-image: stage: package image: docker:stable only: - tags except: - schedules script: - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} - docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} - docker push ${CI_REGISTRY_IMAGE} container-scanning: stage: test-package image: docker:stable allow_failure: true only: - branches except: - schedules script: - docker run -d --name db arminc/clair-db:latest - docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.1 - apk add -U wget ca-certificates - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} - docker pull ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} - wget https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64 - mv clair-scanner_linux_amd64 clair-scanner - chmod +x clair-scanner - touch clair-whitelist.yml - create-nets.sh postgres-net - > ./clair-scanner -c http://docker:6060 --ip $(hostname -i) -r gl-sast-container-report.json -l clair.log -w clair-whitelist.yml ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} || true artifacts: paths: [gl-sast-container-report.json] deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} AWS_REGION=${AWS_REGION} deploy-supporting-branch: stage: deploy image: ${DOCKER_DEPLOY_IMAGE_NAME}:${DOCKER_DEPLOY_IMAGE_TAG} .deploy-development: variables: SSH_REMOTE: ${DEV_SSH_REMOTE} SERVICES_TO_CHECK: postgres_${CI_PROJECT_NAME} IMAGE_NAME: ${POSTGRESQL_IMAGE_NAME} IMAGE_TAG: ${POSTGRESQL_IMAGE_TAG} COMPOSE_FILE: docker-compose.postgresql.tmpl.yml:docker-compose.postgresql.dev.yml script: - create-nets.sh postgres-net - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} COMPOSE_FILE: docker-compose.${CI_PROJECT_NAME}.tmpl.yml:docker-compose.${CI_PROJECT_NAME}.dev.yml environment: name: dev/postgresql only: - branches except: - master - schedules when: manual name: dev/${CI_PROJECT_NAME} deploy-pro: stage: deploy image: ${DOCKER_DEPLOY_IMAGE_NAME}:${DOCKER_DEPLOY_IMAGE_TAG} .deploy-production: variables: SSH_REMOTE: ${PRO_SSH_REMOTE} SERVICES_TO_CHECK: postgres_${CI_PROJECT_NAME} IMAGE_NAME: ${POSTGRESQL_IMAGE_NAME} IMAGE_TAG: ${POSTGRESQL_IMAGE_TAG} COMPOSE_FILE: docker-compose.postgresql.tmpl.yml:docker-compose.postgresql.prod.yml script: - create-nets.sh postgres-net - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} AWS_REGION=${AWS_REGION} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} COMPOSE_FILE: docker-compose.${CI_PROJECT_NAME}.tmpl.yml:docker-compose.${CI_PROJECT_NAME}.prod.yml environment: name: pro/postgresql only: - master except: - schedules when: manual name: pro/${CI_PROJECT_NAME} deploy-backup-supporting-branch: stage: deploy image: ${DOCKER_DEPLOY_IMAGE_NAME}:${DOCKER_DEPLOY_IMAGE_TAG} .deploy-backup: extends: .deploy variables: SSH_REMOTE: ${DEV_SSH_REMOTE} SERVICES_TO_CHECK: postgres_backup-db IMAGE_NAME: ${BACKUP_IMAGE_NAME} IMAGE_TAG: ${BACKUP_IMAGE_TAG} COMPOSE_FILE: docker-compose.backup-db.tmpl.yml:docker-compose.backup-db.dev.yml SERVICES_TO_CHECK: ${STACK}_backup-db IMAGE_NAME: ${POSTGRES_BACKUP_IMAGE_NAME} IMAGE_TAG: ${POSTGRES_BACKUP_IMAGE_TAG} script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} AWS_REGION=${AWS_REGION} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} POSTGRES_HOSTNAME=${POSTGRES_HOSTNAME} BUCKET_BACKUP_DB=${BUCKET_BACKUP_DB} AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} PUSHGATEWAY_HOST=${PUSHGATEWAY_HOST} PUSHGATEWAY_JOB=${PUSHGATEWAY_JOB} .deploy-backup-development: extends: .deploy-backup variables: SSH_REMOTE: ${DEV_SSH_REMOTE} COMPOSE_FILE: docker-compose.backup-db.tmpl.yml:docker-compose.backup-db.dev.yml environment: name: dev/backup-db only: - branches except: - master - schedules when: manual deploy-backup-pro: stage: deploy image: ${DOCKER_DEPLOY_IMAGE_NAME}:${DOCKER_DEPLOY_IMAGE_TAG} .deploy-backup-production: extends: .deploy-backup variables: SSH_REMOTE: ${PRO_SSH_REMOTE} SERVICES_TO_CHECK: postgres_backup-db IMAGE_NAME: ${BACKUP_IMAGE_NAME} IMAGE_TAG: ${BACKUP_IMAGE_TAG} COMPOSE_FILE: docker-compose.backup-db.tmpl.yml:docker-compose.backup-db.prod.yml script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} AWS_REGION=${AWS_REGION} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} POSTGRES_HOSTNAME=${POSTGRES_HOSTNAME} BUCKET_BACKUP_DB=${BUCKET_BACKUP_DB} AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} PUSHGATEWAY_HOST=${PUSHGATEWAY_HOST} PUSHGATEWAY_JOB=${PUSHGATEWAY_JOB} environment: name: pro/backup-db deploy-backup-support-branch-development: extends: .deploy-backup-development only: - branches except: - master - schedules deploy-backup-stable-branch-development: extends: .deploy-backup-development only: - master except: - schedules when: manual scheduled-backup-pro: stage: maintenance image: ${DOCKER_DEPLOY_IMAGE_NAME}:${DOCKER_DEPLOY_IMAGE_TAG} variables: SSH_REMOTE: ${PRO_SSH_REMOTE} SERVICE: postgres_backup-db script: - relaunch.sh deploy-backup-stable-branch-production: extends: .deploy-backup-production only: - master except: - schedules .scheduled-run: variables: SERVICE: ${STACK}_backup-db scheduled-run-development: script: ':' deploy/.env +1 −0 Original line number Diff line number Diff line POSTGRES_USER=postgres ROLE=master PGDATA=/var/lib/postgresql/data/db-files POSTGRES_INITDB_WALDIR=/postgresql/wal/wal-files Loading deploy/docker-compose.postgresql.tmpl.yml +1 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ services: image: ${IMAGE_NAME}:${IMAGE_TAG:-latest} environment: ROLE: POSTGRES_USER: POSTGRES_PASSWORD: PGDATA: POSTGRES_INITDB_WALDIR: Loading Loading
.gitlab-ci.yml +57 −142 Original line number Diff line number Diff line include: - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/packaging.yml' - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/deployment.yml' - project: 'redmic-project/gitlab-ci-templates' ref: master file: '/maintenance.yml' stages: - package - test-package - deploy - maintenance services: - docker:dind variables: DOCKER_DRIVER: overlay2 POSTGRESQL_IMAGE_NAME: ${CI_REGISTRY_IMAGE} POSTGRESQL_IMAGE_TAG: ${CI_COMMIT_SHA} BACKUP_IMAGE_NAME: registry.gitlab.com/redmic-project/postgres/backup-db BACKUP_IMAGE_TAG: latest STACK: postgres docker-build-commit-non-master-branches: stage: package image: docker:stable only: - branches except: - master - schedules .deploy: script: - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} - docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}-latest . - docker push ${CI_REGISTRY_IMAGE} docker-build-commit-master-branch: stage: package image: docker:stable only: - master except: - schedules script: - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} - docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} -t ${CI_REGISTRY_IMAGE}:latest . - docker push ${CI_REGISTRY_IMAGE} docker-tag-already-built-image: stage: package image: docker:stable only: - tags except: - schedules script: - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} - docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} - docker push ${CI_REGISTRY_IMAGE} container-scanning: stage: test-package image: docker:stable allow_failure: true only: - branches except: - schedules script: - docker run -d --name db arminc/clair-db:latest - docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.1 - apk add -U wget ca-certificates - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} - docker pull ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} - wget https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64 - mv clair-scanner_linux_amd64 clair-scanner - chmod +x clair-scanner - touch clair-whitelist.yml - create-nets.sh postgres-net - > ./clair-scanner -c http://docker:6060 --ip $(hostname -i) -r gl-sast-container-report.json -l clair.log -w clair-whitelist.yml ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} || true artifacts: paths: [gl-sast-container-report.json] deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} AWS_REGION=${AWS_REGION} deploy-supporting-branch: stage: deploy image: ${DOCKER_DEPLOY_IMAGE_NAME}:${DOCKER_DEPLOY_IMAGE_TAG} .deploy-development: variables: SSH_REMOTE: ${DEV_SSH_REMOTE} SERVICES_TO_CHECK: postgres_${CI_PROJECT_NAME} IMAGE_NAME: ${POSTGRESQL_IMAGE_NAME} IMAGE_TAG: ${POSTGRESQL_IMAGE_TAG} COMPOSE_FILE: docker-compose.postgresql.tmpl.yml:docker-compose.postgresql.dev.yml script: - create-nets.sh postgres-net - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} COMPOSE_FILE: docker-compose.${CI_PROJECT_NAME}.tmpl.yml:docker-compose.${CI_PROJECT_NAME}.dev.yml environment: name: dev/postgresql only: - branches except: - master - schedules when: manual name: dev/${CI_PROJECT_NAME} deploy-pro: stage: deploy image: ${DOCKER_DEPLOY_IMAGE_NAME}:${DOCKER_DEPLOY_IMAGE_TAG} .deploy-production: variables: SSH_REMOTE: ${PRO_SSH_REMOTE} SERVICES_TO_CHECK: postgres_${CI_PROJECT_NAME} IMAGE_NAME: ${POSTGRESQL_IMAGE_NAME} IMAGE_TAG: ${POSTGRESQL_IMAGE_TAG} COMPOSE_FILE: docker-compose.postgresql.tmpl.yml:docker-compose.postgresql.prod.yml script: - create-nets.sh postgres-net - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} AWS_REGION=${AWS_REGION} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} COMPOSE_FILE: docker-compose.${CI_PROJECT_NAME}.tmpl.yml:docker-compose.${CI_PROJECT_NAME}.prod.yml environment: name: pro/postgresql only: - master except: - schedules when: manual name: pro/${CI_PROJECT_NAME} deploy-backup-supporting-branch: stage: deploy image: ${DOCKER_DEPLOY_IMAGE_NAME}:${DOCKER_DEPLOY_IMAGE_TAG} .deploy-backup: extends: .deploy variables: SSH_REMOTE: ${DEV_SSH_REMOTE} SERVICES_TO_CHECK: postgres_backup-db IMAGE_NAME: ${BACKUP_IMAGE_NAME} IMAGE_TAG: ${BACKUP_IMAGE_TAG} COMPOSE_FILE: docker-compose.backup-db.tmpl.yml:docker-compose.backup-db.dev.yml SERVICES_TO_CHECK: ${STACK}_backup-db IMAGE_NAME: ${POSTGRES_BACKUP_IMAGE_NAME} IMAGE_TAG: ${POSTGRES_BACKUP_IMAGE_TAG} script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} AWS_REGION=${AWS_REGION} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} POSTGRES_HOSTNAME=${POSTGRES_HOSTNAME} BUCKET_BACKUP_DB=${BUCKET_BACKUP_DB} AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} PUSHGATEWAY_HOST=${PUSHGATEWAY_HOST} PUSHGATEWAY_JOB=${PUSHGATEWAY_JOB} .deploy-backup-development: extends: .deploy-backup variables: SSH_REMOTE: ${DEV_SSH_REMOTE} COMPOSE_FILE: docker-compose.backup-db.tmpl.yml:docker-compose.backup-db.dev.yml environment: name: dev/backup-db only: - branches except: - master - schedules when: manual deploy-backup-pro: stage: deploy image: ${DOCKER_DEPLOY_IMAGE_NAME}:${DOCKER_DEPLOY_IMAGE_TAG} .deploy-backup-production: extends: .deploy-backup variables: SSH_REMOTE: ${PRO_SSH_REMOTE} SERVICES_TO_CHECK: postgres_backup-db IMAGE_NAME: ${BACKUP_IMAGE_NAME} IMAGE_TAG: ${BACKUP_IMAGE_TAG} COMPOSE_FILE: docker-compose.backup-db.tmpl.yml:docker-compose.backup-db.prod.yml script: - > deploy.sh IMAGE_NAME=${IMAGE_NAME} IMAGE_TAG=${IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE} AWS_REGION=${AWS_REGION} POSTGRES_USER=${POSTGRES_USER} POSTGRES_PASSWORD=${POSTGRES_PASSWORD} POSTGRES_HOSTNAME=${POSTGRES_HOSTNAME} BUCKET_BACKUP_DB=${BUCKET_BACKUP_DB} AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} PUSHGATEWAY_HOST=${PUSHGATEWAY_HOST} PUSHGATEWAY_JOB=${PUSHGATEWAY_JOB} environment: name: pro/backup-db deploy-backup-support-branch-development: extends: .deploy-backup-development only: - branches except: - master - schedules deploy-backup-stable-branch-development: extends: .deploy-backup-development only: - master except: - schedules when: manual scheduled-backup-pro: stage: maintenance image: ${DOCKER_DEPLOY_IMAGE_NAME}:${DOCKER_DEPLOY_IMAGE_TAG} variables: SSH_REMOTE: ${PRO_SSH_REMOTE} SERVICE: postgres_backup-db script: - relaunch.sh deploy-backup-stable-branch-production: extends: .deploy-backup-production only: - master except: - schedules .scheduled-run: variables: SERVICE: ${STACK}_backup-db scheduled-run-development: script: ':'
deploy/.env +1 −0 Original line number Diff line number Diff line POSTGRES_USER=postgres ROLE=master PGDATA=/var/lib/postgresql/data/db-files POSTGRES_INITDB_WALDIR=/postgresql/wal/wal-files Loading
deploy/docker-compose.postgresql.tmpl.yml +1 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ services: image: ${IMAGE_NAME}:${IMAGE_TAG:-latest} environment: ROLE: POSTGRES_USER: POSTGRES_PASSWORD: PGDATA: POSTGRES_INITDB_WALDIR: Loading