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

# Copyright 2024 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 # # https://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. steps: # init_deployment_config.py leaves the validated config.json file in workspace/config so it's available for other build steps - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'init_deploy_config' waitFor: ['-'] script: | #!/usr/bin/env bash set -e # Save absolute config file path to .env file # that can be accessed by all Cloud Build steps since exported env # variables do not persist between steps. realpath "${_CONFIG_FILE}" > /workspace/config_file_full_path.env echo "Initial configuration ${_CONFIG_FILE}:" cat "${_CONFIG_FILE}" python3 src/common/init_deployment_config.py --config-file ${_CONFIG_FILE} \ --sub-validator "src/k9/src" \ --sub-validator "src/SAP/SAP_REPORTING" \ --sub-validator "src/SFDC/src" \ --sub-validator "src/marketing/src" \ --sub-validator "src/OracleEBS/src" echo "Processed configuration:" cat ${_CONFIG_FILE} echo -e "\n--------------------------------" - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'k9-pre' waitFor: ['init_deploy_config'] script: | #!/usr/bin/env bash export PYTHONPATH=${PYTHONPATH}:src/:. declare -a _WORKER_POOL_OPTIONS if [[ -n "${_WORKER_POOL_NAME}" ]]; then _WORKER_POOL_OPTIONS+=(--worker-pool-name "${_WORKER_POOL_NAME}") fi if [[ -n "${_CLOUD_BUILD_REGION}" ]]; then _WORKER_POOL_OPTIONS+=(--region "${_CLOUD_BUILD_REGION}") fi if [[ -n "${_BUILD_ACCOUNT}" ]]; then _WORKER_POOL_OPTIONS+=(--build-account "${_BUILD_ACCOUNT}") fi python3 src/k9/src/deploy_k9.py \ --config-file "${_CONFIG_FILE}" \ --stage pre \ --logs-bucket "${_GCS_BUCKET}" \ "${_WORKER_POOL_OPTIONS[@]}" - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'sap-test-harness' waitFor: ['init_deploy_config'] script: | #!/usr/bin/env bash set -e _DEPLOY_SAP_=$(jq -r ."deploySAP" ${_CONFIG_FILE}) _TEST_DATA_=$(jq -r ."testData" ${_CONFIG_FILE}) _SQL_FLAVOUR_=$(jq -r ."SAP.SQLFlavor" ${_CONFIG_FILE}) _SQL_FLAVOUR_UP_=$(echo ${_SQL_FLAVOUR_} | tr '[:lower:]' '[:upper:]') if [[ ${_NO_TEST_DATA} != "true" && ${_TEST_DATA_} == "true" && ${_DEPLOY_SAP_} == "true" && ${_SQL_FLAVOUR_} != "union" ]]; then python3 src/common/create_test_harness.py --workload "SAP" --dataset raw${_SQL_FLAVOUR_UP_} else echo "==Skipping Test Harness for SAP==" fi - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'sfdc-test-harness' waitFor: ['init_deploy_config'] script: | #!/usr/bin/env bash set -e _DEPLOY_SFDC_=$(jq -r ."deploySFDC" ${_CONFIG_FILE}) _TEST_DATA_=$(jq -r ."testData" ${_CONFIG_FILE}) if [[ ${_NO_TEST_DATA} != "true" && ${_TEST_DATA_} == "true" && ${_DEPLOY_SFDC_} == "true" ]]; then python3 src/common/create_test_harness.py --workload "SFDC" --dataset "raw" else echo "==Skipping Test Harness for SFDC==" fi - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'sap-cdc' waitFor: ['sap-test-harness', 'k9-pre'] script: | #!/usr/bin/env bash _DEPLOY_SAP_=$(jq -r ."deploySAP" ${_CONFIG_FILE}) _DEPLOY_CDC_=$(jq -r ."SAP.deployCDC" ${_CONFIG_FILE}) _SQL_FLAVOUR_=$(jq -r ."SAP.SQLFlavor" ${_CONFIG_FILE}) if [[ ${_DEPLOY_SAP_} == "true" && ${_SQL_FLAVOUR_} != "union" && ${_DEPLOY_CDC_} == "true" ]]; then cp -f ${_CONFIG_FILE} src/SAP/SAP_CDC/config/config.json gcloud builds submit ./src/SAP/SAP_CDC \ --config=./src/SAP/SAP_CDC/cloudbuild.cdc.yaml \ --substitutions=_GCS_BUCKET="${_GCS_BUCKET}",_WORKER_POOL_NAME="${_WORKER_POOL_NAME}",_CLOUD_BUILD_REGION="${_CLOUD_BUILD_REGION}",_BUILD_ACCOUNT="${_BUILD_ACCOUNT}" \ --region="${_CLOUD_BUILD_REGION}" else echo "==Skipping CDC for SAP==" fi - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'sap-reporting' waitFor: ['sap-cdc'] script: | #!/usr/bin/env bash _DEPLOY_SAP_=$(jq -r ."deploySAP" ${_CONFIG_FILE}) if [[ "${_DEPLOY_SAP_}" == "true" ]]; then cp -f "${_CONFIG_FILE}" src/SAP/SAP_REPORTING/config/config.json gcloud builds submit ./src/SAP/SAP_REPORTING \ --config=./src/SAP/SAP_REPORTING/cloudbuild.reporting.yaml \ --substitutions=_GCS_BUCKET="${_GCS_BUCKET}",_WORKER_POOL_NAME="${_WORKER_POOL_NAME}",_CLOUD_BUILD_REGION="${_CLOUD_BUILD_REGION}",_BUILD_ACCOUNT="${_BUILD_ACCOUNT}" \ --region="${_CLOUD_BUILD_REGION}" else echo "==Skipping Reporting for SAP==" fi - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'sfdc-deploy' waitFor: ['sfdc-test-harness', 'k9-pre'] script: | #!/usr/bin/env bash _DEPLOY_SFDC_="$(jq -r ."deploySFDC" "${_CONFIG_FILE}")" if [[ "${_DEPLOY_SFDC_}" == "true" ]]; then cp -f "${_CONFIG_FILE}" src/SFDC/config/config.json gcloud builds submit ./src/SFDC \ --config=./src/SFDC/cloudbuild.sfdc.yaml \ --substitutions=_GCS_BUCKET="${_GCS_BUCKET}",_WORKER_POOL_NAME="${_WORKER_POOL_NAME}",_CLOUD_BUILD_REGION="${_CLOUD_BUILD_REGION}",_BUILD_ACCOUNT="${_BUILD_ACCOUNT}" \ --region="${_CLOUD_BUILD_REGION}" else echo "==Skipping SFDC==" fi - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'marketing-test-harness' waitFor: ['init_deploy_config'] script: | #!/usr/bin/env bash set -e _DEPLOY_MARKETING_=$(jq -r ."deployMarketing" ${_CONFIG_FILE}) _TEST_DATA_=$(jq -r ."testData" ${_CONFIG_FILE}) if [[ ${_NO_TEST_DATA} != "true" && ${_TEST_DATA_} == "true" && ${_DEPLOY_MARKETING_} == "true" ]]; then _DEPLOY_ADS_=$(jq -r ."marketing.deployGoogleAds" ${_CONFIG_FILE}) _DEPLOY_CM360_=$(jq -r ."marketing.deployCM360" ${_CONFIG_FILE}) _DEPLOY_TIKTOK_=$(jq -r ."marketing.deployTikTok" ${_CONFIG_FILE}) _DEPLOY_LIVERAMP_=$(jq -r ."marketing.deployLiveRamp" ${_CONFIG_FILE}) _DEPLOY_META_=$(jq -r ."marketing.deployMeta" ${_CONFIG_FILE}) _DEPLOY_SFMC_=$(jq -r ."marketing.deploySFMC" ${_CONFIG_FILE}) _DEPLOY_DV360_=$(jq -r ."marketing.deployDV360" ${_CONFIG_FILE}) _DEPLOY_GA4_=$(jq -r ."marketing.deployGA4" ${_CONFIG_FILE}) if [[ ${_DEPLOY_ADS_} == "true" ]]; then echo "Deploying Google Ads Test Harness." python3 src/common/create_test_harness.py --workload "marketing.GoogleAds" --dataset "raw" fi if [[ ${_DEPLOY_CM360_} == "true" ]]; then echo "Deploying CM360 Test Harness." python3 src/common/create_test_harness.py --workload "marketing.CM360" --dataset "raw" fi if [[ ${_DEPLOY_TIKTOK_} == "true" ]]; then echo "Deploying TikTok Test Harness." python3 src/common/create_test_harness.py --workload "marketing.TikTok" --dataset "raw" fi if [[ ${_DEPLOY_LIVERAMP_} == "true" ]]; then echo "Deploying LiveRamp Test Harness." python3 src/common/create_test_harness.py --workload "marketing.LiveRamp" --dataset "cdc" fi if [[ ${_DEPLOY_META_} == "true" ]]; then echo "Deploying Meta Test Harness." python3 src/common/create_test_harness.py --workload "marketing.Meta" --dataset "raw" fi if [[ ${_DEPLOY_SFMC_} == "true" ]]; then echo "Deploying SFMC Test Harness." python3 src/common/create_test_harness.py --workload "marketing.SFMC" --dataset "raw" fi if [[ ${_DEPLOY_DV360_} == "true" ]]; then echo "Deploying DV360 Test Harness." python3 src/common/create_test_harness.py --workload "marketing.DV360" --dataset "raw" fi if [[ ${_DEPLOY_GA4_} == "true" ]]; then echo "Deploying Google Analytics 4 Test Harness." python3 src/common/create_test_harness.py --workload "marketing.GA4" --dataset "cdc" fi else echo "==Skipping Test Harness for Marketing==" fi - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'marketing-deploy' waitFor: ['k9-pre', 'marketing-test-harness'] script: | #!/usr/bin/env bash _DEPLOY_MARKETING_="$(jq -r ."deployMarketing" "${_CONFIG_FILE}")" if [[ "${_DEPLOY_MARKETING_}" == "true" ]]; then cp -f "${_CONFIG_FILE}" src/marketing/config/config.json gcloud builds submit ./src/marketing \ --config=./src/marketing/cloudbuild.marketing.yaml \ --substitutions=_GCS_LOGS_BUCKET="${_GCS_BUCKET}",_WORKER_POOL_NAME="${_WORKER_POOL_NAME}",_CLOUD_BUILD_REGION="${_CLOUD_BUILD_REGION}",_BUILD_ACCOUNT="${_BUILD_ACCOUNT}" \ --region="${_CLOUD_BUILD_REGION}" else echo "==Skipping Marketing==" fi - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'oracle-ebs-test-harness' waitFor: ['init_deploy_config'] script: | #!/usr/bin/env bash set -e _DEPLOY_EBS_=$(jq -r ."deployOracleEBS" ${_CONFIG_FILE}) _TEST_DATA_=$(jq -r ."testData" ${_CONFIG_FILE}) if [[ ${_NO_TEST_DATA} != "true" && ${_TEST_DATA_} == "true" && ${_DEPLOY_EBS_} == "true" ]]; then echo "Deploying Oracle EBS Test Harness." python3 src/common/create_test_harness.py --workload "OracleEBS" --dataset "cdc" else echo "==Skipping Test Harness for Oracle==" fi - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'oracle-ebs-deploy' waitFor: ['k9-pre', 'oracle-ebs-test-harness'] script: | #!/usr/bin/env bash _DEPLOY_EBS_=$(jq -r ."deployOracleEBS" ${_CONFIG_FILE}) if [[ ${_DEPLOY_EBS_} == "true" ]]; then cp -f ${_CONFIG_FILE} src/OracleEBS/config/config.json gcloud builds submit ./src/OracleEBS \ --config=./src/OracleEBS/cloudbuild.oracle_ebs.yaml \ --substitutions=_GCS_LOGS_BUCKET="${_GCS_BUCKET}",_WORKER_POOL_NAME="${_WORKER_POOL_NAME}",_CLOUD_BUILD_REGION="${_CLOUD_BUILD_REGION}",_BUILD_ACCOUNT="${_BUILD_ACCOUNT}" \ --region="${_CLOUD_BUILD_REGION}" else echo "==Skipping Oracle EBS==" fi - name: gcr.io/kittycorn-public/deploy-kittycorn:v2.0 id: 'k9-post' waitFor: ['k9-pre', 'sap-reporting', 'sfdc-deploy', 'marketing-deploy', 'oracle-ebs-deploy'] script: | #!/usr/bin/env bash export PYTHONPATH=${PYTHONPATH}:src/:. declare -a _WORKER_POOL_OPTIONS if [[ -n "${_WORKER_POOL_NAME}" ]]; then _WORKER_POOL_OPTIONS+=(--worker-pool-name "${_WORKER_POOL_NAME}") fi if [[ -n "${_CLOUD_BUILD_REGION}" ]]; then _WORKER_POOL_OPTIONS+=(--region "${_CLOUD_BUILD_REGION}") fi if [[ -n "${_BUILD_ACCOUNT}" ]]; then _WORKER_POOL_OPTIONS+=(--build-account "${_BUILD_ACCOUNT}") fi python3 src/k9/src/deploy_k9.py \ --config-file "${_CONFIG_FILE}" \ --stage post \ --logs-bucket "${_GCS_BUCKET}" \ "${_WORKER_POOL_OPTIONS[@]}" logsBucket: "gs://${_GCS_BUCKET}" serviceAccount: "${_BUILD_ACCOUNT}" timeout: 32400s substitutions: _CONFIG_FILE: "config/config.json" _NO_TEST_DATA: "false" options: substitution_option: "ALLOW_LOOSE" automapSubstitutions: true pool: name: "${_WORKER_POOL_NAME}" tags: ["cortex"]