asmcli/cloudbuild-staging.yaml (252 lines of code) (raw):
steps:
########
# SETUP
########
- name: 'gcr.io/cloud-builders/docker'
dir: 'asmcli'
id: 'build-tester-image'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}', '.']
waitFor: ['-']
- name: 'gcr.io/cloud-builders/docker'
dir: 'asmcli'
id: 'publish-tester-image'
args: ['push', 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}']
waitFor: ['build-tester-image']
- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
dir: 'asmcli'
id: 'lint-with-shellcheck'
entrypoint: 'shellcheck'
args:
- '-e'
- 'SC2230'
- '${_SCRIPT_NAME}'
waitFor:
- 'publish-tester-image'
# Disabled for now, see #296. We have more users with LTS Linux releases
# than non-Bourne shells. Please open an issue if you're affected.
#- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
# dir: 'asmcli'
# id: 'check-posh-compatibility'
# entrypoint: 'posh'
# args: ['-n', '${_SCRIPT_NAME}']
# waitFor:
# - 'publish-tester-image'
- name: 'gcr.io/cloud-builders/gcloud'
dir: 'asmcli'
id: 'fetch-secrets'
entrypoint: '/bin/bash'
args:
- '-c'
- |
date
gcloud secrets versions access latest \
--secret="${_SECRET_NAME}" \
--format='get(payload.data)' \
--project="${PROJECT_ID}" \
| tr '_-' '/+' \
| base64 -d > "${_KEY_FILE}"
waitFor:
- 'lint-with-shellcheck'
- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
dir: 'asmcli'
id: 'setup-long-term-cluster'
entrypoint: '/bin/bash'
args:
- '-c'
- >
./tests/setup_longterm_cluster
env:
- '_CI_ASM_IMAGE_LOCATION=${_IMAGE_LOCATION}'
- '_CI_ASM_PKG_LOCATION=${_PKG_LOCATION}'
- '_CI_ASM_KPT_BRANCH=${_ASM_PKG_BRANCH}'
- 'SERVICE_ACCOUNT=${_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com'
- 'KEY_FILE=${_KEY_FILE}'
waitFor:
- 'fetch-secrets'
- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
dir: 'asmcli'
id: 'clean-up-old-clusters'
entrypoint: '/bin/bash'
args:
- '-c'
- |
set -e
# This will delete all clusters older than 3 hours old
date
gcloud auth activate-service-account \
"${_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--key-file="${_KEY_FILE}"
NOW="$(date +%s)"
# clusters
while IFS='|' read -r CLUSTER_NAME CREATE_TIME ZONE; do
CREATE_TIME="$(date -d "$${CREATE_TIME}" +%s)"
SEC_DIFF="$(echo "$${NOW} - $${CREATE_TIME}" | bc)"
if [[ "$${SEC_DIFF}" -gt 7200 && "$${CLUSTER_NAME}" = "ephem-"* ]]; then
gcloud beta container \
--project "${PROJECT_ID}" \
clusters delete -q "$${CLUSTER_NAME}" \
--zone "$${ZONE}" \
--async || true
fi
done <<EOF
$(gcloud container clusters list \
--project "${PROJECT_ID}" \
--format='value[separator="|"](name,createTime,zone)')
EOF
# ingress resources
while read -r LB_NAME; do
gcloud compute \
--project "${PROJECT_ID}" \
forwarding-rules delete -q "$${LB_NAME}" \
--region "$${CLUSTER_LOCATION:0:-2}" || true
gcloud compute \
--project "${PROJECT_ID}" \
target-pools delete -q "$${LB_NAME}" \
--region "$${CLUSTER_LOCATION:0:-2}" || true
done <<EOF
$(gcloud compute forwarding-rules list \
--project="${PROJECT_ID}" \
--format='get(name)' \
--filter='((description:istio OR description:frontend-external) AND creationTimestamp<-PT3H)')
EOF
# firewall rules
while read -r RULE_NAME; do
gcloud compute \
--project "${PROJECT_ID}" \
firewall-rules delete -q "$${RULE_NAME}" || true
done <<EOF
$(gcloud compute firewall-rules list \
--project="${PROJECT_ID}" \
--format='get(name)' \
--filter='((description:istio OR description:frontend-external) AND creationTimestamp<-PT3H)')
EOF
waitFor:
- 'fetch-secrets'
env:
- 'CLUSTER_LOCATION=${_CLUSTER_LOCATION}'
#############
# FAST TESTS
#############
- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
dir: 'asmcli'
id: 'run-cli-tests'
entrypoint: '/bin/bash'
args:
- '-c'
- >
./tests/run_cli_tests
waitFor:
- 'setup-long-term-cluster'
env:
- '_CI_ASM_IMAGE_LOCATION=${_IMAGE_LOCATION}'
- '_CI_ASM_PKG_LOCATION=${_PKG_LOCATION}'
- '_CI_ASM_KPT_BRANCH=${_ASM_PKG_BRANCH}'
- 'SERVICE_ACCOUNT=${_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com'
- 'KEY_FILE=${_KEY_FILE}'
timeout: 120s
#############
# SLOW TESTS
#############
- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
dir: 'asmcli'
id: 'run-create-mesh'
entrypoint: '/bin/bash'
args:
- '-c'
- >
./tests/run_create_mesh
--PROJECT_ID "${PROJECT_ID}"
--BUILD_ID "${BUILD_ID}"
env:
- 'SERVICE_ACCOUNT=${_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com'
- 'KEY_FILE=${_KEY_FILE}'
- '_CI_ASM_IMAGE_LOCATION=${_IMAGE_LOCATION}'
- '_CI_ASM_PKG_LOCATION=${_PKG_LOCATION}'
- '_CI_ASM_KPT_BRANCH=${_ASM_PKG_BRANCH}'
timeout: 600s
- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
dir: 'asmcli'
id: 'run-migration-suite-meshca'
entrypoint: '/bin/bash'
args:
- '-c'
- >
./tests/run_migration_suite_meshca
--PROJECT_ID "${PROJECT_ID}"
--BUILD_ID "${BUILD_ID}"
--CLUSTER_LOCATION "${_CLUSTER_LOCATION}"
waitFor:
- 'run-cli-tests'
env:
- 'SERVICE_ACCOUNT=${_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com'
- 'KEY_FILE=${_KEY_FILE}'
- '_CI_ASM_IMAGE_LOCATION=${_IMAGE_LOCATION}'
- '_CI_ASM_PKG_LOCATION=${_PKG_LOCATION}'
- '_CI_ASM_KPT_BRANCH=${_ASM_PKG_BRANCH}'
timeout: 2400s # 40 mins
- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
dir: 'asmcli'
id: 'run-migration-suite-meshca-previous-version'
entrypoint: '/bin/bash'
args:
- '-c'
- >
./tests/run_migration_suite_meshca_prev
--PROJECT_ID "${PROJECT_ID}"
--BUILD_ID "${BUILD_ID}"
--CLUSTER_LOCATION "${_CLUSTER_LOCATION}"
waitFor:
- 'run-cli-tests'
env:
- 'SERVICE_ACCOUNT=${_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com'
- 'KEY_FILE=${_KEY_FILE}'
- '_CI_ASM_IMAGE_LOCATION=${_IMAGE_LOCATION}'
- '_CI_ASM_PKG_LOCATION=${_PKG_LOCATION}'
- '_CI_ASM_KPT_BRANCH=${_ASM_PKG_BRANCH}'
timeout: 2400s # 40 mins
- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
dir: 'asmcli'
id: 'run-migration-suite-citadel'
entrypoint: '/bin/bash'
args:
- '-c'
- >
./tests/run_migration_suite_citadel
--PROJECT_ID "${PROJECT_ID}"
--BUILD_ID "${BUILD_ID}"
--CLUSTER_LOCATION "${_CLUSTER_LOCATION}"
waitFor:
- 'run-cli-tests'
env:
- 'SERVICE_ACCOUNT=${_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com'
- 'KEY_FILE=${_KEY_FILE}'
- '_CI_ASM_IMAGE_LOCATION=${_IMAGE_LOCATION}'
- '_CI_ASM_PKG_LOCATION=${_PKG_LOCATION}'
- '_CI_ASM_KPT_BRANCH=${_ASM_PKG_BRANCH}'
timeout: 2400s # 40 mins
- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
dir: 'asmcli'
id: 'run-migration-suite-citadel-previous-version'
entrypoint: '/bin/bash'
args:
- '-c'
- >
./tests/run_migration_suite_citadel_prev
--PROJECT_ID "${PROJECT_ID}"
--BUILD_ID "${BUILD_ID}"
--CLUSTER_LOCATION "${_CLUSTER_LOCATION}"
waitFor:
- 'run-cli-tests'
env:
- 'SERVICE_ACCOUNT=${_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com'
- 'KEY_FILE=${_KEY_FILE}'
- '_CI_ASM_IMAGE_LOCATION=${_IMAGE_LOCATION}'
- '_CI_ASM_PKG_LOCATION=${_PKG_LOCATION}'
- '_CI_ASM_KPT_BRANCH=${_ASM_PKG_BRANCH}'
timeout: 2400s # 40 mins
- name: 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}'
dir: 'asmcli'
id: 'run-build-offline-package'
entrypoint: '/bin/bash'
args:
- '-c'
- >
./tests/run_build_offline_package
--PROJECT_ID "${PROJECT_ID}"
--BUILD_ID "${BUILD_ID}"
env:
- 'SERVICE_ACCOUNT=${_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com'
- 'KEY_FILE=${_KEY_FILE}'
- '_CI_ASM_IMAGE_LOCATION=${_IMAGE_LOCATION}'
- '_CI_ASM_PKG_LOCATION=${_PKG_LOCATION}'
- '_CI_ASM_KPT_BRANCH=${_ASM_PKG_BRANCH}'
- '_LT_CLUSTER_NAME=long-term-test-cluster-environ'
timeout: 900s
substitutions:
_BUCKET_NAME: my-gcs-bucket
_CLUSTER_LOCATION: us-central1-c
_IMAGE_NAME: gcloud-with-kpt
_SCRIPT_NAME: asmcli
_ASM_PKG_BRANCH: $COMMIT_SHA
_SERVICE_ACCOUNT: asm-installer
_SECRET_NAME: asm-installer-creds
_KEY_FILE: key.json
timeout: 3600s # 1 hour