Skip to content
Snippets Groups Projects
buildspec.yaml 5.43 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Copyright © 2020 Amazon Web Services
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    # https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html
    
    # https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
    version: 0.2
    
    
    env:
      secrets-manager:
        DOCKER_USERNAME: /osdu/devops/docker_credentials:username
        DOCKER_PASSWORD: /osdu/devops/docker_credentials:password
    
        SONAR_USERNAME: /osdu/devops/sonar_credentials:username
        SONAR_PASSWORD: /osdu/devops/sonar_credentials:password
      
      parameter-store:
        SONAR_URL: /osdu/devops/sonar_url
    
    phases:
      install:
        runtime-versions:
          java: corretto8
        commands:
    
    Sutton's avatar
    Sutton committed
          # fix error noted here: https://github.com/yarnpkg/yarn/issues/7866
          - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
    
          - if [ $(echo $CODEBUILD_SOURCE_VERSION | grep -c  ^refs/heads.*) -eq 1 ]; then echo "Branch name found"; else echo "This build only supports branch builds" && exit 1; fi
    
          - apt-get update -y -qq > /dev/null
          - apt-get install -y maven -qq >/dev/null
    
          - java -version
          - mvn -version
          - mkdir -p /root/.m2
          - cp ./provider/notification-aws/maven/settings.xml /root/.m2/settings.xml # copy the AWS-specific settings.xml to the CodeBuild instance's .m2 folder
    
          - wget https://github.com/mikefarah/yq/releases/download/v4.27.2/yq_linux_amd64 -q -O /usr/bin/yq && chmod +x /usr/bin/yq
    
          - export AWS_ACCOUNT_ID=`aws sts get-caller-identity | grep Account | cut -d':' -f 2 | cut -d'"' -f 2`
          - export AWS_OSDU_DEV_MAVEN_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain $AWS_OSDU_DEV_MAVEN_DOMAIN --domain-owner $AWS_ACCOUNT_ID --query authorizationToken --output text`
      pre_build:
        commands:
          - echo "Logging in to Amazon ECR..."
          - $(aws ecr get-login --no-include-email --region $AWS_REGION) # authenticate with ECR via the AWS CLI
      build:
        commands:
          - export REPO_NAME=${PWD##*/}
          - export OUTPUT_DIR="dist"
          - export BRANCH_NAME=`echo ${CODEBUILD_SOURCE_VERSION} | awk '{gsub("refs/heads/","");gsub("\\.","-");gsub("[[:space:]]","-")}1' | sed 's/\//-/g' | awk '{print tolower($0)}'`
          - export ECR_TAG=`echo build.${BRANCH_NAME}.${CODEBUILD_BUILD_NUMBER}.${CODEBUILD_RESOLVED_SOURCE_VERSION} | cut -c 1-120`
          - export ECR_IMAGE=${ECR_REGISTRY}:${ECR_TAG}
          - export ECR_IMAGE_BRANCH_LATEST=${ECR_REGISTRY}:${BRANCH_NAME}
          - export INTEGRATION_TEST_OUTPUT=${OUTPUT_DIR}/testing/integration
          - export INTEGRATION_TEST_OUTPUT_BIN=${INTEGRATION_TEST_OUTPUT}/bin
          - mkdir -p ${OUTPUT_DIR}/bin
          - mkdir -p ${OUTPUT_DIR}/testing && mkdir -p ${INTEGRATION_TEST_OUTPUT}  && mkdir -p ${INTEGRATION_TEST_OUTPUT}/bin
          - echo "Placeholder" >> ${OUTPUT_DIR}/build-info.json # touched so that the output directory has some content incase the build fails so that testing reports are uploaded
    
          - pom_version=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
          - export VERSION=${pom_version%-*}
    
          - printenv
    
          - echo "Building primary service assemblies..."
    
          - mvn -ntp -B test install sonar:sonar -pl .,notification-core,provider/notification-aws -Ddeployment.environment=prod -Dsonar.login=${SONAR_USERNAME} -Dsonar.password=${SONAR_PASSWORD} -Dsonar.branch.name=${BRANCH_NAME} 
    
          - echo "Building integration testing assemblies and gathering artifacts..."
          - ./testing/notification-test-aws/build-aws/prepare-dist.sh
    
          - yq -i '.version = strenv(VERSION)' devops/aws/chart/Chart.yaml
    
          - echo "--Copying Helm Charts to ${OUTPUT_DIR:-dist}--"
          - rsync -r devops/aws/* "${OUTPUT_DIR:-dist}"
    
    
          - echo "Logging into Docker Hub..."
          - docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD}
    
    
          - echo "Building docker image..."
          - docker build -f provider/notification-aws/build-aws/Dockerfile -t ${ECR_IMAGE} .
          - docker tag  ${ECR_IMAGE} ${ECR_IMAGE_BRANCH_LATEST}
          - echo "Pushing docker image..."
          - docker push ${ECR_IMAGE}
          - docker push ${ECR_IMAGE_BRANCH_LATEST}
    
          - echo "Generate build-info.json"
          - |
            python provider/notification-aws/build-aws/build-info.py --branch ${CODEBUILD_SOURCE_VERSION} --commit ${CODEBUILD_RESOLVED_SOURCE_VERSION} \
              --buildid ${CODEBUILD_BUILD_ID} --buildnumber ${CODEBUILD_BUILD_NUMBER} --reponame ${REPO_NAME} --outdir ${OUTPUT_DIR} \
              --artifact ${ECR_IMAGE}
    
      post_build:
        commands:
          - cp provider/notification-aws/target/dependency-check-report.html ${OUTPUT_DIR}
    
    reports:
      SurefireReports: # CodeBuild will create a report group called "SurefireReports".
        files: #Store all of the files
          - "notification-core/target/surefire-reports/**/*"
          - "provider/notification-aws/target/surefire-reports/**/*"
        base-directory: "." # Location of the reports
    artifacts:
      files:
        - "**/*"
      base-directory: "dist"
      name: ${REPO_NAME}_${BRANCH_NAME}_$(date +%F)_${CODEBUILD_BUILD_NUMBER}.zip
    cache:
      paths:
        - "/root/.m2/**/*"