diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6212afa871c0eccd6590a14ecb0cf3fbbdb0a546..a1455086cecb275c5133ed093bd818b84b2e8f2f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,96 +1,60 @@ variables: - CI_REGISTRY: ${CODE_REGISTRY} - CI_REGISTRY_IMAGE: ${CODE_REGISTRY_IMAGE} - DOCKER_DIR: docker-images - DOCKER_TAR: ${DOCKER_DIR}/app.tar - GIT_NSHMP_PASSWORD: ${GITLAB_API_TOKEN} - GIT_NSHMP_USERNAME: ${GITLAB_USER_EMAIL} - IMAGE_NAME_HAZ: nshmp-haz:${CI_COMMIT_REF_SLUG} - IMAGE_NAME_WS: nshmp-haz-ws:${CI_COMMIT_REF_SLUG} JACOCO_HTML_DIR: build/reports/jacoco/test/html JUNIT_FILES: build/test-results/test/TEST-*.xml + GIT_NSHMP_USERNAME: ${GITLAB_USER_EMAIL} + GIT_NSHMP_PASSWORD: ${GITLAB_API_TOKEN} + +include: + - project: 'ghsc/hazdev/pipeline-build-template' + ref: '1.1.3' + file: 'templates/library.yml' stages: - - assemble - - test - - publish + - build - deploy -cache: - key: one-key-to-rule-them-all - paths: - - build - - .gradle - #### # Templates #### -.dev-tags: - tags: - - development - -.templates: - adjust-image-names-haz: &adjust-image-names-haz |- - DOCKERFILE="Dockerfile"; - IMAGE_NAME=${IMAGE_NAME_HAZ/:master/:latest}; - INTERNAL_IMAGE_NAME=${CI_REGISTRY_IMAGE}/${IMAGE_NAME_HAZ}; - adjust-image-names-ws: &adjust-image-names-ws |- - DOCKERFILE="ws.Dockerfile"; - IMAGE_NAME=${IMAGE_NAME_WS/:master/:latest}; - INTERNAL_IMAGE_NAME=${CI_REGISTRY_IMAGE}/${IMAGE_NAME_WS}; +.gradle: + extends: + - .tags::development + stage: build + image: ${DEVOPS_REGISTRY}usgs/java:11 .docker-build: - stage: test - image: docker:stable - extends: .dev-tags - only: - - branches - - master@ghsc/nshmp/nshmp-haz-v2 - - tags@ghsc/nshmp/nshmp-haz-v2 - script: - - apk add git - - mkdir ${DOCKER_DIR} - - | - docker build \ - --build-arg ci_job_token="${CI_JOB_TOKEN}" \ - --build-arg git_username="${GIT_NSHMP_USERNAME}" \ - --build-arg git_password="${GIT_NSHMP_PASSWORD}" \ - -f ${DOCKERFILE} \ - -t local/${IMAGE_NAME} .; - - docker save local/${IMAGE_NAME} > ${DOCKER_TAR} - artifacts: - paths: - - ${DOCKER_DIR} + extends: + - .build + variables: + DOCKER_BUILD_ARGS: | + BUILD_IMAGE=${DEVOPS_REGISTRY}usgs/java:11 + FROM_IMAGE=${DEVOPS_REGISTRY}usgs/java:11 + ci_job_token=${CI_JOB_TOKEN} + git_username=${GITLAB_USER_EMAIL} + git_password=${GITLAB_API_TOKEN} -.docker-publish: - stage: publish - image: docker:stable - extends: .dev-tags - only: - - master@ghsc/nshmp/nshmp-haz-v2 - - tags@ghsc/nshmp/nshmp-haz-v2 - 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} - - rm -rf /root/.docker/config.json +.templates: + # TODO: Remove tag "beta" when ready + adjust-ref: &adjust-ref | + if [[ \ + ${CI_COMMIT_REF_SLUG} == "master" || \ + ${CI_COMMIT_REF_SLUG} == "production" || \ + -n "${CI_COMMIT_TAG}" \ + ]]; then + CI_COMMIT_REF_SLUG="beta"; + else + CI_COMMIT_REF_SLUG="beta--${CI_COMMIT_REF_SLUG}" + fi .deploy: cache: {} image: ${CODE_REGISTRY}/ghsc/hazdev/cloud-formation/hazdev-build-runner:latest dependencies: - before_script: - - *adjust-image-names-ws - - docker pull ${INTERNAL_IMAGE_NAME} script: + - *adjust-ref - git clone ${GENERIC_SWARM_DEPLOY_REPO} generic-deploy - - export REGISTRY=${CI_REGISTRY_IMAGE} + - export REGISTRY=${CODE_REGISTRY_IMAGE} - cp -v generic-deploy/default.config.sh generic-deploy/default.funcs.sh @@ -104,11 +68,8 @@ cache: variables: APP_NAME: nshmp-haz STACK_NAME: nshmp-haz - retry: - max: 2 - when: 'always' -.staging: +.onprem-staging: only: - master@ghsc/nshmp/nshmp-haz-v2 - tags@ghsc/nshmp/nshmp-haz-v2 @@ -122,115 +83,75 @@ cache: - staging02 #### -# Stage: assemble +# Stage: build #### Build Project: - stage: assemble - image: gradle:jdk11 - extends: .dev-tags - only: - - branches - - master@ghsc/nshmp/nshmp-haz-v2 - - tags@ghsc/nshmp/nshmp-haz-v2 + extends: + - .gradle script: - - ./gradlew --build-cache --no-daemon assemble - retry: - max: 2 - when: 'always' - -#### -# Stage: Test -#### + - ./gradlew assemble Build Lambda: - stage: test - image: gradle:jdk11 - extends: .dev-tags - only: - - branches - - master@ghsc/nshmp/nshmp-haz-v2 - - tags@ghsc/nshmp/nshmp-haz-v2 + extends: + - .gradle script: - - ./gradlew --no-daemon assemble - - ./gradlew --no-daemon libs + - ./gradlew assemble + - ./gradlew libs artifacts: expire_in: 1 yr paths: - build/libs/nshmp-haz-v2.jar - build/libs/nshmp-haz-dependencies.zip - retry: - max: 2 - when: 'always' Unit Tests: - stage: test - image: gradle:jdk11 - extends: .dev-tags - only: - - branches - - master@ghsc/nshmp/nshmp-haz-v2 - - tags@ghsc/nshmp/nshmp-haz-v2 + extends: + - .gradle coverage: '/Total.*?([0-9]{1,3})%/' script: - - ./gradlew --no-daemon check + - ./gradlew check - cat ${JACOCO_HTML_DIR}/index.html artifacts: paths: - ${JACOCO_HTML_DIR} reports: junit: ${JUNIT_FILES} - retry: - max: 2 - when: 'always' Build Haz Image: - extends: .docker-build + extends: + - .docker-build before_script: - - *adjust-image-names-haz - retry: - max: 2 - when: 'always' + - apk add git + - *adjust-ref + variables: + CI_PROJECT_NAME: nshmp-haz Build WS Image: - extends: .docker-build + extends: + - .docker-build before_script: - - *adjust-image-names-ws - retry: - max: 2 - when: 'always' + - mv Dockerfile haz.Dockerfile + - mv ws.Dockerfile Dockerfile + - *adjust-ref + - apk add git + variables: + CI_PROJECT_NAME: nshmp-haz-ws #### # Stage: Publish #### -Publish Haz Image: - extends: .docker-publish - before_script: - - *adjust-image-names-haz - retry: - max: 2 - when: 'always' - -Publish WS Image: - extends: .docker-publish - before_script: - - *adjust-image-names-ws - retry: - max: 2 - when: 'always' - Maven: - image: gradle:jdk11 - stage: publish - extends: .dev-tags + extends: + .gradle + stage: deploy only: - tags@ghsc/nshmp/nshmp-ws script: - ./gradlew publish -P version=${CI_COMMIT_TAG} Trigger nshmp-deploy: - stage: publish + stage: deploy only: - master@ghsc/nshmp/nshmp-haz-v2 - tags@ghsc/nshmp/nshmp-haz-v2 diff --git a/Dockerfile b/Dockerfile index 652117b624689d9e2fd324dc892c633385061b3a..8fe300315d5f2fc1cd21dd23013a3af787d7c2cf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,23 +17,25 @@ # -t nshmp-haz . #### +ARG BUILD_IMAGE=usgs/java:11 +ARG FROM_IMAGE=usgs/java:11 + ARG project=nshmp-haz-v2 ARG builder_workdir=/app/${project} ARG libs_dir=${builder_workdir}/build/libs #### -# Builder image: Build jar and war file. +# Builder image: Build jar file. #### -FROM usgs/centos:8 as builder +FROM ${BUILD_IMAGE} as builder ARG builder_workdir ARG libs_dir ARG git_username ARG git_password ARG gitlab_token=null -ARG ci_job_token=nul +ARG ci_job_token=null -ENV LANG "en_US.UTF-8" ENV GIT_NSHMP_USERNAME ${git_username} ENV GIT_NSHMP_PASSWORD ${git_password} ENV GITLAB_TOKEN ${gitlab_token} @@ -43,15 +45,12 @@ WORKDIR ${builder_workdir} COPY . . -RUN yum install -y glibc-langpack-en java-11-openjdk-devel which git \ - && ./gradlew --no-daemon assemble - -RUN locale +RUN ./gradlew assemble #### -# Application image: Run jar or war file. +# Application image: Run jar file. #### -FROM usgs/centos:8 +FROM ${FROM_IMAGE} LABEL maintainer="Peter Powers <pmpowers@usgs.gov>, Brandon Clayton <bclayton@usgs.gov>" @@ -64,7 +63,6 @@ ENV CONFIG_FILE "" ENV DEBUG false ENV IML "" ENV JAVA_XMX "8g" -ENV LANG "en_US.UTF-8" ENV MODEL "" ENV MOUNT_MODEL false ENV NSHM_VERSION master @@ -79,8 +77,7 @@ WORKDIR /app COPY --from=builder ${libs_dir}/* ./ COPY scripts scripts -RUN yum update -y \ - && yum install -y jq git java-11-openjdk-headless +RUN yum install -y jq EXPOSE 8080 ENTRYPOINT [ "bash", "scripts/docker-entrypoint.sh" ] diff --git a/gradle/repositories.gradle b/gradle/repositories.gradle index 92d03c55e37ad77d05100c17ad6705d1b441f600..af7a2e257ba46a63e64e67c82c0b3e5e7d168701 100644 --- a/gradle/repositories.gradle +++ b/gradle/repositories.gradle @@ -30,14 +30,14 @@ repositories { maven { url "https://code.usgs.gov/api/v4/groups/160/-/packages/maven" name "GitLab" - if (System.getenv('CI_JOB_TOKEN')) { + if (System.getenv("CI_JOB_TOKEN") != "null") { credentials(HttpHeaderCredentials) { - name = 'Job-Token' + name = "Job-Token" value = System.getenv("CI_JOB_TOKEN") } } else { credentials(HttpHeaderCredentials) { - name = 'Private-Token' + name = "Private-Token" value = System.getenv("GITLAB_TOKEN") } } diff --git a/scripts/nshmp-haz.yml b/scripts/nshmp-haz.yml index 8b44c6c4e5f468b2eec3932d86784fa269be49cf..b1164d857ebb21d5cacd3aa85d823785317b9260 100644 --- a/scripts/nshmp-haz.yml +++ b/scripts/nshmp-haz.yml @@ -2,7 +2,7 @@ version: "3.7" # General deployment config x-app: &app - image: ${REGISTRY}/${IMAGE_NAME} + image: ${REGISTRY}/nshmp-haz-ws:${CI_COMMIT_REF_SLUG} deploy: restart_policy: condition: any diff --git a/ws.Dockerfile b/ws.Dockerfile index 085eb23bfeb5a389ec82a3f3fb565d743c1398b1..4d9afdad56cca2cd0b290849c055c7252f41dda4 100644 --- a/ws.Dockerfile +++ b/ws.Dockerfile @@ -6,18 +6,20 @@ # -f ws.Dockerfile # --build-arg gitlab_token=<git-api-token> # -t nshmp-haz-ws . - #### +ARG BUILD_IMAGE=usgs/java:11 +ARG FROM_IMAGE=usgs/java:11 + ARG project=nshmp-haz-v2 ARG builder_workdir=/app/${project} ARG libs_dir=${builder_workdir}/build/libs ARG jar_file=${libs_dir}/${project}.jar #### -# Builder image: Build jar and war file. +# Builder image: Build war file. #### -FROM usgs/centos:8 as builder +FROM ${BUILD_IMAGE} as builder ARG builder_workdir ARG libs_dir @@ -25,9 +27,8 @@ ARG jar_file ARG git_username ARG git_password ARG gitlab_token=null -ARG ci_job_token=nul +ARG ci_job_token=null -ENV LANG="en_US.UTF-8" ENV GIT_NSHMP_USERNAME ${git_username} ENV GIT_NSHMP_PASSWORD ${git_password} ENV GITLAB_TOKEN ${gitlab_token} @@ -36,18 +37,16 @@ ENV CI_JOB_TOKEN ${ci_job_token} WORKDIR ${builder_workdir} COPY . . -RUN yum install -y glibc-langpack-en java-11-openjdk-devel which git \ - && ./gradlew --no-daemon assemble + +RUN ./gradlew assemble #### -# Application image: Run jar or war file. +# Application image: Run war file. #### -FROM usgs/centos:8 +FROM ${FROM_IMAGE} LABEL maintainer="Peter Powers <pmpowers@usgs.gov>, Brandon Clayton <bclayton@usgs.gov>" -ENV LANG="en_US.UTF-8" - ARG libs_dir ARG builder_workdir ARG project @@ -61,8 +60,5 @@ WORKDIR /app COPY --from=builder ${libs_dir}/* ./ COPY scripts scripts -RUN yum update -y \ - && yum install -y git java-11-openjdk-headless - EXPOSE 8080 ENTRYPOINT [ "bash", "scripts/docker-entrypoint.ws.sh" ]