From bd995d23a536620122f545adf591caf14803cf51 Mon Sep 17 00:00:00 2001 From: Brandon Clayton <bclayton@usgs.gov> Date: Thu, 19 Jan 2023 09:13:56 -0700 Subject: [PATCH] Add pipeline --- .gitlab-ci.yml | 142 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..564a2d68 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,142 @@ +variables: + CI_DEFAULT_BRANCH: legacy-main + CI_PROJECT_NAME: nshmp-haz-legacy + PRODUCTION_BRANCH: legacy-production + UPSTREAM_PATH: ghsc/nshmp/nshmp-haz + +# Do not run for merge requests +workflow: + rules: + - if: $CI_COMMIT_TAG + - if: $CI_COMMIT_BRANCH + +stages: + - build + +#### +# Environment Templates +#### + +## +# Rule for development environment +## +.development-env: &development-env + if: > + $CI_PROJECT_PATH != $UPSTREAM_PATH + || ( + $CI_PROJECT_PATH == $UPSTREAM_PATH + && ( + $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH + && $CI_COMMIT_BRANCH != $PRODUCTION_BRANCH + ) + ) + variables: + ENVIRONMENT: development + +## +# Rule for staging environment +## +.staging-env: &staging-env + if: > + $CI_PROJECT_PATH == $UPSTREAM_PATH + && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + variables: + ENVIRONMENT: staging + +## +# Rule for production envrionment +## +.production-env: &production-env + if: > + $CI_PROJECT_PATH == $UPSTREAM_PATH + && $CI_COMMIT_BRANCH == $PRODUCTION_BRANCH + variables: + ENVIRONMENT: production + +#### +# Docker Templates +#### + +## +# Docker in Docker +## +.dind: + image: ${DEVOPS_REGISTRY}docker:19.03-git + services: + - alias: docker + name: ${DEVOPS_REGISTRY}docker:19.03-dind + variables: + DOCKER_DRIVER: overlay2 + +## +# Build Docker image and push to registry. +# +# Pushes to internal registry for all branches and Docker registry +# on default upstream and production upstream branches. +## +.docker-build: + extends: + - .dind + needs: [] + rules: + - *development-env + - *staging-env + - *production-env + script: + - BUILD_ARGS=''; + - | + for arg in ${DOCKER_BUILD_ARGS}; do + BUILD_ARGS="${BUILD_ARGS} --build-arg ${arg}"; + done + - env_image_name="${CODE_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${ENVIRONMENT}-latest"; + - latest_image_name="${CODE_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:latest"; + - sha_image_name="${CODE_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${IMAGE_TAG}"; + - | + docker build \ + ${BUILD_ARGS} \ + --pull \ + --tag "${env_image_name}" \ + --file "${DOCKERFILE}" \ + .; + - docker push "${env_image_name}"; + - | + docker tag "${env_image_name}" "${sha_image_name}"; + docker push "${sha_image_name}"; + - | + docker_latest_image="usgs/${CI_PROJECT_NAME}:latest"; + docker_env_image="usgs/${CI_PROJECT_NAME}:${ENVIRONMENT}-latest"; + + docker tag "${env_image_name}" "${docker_env_image}"; + docker push "${docker_env_image}"; + + if [[ "${ENVIRONMENT}" != "development" ]]; then + docker tag "${env_image_name}" "${latest_image_name}"; + docker push "${latest_image_name}"; + + docker tag "${env_image_name}" "${docker_latest_image}"; + docker push "${docker_latest_image}"; + fi + - | + printf " + -------- + Image Name - %s:%s + -------- + " "${CI_PROJECT_NAME}" "${IMAGE_TAG}"; + stage: build + tags: + - build + variables: + +#### +# Stage: build +#### + +Build Image: + extends: + - .docker-build + variables: + DOCKER_BUILD_ARGS: | + BUILD_IMAGE=${DEVOPS_REGISTRY}usgs/amazoncorretto:8 + FROM_IMAGE=${DEVOPS_REGISTRY}usgs/amazoncorretto:8 + DOCKERFILE: Dockerfile + IMAGE_TAG: ${ENVIRONMENT}-${CI_COMMIT_SHORT_SHA} -- GitLab