cloudbuild.tmpl.yaml (89 lines of code) (raw):
steps:
- id: 'Create namespace'
name: 'gcr.io/cloud-builders/kubectl'
entrypoint: 'bash'
args:
- '-c'
- |
kubectl config view
gcloud container clusters get-credentials $$CLOUDSDK_CONTAINER_CLUSTER
kubectl config view
kubectl create namespace $$TEST_NAMESPACE
- id: 'Deploy to staging'
name: 'gcr.io/k8s-skaffold/skaffold:latest'
entrypoint: 'bash'
args:
- '-c'
- |
# Builds java apps with dockerfile profile due to jib/skaffold community builder incompatibility
if [ "${_LANG}" = "java" ]
then
skaffold run -p dockerfile -l $BUILD_ID -n $$TEST_NAMESPACE -d $$SKAFFOLD_DEFAULT_REPO
else
skaffold run -p cloudbuild -l $BUILD_ID -n $$TEST_NAMESPACE -d $$SKAFFOLD_DEFAULT_REPO
fi
dir: '/workspace/${_DIR}/${_LANG}-${_APP}'
timeout: 1200s
waitFor: ['Create namespace']
- id: 'Get Endpoint'
name: 'gcr.io/cloud-builders/kubectl'
entrypoint: 'bash'
args:
- '-c'
- |
if [ "${_APP}" = "hello-world" ]
then
service=$$HELLO_WORLD_SERVICE
fi
if [ "${_APP}" = "guestbook" ]
then
service=$$GUESTBOOK_SERVICE
fi
echo 'service is' $service
get_externalIP() {
kubectl get service $service --namespace $$TEST_NAMESPACE -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
}
until [[ -n "$(get_externalIP)" ]]; do
echo "Querying for external IP $service"
sleep 3
done
echo "$(get_externalIP):$(kubectl get service $service --namespace $$TEST_NAMESPACE -o jsonpath='{.spec.ports[0].port}')" > _externalIP
echo "External IP and port for $service is $(cat _externalIP)"
timeout: 1200s
waitFor: ['Deploy to staging']
- id: 'Integration tests'
name: 'gcr.io/cloud-builders/curl'
entrypoint: '/bin/bash'
args:
- '-c'
- |
set -e
# Testing connection
chmod +x test_connection.sh
./test_connection.sh -r 20 -i 3 -u http://$(cat _externalIP)
# Testing content
if [ "${_APP}" = "hello-world" ]
then
keyword='Hello'
fi
if [ "${_APP}" = "guestbook" ]
then
keyword='Guestbook'
fi
chmod +x test_content.sh
./test_content.sh -r 25 -i 3 -u http://$(cat _externalIP) -k $keyword
waitFor: ['Get Endpoint']
- id: 'Delete namespaces'
name: 'gcr.io/cloud-builders/kubectl'
entrypoint: 'bash'
args:
- '-c'
- |
kubectl delete namespace $$TEST_NAMESPACE
waitFor: ['Integration tests']
timeout: 2500s
options:
env:
- CLOUDSDK_COMPUTE_ZONE=us-central1-a
- CLOUDSDK_CONTAINER_CLUSTER=test-cluster
- SKAFFOLD_DEFAULT_REPO=gcr.io/$PROJECT_ID
- TEST_NAMESPACE=test-$BUILD_ID-$_LANG-$_APP
- HELLO_WORLD_SERVICE=${_LANG}-${_APP}-external
- GUESTBOOK_SERVICE=${_LANG}-${_APP}-frontend