From 017c3315eb5e4a7cf08b188826fd6ca347f3d665 Mon Sep 17 00:00:00 2001 From: bclayton-usgs <bclayton@usgs.gov> Date: Wed, 4 Mar 2020 09:10:17 -0700 Subject: [PATCH] Deploy to Docker swarm --- .gitlab-ci.yml | 142 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 109 insertions(+), 33 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0a3f2b5..828c7d8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,6 @@ variables: + CI_REGISTRY: ${CODE_REGISTRY} + CI_REGISTRY_IMAGE: ${CODE_REGISTRY_IMAGE} DOCKER_DIR: docker-images DOCKER_TAR: ${DOCKER_DIR}/app.tar FAULT_SECTIONS: nshm-fault-sections @@ -9,31 +11,39 @@ variables: NSHMP_LIB: nshmp-lib NSHMP_LIB_GIT: https://gitlab-ci-token:${CI_JOB_TOKEN}@code.usgs.gov/ghsc/nshmp/${NSHMP_LIB}.git REPORTS_DIR: build/reports + # Static data in AWS S3 + DATA_CONUS_2018A: conus-2018a stages: - test - publish + - deploy #### # Templates: -# - nshmp-lib: Download nshmp-lib repo # - fault-sections: Download nshm-fault-sections repo. Required for nshmp-lib tests. -# - adjust-image-names: Update container image names +# - install-aws: Install aws in a Alpine environment +# - nshmp-lib: Download nshmp-lib repo +# - static-data: Array of all static data in AWS s3 #### .templates: - nshmp-lib: &nshmp-lib |- - cd ..; - rm -rf ${NSHMP_LIB}; - git clone ${NSHMP_LIB_GIT}; - cd ${CI_PROJECT_NAME}; fault-sections: &fault-sections |- cd ..; rm -rf ${FAULT_SECTIONS}; git clone ${FAULT_SECTIONS_GIT}; cd ${CI_PROJECT_NAME} - adjust-image-names: &adjust-image-names - IMAGE_NAME=${IMAGE_NAME/:master/:latest}; - INTERNAL_IMAGE_NAME=${CI_REGISTRY_IMAGE}/${IMAGE_NAME}; + install-aws: &install-aws |- + apk -v --update add --no-cache python py-pip groff; + pip install awscli; + nshmp-lib: &nshmp-lib |- + cd ..; + rm -rf ${NSHMP_LIB}; + git clone ${NSHMP_LIB_GIT}; + cd ${CI_PROJECT_NAME}; + static-data: &static-data |- + STATIC_DATA=" + ${DATA_CONUS_2018A} + "; #### # Template: Devlopment tags @@ -55,6 +65,53 @@ stages: before_script: - *nshmp-lib +#### +# Template: Deploy to Docker Swarm +# Globals: +# CODE_REGISTRY: Path to container registry +# GENERIC_SWARM_DEPLOY_REPO: Path to swarm deploy container +# CI_REGISTRY_IMAGE: Path to container image +#### +.deploy: + cache: {} + image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest + dependencies: + before_script: + - | + for data in ${STATIC_DATA}; do + IMAGE_NAME=${IMAGE_NAME/:*/:${data}}; + INTERNAL_IMAGE_NAME=${CI_REGISTRY_IMAGE}/${IMAGE_NAME}; + docker pull ${INTERNAL_IMAGE_NAME}; + script: + - git clone ${GENERIC_SWARM_DEPLOY_REPO} generic-deploy + - export REGISTRY=${CI_REGISTRY_IMAGE} + - cp -v + generic-deploy/default.config.sh + generic-deploy/default.funcs.sh + generic-deploy/deploy.sh + scripts/. + - scripts/deploy.sh + stage: deploy + tags: + - deploy + - swarm + variables: + APP_NAME: nshmp-netcdf + STACK_NAME: nshmp-netcdf + +.staging: + only: + - master@ghsc/nshmp/nshmp-netcdf + - tags@ghsc/nshmp/nshmp-netcdf + +.staging01: + tags: + - staging01 + +.staging02: + tags: + - staging02 + #### # Build jar file. # Globals: @@ -115,53 +172,72 @@ Unit Tests: #### # Build Docker image. # Globals: -# DOCKER_DIR - The directory to put Docker image -# DOCKER_TAR - The path to the Docker image tar # IMAGE_NAME - Docker image name #### Build Image: stage: test - image: docker:stable + image: docker:stable-git extends: .dev-tags only: - merge_request - master@ghsc/nshmp/nshmp-netcdf - tags@ghsc/nshmp/nshmp-netcdf before_script: - - *adjust-image-names - - rm -rf ${DOCKER_DIR} - - apk add git; - *nshmp-lib - mv ../${NSHMP_LIB} . script: - - mkdir ${DOCKER_DIR} - docker build -t local/${IMAGE_NAME} . - - docker save local/${IMAGE_NAME} > ${DOCKER_TAR} - artifacts: - paths: - - ${DOCKER_DIR} #### -# Publish Docker image to GitLab registry. +# Build and publish Docker images with data from AWS S3. # Globals: -# DOCKER_TAR - The path to the Docker image tar -# INTERNAL_IMAGE_NAME - GitLab registry Docker image name -# IMAGE_NAME - Docker image nam +# IMAGE_NAME - Docker image name #### -Publish Image: +Build/Publish Data Images: stage: publish - image: docker:stable + image: docker:stable-git extends: .dev-tags only: - master@ghsc/nshmp/nshmp-netcdf - tags@ghsc/nshmp/nshmp-netcdf before_script: - - *adjust-image-names + - *install-aws + - *nshmp-lib + - *static-data + - mv ../${NSHMP_LIB} . + - mkdir ${DOCKER_DIR} script: - echo "${CHS_PASSWORD}" | docker login --username ${CHS_USERNAME} --password-stdin ${CODE_REGISTRY} - - docker load -i ${DOCKER_TAR} - - docker tag local/${IMAGE_NAME} ${INTERNAL_IMAGE_NAME} - - docker push ${INTERNAL_IMAGE_NAME} - - docker image rm local/${IMAGE_NAME} - - docker image rm ${INTERNAL_IMAGE_NAME} + - | + for data in ${STATIC_DATA}; do + IMAGE_NAME=${IMAGE_NAME/:*/:${data}}; + INTERNAL_IMAGE_NAME=${CI_REGISTRY_IMAGE}/${IMAGE_NAME}; + aws s3 cp \ + s3://nshmp-hazard-curves/${data}.nc \ + DATA/${data}.nc; + docker build \ + --build-arg netcdf_file="${data}.nc" \ + -t ${INTERNAL_IMAGE_NAME} .; + rm DATA/${data}.nc + docker push ${INTERNAL_IMAGE_NAME}; + docker image rm ${INTERNAL_IMAGE_NAME}; + done - rm -rf /root/.docker/config.json + +#### +# Deploy to stage01 +#### +Staging 01: + extends: + - .deploy + - .staging + - .staging01 + +#### +# Deploy to stage02 +#### +Staging 02: + extends: + - .deploy + - .staging + - .staging02 -- GitLab