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

# This cloudbuild.yaml config file is triggered in two contexts: # # # Trigger #1: Before master merge # # GoogleCloudPlatform/marketplace-k8s-app-tools push to any branch # https://console.cloud.google.com/cloud-build/triggers?project=marketplace-k8s-app-tools # # This build trigger asserts the invariant that the source code can # be built and pushed into a repository. Its success blocks pull # request. gcr.io/marketplace-k8s-app-tools read access restricted. # # # Trigger #2: After master merge # # GoogleCloudPlatform/marketplace-k8s-app-tools push to master branch # https://console.cloud.google.com/cloud-build/triggers?project=cloud-marketplace-tools # # This build trigger asserts the invariant that each commit on the master # branch of GoogleCloudPlatform/marketplace-k8s-app-tools will be built # and tagged in gcr.io/cloud-marketplace-tools/k8s. # The following variables will be provided by Cloud Build. # # $PROJECT_ID: build.ProjectId # $BUILD_ID: build.BuildId # $COMMIT_SHA: build.SourceProvenance.ResolvedRepoSource.Revision.CommitSha # $SHORT_SHA : The first seven characters of COMMIT_SHA # $REPO_NAME: build.Source.RepoSource.RepoName (only available for triggered builds) # $BRANCH_NAME: build.Source.RepoSource.Revision.BranchName (only available for triggered builds) # $TAG_NAME: build.Source.RepoSource.Revision.TagName (only available for triggered builds) # $REVISION_ID: build.SourceProvenance.ResolvedRepoSource.Revision.CommitSha (only available for triggered builds) # # Source: https://cloud.google.com/cloud-build/docs/configuring-builds/substitute-variable-values timeout: 1200s # 20m options: machineType: 'N1_HIGHCPU_8' substitutions: _CLUSTER_LOCATION: null steps: - id: &BuildDev Build dev name: gcr.io/cloud-builders/docker waitFor: - '-' args: - build - --tag - gcr.io/$PROJECT_ID/k8s/dev:sha_$COMMIT_SHA - --tag - gcr.io/$PROJECT_ID/k8s/dev:sha_$SHORT_SHA - --file - marketplace/dev/Dockerfile - . - id: &BuildEnvsubst Build deployer_envsubst name: gcr.io/cloud-builders/docker waitFor: - '-' args: - build - --tag - gcr.io/$PROJECT_ID/k8s/deployer_envsubst:sha_$COMMIT_SHA - --tag - gcr.io/$PROJECT_ID/k8s/deployer_envsubst:sha_$SHORT_SHA - --file - marketplace/deployer_envsubst_base/Dockerfile - . - id: &BuildEnvsubstOnBuild Build deployer_envsubst onbuild name: gcr.io/cloud-builders/docker waitFor: - *BuildEnvsubst args: - build - --build-arg - FROM=gcr.io/$PROJECT_ID/k8s/deployer_envsubst:sha_$COMMIT_SHA - --tag - gcr.io/$PROJECT_ID/k8s/deployer_envsubst/onbuild:sha_$COMMIT_SHA - --tag - gcr.io/$PROJECT_ID/k8s/deployer_envsubst/onbuild:sha_$SHORT_SHA - --file - marketplace/deployer_envsubst_base/onbuild/Dockerfile - . - id: &BuildHelm Build deployer_helm name: gcr.io/cloud-builders/docker waitFor: - '-' args: - build - --tag - gcr.io/$PROJECT_ID/k8s/deployer_helm:sha_$COMMIT_SHA - --tag - gcr.io/$PROJECT_ID/k8s/deployer_helm:sha_$SHORT_SHA - --file - marketplace/deployer_helm_base/Dockerfile - . - id: &BuildHelmOnbuild Build deployer_helm onbuild name: gcr.io/cloud-builders/docker waitFor: - *BuildHelm args: - build - --build-arg - FROM=gcr.io/$PROJECT_ID/k8s/deployer_helm:sha_$COMMIT_SHA - --tag - gcr.io/$PROJECT_ID/k8s/deployer_helm/onbuild:sha_$COMMIT_SHA - --tag - gcr.io/$PROJECT_ID/k8s/deployer_helm/onbuild:sha_$SHORT_SHA - --file - marketplace/deployer_helm_base/onbuild/Dockerfile - . - id: &BuildMarketplaceIntegrationChart Build marketplace-integration Chart name: gcr.io/$PROJECT_ID/k8s/dev:sha_$COMMIT_SHA waitFor: - *BuildDev entrypoint: bash args: - -exc - | mkdir charts-tgz/ helm package marketplace/charts/marketplace-integration/ \ --version "0.0.0+sha.$COMMIT_SHA" \ --destination charts-tgz/ gsutil cp gs://$PROJECT_ID-charts/index.yaml index.yaml helm repo index --merge index.yaml charts-tgz/ - id: &InitializeCredentials Initialize Credentials name: gcr.io/cloud-builders/gcloud waitFor: - '-' entrypoint: bash args: - -exc - | # Use the 'c-$BUILD_ID' as the cluster name as it must start with a letter, # and have a max length of 40 chars (BUILD_ID is 37). Then install App CRD. gcloud container clusters create 'c-$BUILD_ID' --zone '${_CLUSTER_LOCATION}' --project '$PROJECT_ID' --labels=creation-timestamp=`date +%s` gcloud container clusters get-credentials 'c-$BUILD_ID' --zone '${_CLUSTER_LOCATION}' --project '$PROJECT_ID' kubectl apply -f "https://raw.githubusercontent.com/GoogleCloudPlatform/marketplace-k8s-app-tools/$COMMIT_SHA/crd/app-crd.yaml" mkdir -p /workspace/.kube/ cp -r $$HOME/.kube/ /workspace/ mkdir -p /workspace/.config/gcloud/ cp -r $$HOME/.config/gcloud/ /workspace/.config/ - id: &Verify Verify name: gcr.io/$PROJECT_ID/k8s/dev:sha_$COMMIT_SHA waitFor: - *InitializeCredentials - *BuildDev - *BuildEnvsubst - *BuildEnvsubstOnBuild - *BuildHelm - *BuildHelmOnbuild env: - 'KUBE_CONFIG=/workspace/.kube' - 'GCLOUD_CONFIG=/workspace/.config/gcloud' - 'VERIFICATION_LOGS_PATH=/workspace/.mpdev_logs' # Use local Docker network named cloudbuild as described here: # https://cloud.google.com/cloud-build/docs/overview#build_configuration_and_build_steps - 'DOCKER_NETWORK=cloudbuild' - MARKETPLACE_TOOLS_TAG=testing-sha_$COMMIT_SHA args: - make - -j10 - --output-sync - tests/integration - id: Cleanup name: gcr.io/cloud-builders/gcloud waitFor: - *Verify entrypoint: bash args: - -exc - | gcloud container clusters delete 'c-$BUILD_ID' --zone '${_CLUSTER_LOCATION}' --project '$PROJECT_ID' --quiet images: - gcr.io/$PROJECT_ID/k8s/dev:sha_$COMMIT_SHA - gcr.io/$PROJECT_ID/k8s/dev:sha_$SHORT_SHA - gcr.io/$PROJECT_ID/k8s/deployer_envsubst:sha_$COMMIT_SHA - gcr.io/$PROJECT_ID/k8s/deployer_envsubst:sha_$SHORT_SHA - gcr.io/$PROJECT_ID/k8s/deployer_envsubst/onbuild:sha_$COMMIT_SHA - gcr.io/$PROJECT_ID/k8s/deployer_envsubst/onbuild:sha_$SHORT_SHA - gcr.io/$PROJECT_ID/k8s/deployer_helm:sha_$COMMIT_SHA - gcr.io/$PROJECT_ID/k8s/deployer_helm:sha_$SHORT_SHA - gcr.io/$PROJECT_ID/k8s/deployer_helm/onbuild:sha_$COMMIT_SHA - gcr.io/$PROJECT_ID/k8s/deployer_helm/onbuild:sha_$SHORT_SHA artifacts: objects: location: gs://$PROJECT_ID-charts/ paths: - charts-tgz/*