cloudbuild.yaml (109 lines of code) (raw):

# Copyright 2023 Google LLC # # 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. # timeout needs to be longer than the total run time, with some padding to allow # enough time to gracefully tear down resources. Otherwise if Cloud Build aborts # a build in the middle of Packer or Terraform GCP resources will be left behind. timeout: 18000s # 5h substitutions: _REGION: ${LOCATION} _ZONE: ${LOCATION}-a _NETWORK: projects/${PROJECT_ID}/global/networks/default _SUBNETWORK: projects/${PROJECT_ID}/regions/${_REGION}/subnetworks/default _WORKER_POOL: "" # This is to support running the various tests (e.g. smoke tests) with an # existing image. Useful when developing the tests themselves. # At the moment the image build step is unconditional, so you'll need to # comment out the image build step while developing tests. _IMAGE_NAME: nfs-test-${BUILD_ID} options: dynamicSubstitutions: true pool: name: ${_WORKER_POOL} env: - CI=cloudbuild - PROJECT_ID=${PROJECT_ID} - REGION=${_REGION} - ZONE=${_ZONE} - NETWORK=${_NETWORK} - SUBNETWORK=${_SUBNETWORK} - BUILD_ID=${BUILD_ID} - IMAGE_NAME=${_IMAGE_NAME} steps: - name: golang:1.20 id: filter-exports:test dir: image/resources/filter-exports script: make test waitFor: ['-'] timeout: 1200s # 20m - name: golang:1.20 id: knfsd-agent:test dir: image/resources/knfsd-agent script: make test waitFor: ['-'] timeout: 1200s # 20m - name: golang:1.20 id: knfsd-metrics-agent:test dir: image/resources/knfsd-metrics-agent script: make test waitFor: ['-'] timeout: 1200s # 20m - name: golang:1.20 id: netapp-exports:test dir: image/resources/netapp-exports script: make test waitFor: ['-'] timeout: 1200s # 20m - name: golang:1.20 id: mig-scaler:test dir: tools/mig-scaler script: make test waitFor: ['-'] timeout: 1200s # 20m - name: gcr.io/cloud-builders/docker id: knfsd-fsidd:database-up dir: image/resources/knfsd-fsidd script: ./test.sh up waitFor: ['-'] timeout: 1200s # 20m - name: golang:1.20 id: knfsd-fsidd:test dir: image/resources/knfsd-fsidd script: ./test.sh run waitFor: ['knfsd-fsidd:database-up'] timeout: 1200s # 20m - name: gcr.io/cloud-builders/docker id: knfsd-fsidd:database-down dir: image/resources/knfsd-fsidd script: ./test.sh down waitFor: ['knfsd-fsidd:test'] timeout: 1200s # 20m # For a production build you would want to set an image_family, and use a more # readable image_name (if you leave image_name blank packer will default it to # "{image_family}-{timestamp}"). # Using BUILD_ID for test images to easily associate a test image with a # specific build. Though this isn't very useful in normal use as BUILD_ID is # just a random UUID. # Not using an image_family for the test builds, as you wouldn't want to # deploy the latest test build. It might be the latest main or the latest pull # request, who knows? # If you wanted to run these tests yourself as part of CI/CD before releasing # an image for general use, to avoid building the image twice, once the tests # are complete you could copy the image to a proper image_family and more # usable name (such as using a timestamp or version tag). - name: hashicorp/packer:1.9 id: knfsd-image:build script: | packer init image && packer build \ -var-file=image/cloudbuild.pkrvars.hcl \ -var project=${PROJECT_ID} \ -var zone=${ZONE} \ -var build_instance_name=nfs-build-${BUILD_ID} \ -var image_family="" \ -var image_name=${IMAGE_NAME} \ -var subnetwork=${SUBNETWORK} \ image timeout: 7200s # 2h - name: ${_DOCKER_REPOSITORY}/knfsd-terratest:1.0 id: knfsd-image:test dir: image/smoke-tests script: make test env: - TF_VAR_project=${PROJECT_ID} - TF_VAR_region=${_REGION} - TF_VAR_zone=${_ZONE} - TF_VAR_network=${_NETWORK} - TF_VAR_subnetwork=${_SUBNETWORK} - TF_VAR_proxy_image=${_IMAGE_NAME} timeout: 3600s # 1h - name: ${_DOCKER_REPOSITORY}/knfsd-terratest:1.0 id: examples:tests dir: testing/examples script: make test env: - TF_VAR_project=${PROJECT_ID} - TF_VAR_region=${_REGION} - TF_VAR_zone=${_ZONE} - TF_VAR_network=${_NETWORK} - TF_VAR_subnetwork=${_SUBNETWORK} - TF_VAR_proxy_image=${_IMAGE_NAME} - TF_VAR_proxy_service_account=${_PROXY_SERVICE_ACCOUNT} timeout: 3600s # 1h