From 5819b4344a5c606fd4ba4832f71840921421231d Mon Sep 17 00:00:00 2001 From: Dave Stanke Date: Tue, 2 Apr 2019 21:05:17 -0400 Subject: [PATCH 1/3] add parallelism to compose method --- cloudbuild.compose.yaml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/cloudbuild.compose.yaml b/cloudbuild.compose.yaml index 8b7244c..dad416e 100644 --- a/cloudbuild.compose.yaml +++ b/cloudbuild.compose.yaml @@ -19,7 +19,7 @@ steps: # dir: 'web' # args: ['test'] -- id: 'build web container' +- id: 'build web' name: 'gcr.io/cloud-builders/docker' args: [ 'build', @@ -28,8 +28,9 @@ steps: '--cache-from=gcr.io/$PROJECT_ID/web:latest', 'web/.', ] + waitFor: ['-'] # start immediately -- id: 'build database container' +- id: 'build db' name: 'gcr.io/cloud-builders/docker' args: [ 'build', @@ -38,8 +39,9 @@ steps: '--cache-from', 'gcr.io/$PROJECT_ID/mysql:latest', 'mysql/.', ] + waitFor: ['-'] # start immediately -- id: 'Create Environment' +- id: 'compose up' name: 'gcr.io/$PROJECT_ID/docker-compose:latest' entrypoint: '/bin/bash' args: @@ -48,8 +50,9 @@ steps: docker-compose up -d env: - 'PROJECT_ID=$PROJECT_ID' + waitFor: ['build web','build db'] -- id: 'run E2E tests' +- id: 'integration tests' name: 'gcr.io/$PROJECT_ID/docker-compose:latest' entrypoint: '/bin/bash' args: @@ -58,6 +61,7 @@ steps: ### -r = retries; -i = interval; -k = keyword to search for ### ./test/test-connection.sh -r 20 -i 3 -u http://web:3000 ./test/test-content.sh -r 20 -i 3 -u http://web:3000 -k 'Chocolate Chip' + waitFor: ['compose up'] images: - gcr.io/$PROJECT_ID/web From a7e193e8cc3033efc31120311896271326c49270 Mon Sep 17 00:00:00 2001 From: Dave Stanke Date: Tue, 2 Apr 2019 21:10:45 -0400 Subject: [PATCH 2/3] add parallelism to gke method --- cloudbuild.gke.yaml | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/cloudbuild.gke.yaml b/cloudbuild.gke.yaml index 1d0c876..7c38714 100644 --- a/cloudbuild.gke.yaml +++ b/cloudbuild.gke.yaml @@ -1,5 +1,5 @@ steps: -- id: 'build web container' +- id: 'build web' name: 'gcr.io/cloud-builders/docker' args: [ 'build', @@ -8,8 +8,9 @@ steps: '--cache-from', 'gcr.io/$PROJECT_ID/web:latest', 'web/.', ] + waitFor: ['-'] # start immediately -- id: 'build database container' +- id: 'build db' name: 'gcr.io/cloud-builders/docker' args: [ 'build', @@ -20,24 +21,29 @@ steps: ] env: - "MYSQL_ROOT_PASSWORD=password" + waitFor: ['-'] # start immediately -- id: 'Push web image' +- id: 'make namespace' + name: 'gcr.io/cloud-builders/kubectl' + args: ['create','namespace','test-$BUILD_ID'] + waitFor: ['-'] # start immediately + +- id: 'push web' name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/$PROJECT_ID/web'] + waitFor: ['build web'] -- id: 'Push database image' +- id: 'push db' name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/$PROJECT_ID/mysql'] - -- id: 'Create namespace' - name: 'gcr.io/cloud-builders/kubectl' - args: ['create','namespace','test-$BUILD_ID'] + waitFor: ['build db'] -- id: 'Deploy application to cluster' +- id: 'deploy to staging' name: 'gcr.io/cloud-builders/kubectl' args: ['apply', '-f', 'k8s/', '--namespace=test-$BUILD_ID'] + waitFor: ['push web','push db'] -- id: 'Get endpoint of web service' +- id: 'get endpoint' name: 'gcr.io/cloud-builders/kubectl' entrypoint: 'bash' args: @@ -53,7 +59,7 @@ steps: sleep 3 done - echo "$(get_nodeport)" > _nodeport + echo "$(get_nodeport)" > _nodeport # save port for use in next step # grab the public IP of a random node # (why do this instead of a load balancer? b/c it's faster to instantiate) @@ -68,10 +74,11 @@ steps: sleep 3 done + echo $(get_nodeip) > _nodeip # save ip for use in next step - echo $(get_nodeip) > _nodeip + waitFor: ['deploy to staging'] -- id: 'run E2E tests' +- id: 'integration tests' name: 'gcr.io/cloud-builders/curl' entrypoint: '/bin/bash' args: @@ -80,10 +87,12 @@ steps: ### -r = retries; -i = interval; -k = keyword to search for ### ./test/test-connection.sh -r 20 -i 3 -u http://$(cat _nodeip):$(cat _nodeport) ./test/test-content.sh -r 20 -i 3 -u http://$(cat _nodeip):$(cat _nodeport) -k 'Chocolate Chip' + waitFor: ['get endpoint'] -- id: 'Delete namespace' +- id: 'delete namespace' name: 'gcr.io/cloud-builders/kubectl' args: ['delete', 'namespaces', 'test-$BUILD_ID'] + waitFor: ['integration tests'] options: env: From 679fff322bff725b5c6f04dc85070050514183ad Mon Sep 17 00:00:00 2001 From: Dave Stanke Date: Tue, 2 Apr 2019 21:13:20 -0400 Subject: [PATCH 3/3] clean up config for vm method --- cloudbuild.vm.yaml | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/cloudbuild.vm.yaml b/cloudbuild.vm.yaml index 2ae50af..eadfa35 100644 --- a/cloudbuild.vm.yaml +++ b/cloudbuild.vm.yaml @@ -92,10 +92,6 @@ steps: args: ['push', 'gcr.io/$PROJECT_ID/mysql'] waitFor: ['build db'] -# - id: 'Create namespace' -# name: 'gcr.io/cloud-builders/kubectl' -# args: ['create','namespace','$BUILD_ID'] - - id: 'deploy app' # use vanilla kubectl container b/c this isn't GKE name: 'bitnami/kubectl' @@ -103,7 +99,6 @@ steps: 'apply', '-f', 'k8s/', - # '--namespace=$BUILD_ID', '--kubeconfig=kubeconfig.microk8s' ] waitFor: ['patch kubeconfig'] @@ -116,7 +111,6 @@ steps: - | # determine which node port the service was exposed on get_nodeport() { - # kubectl get service cookieshop-web --namespace=test-$BUILD_ID -o=jsonpath='{.spec.ports[0].nodePort}' kubectl get service cookieshop-web -o=jsonpath='{.spec.ports[0].nodePort}' --kubeconfig=kubeconfig.microk8s } @@ -128,7 +122,7 @@ steps: echo "$(get_nodeport)" > _nodeport waitFor: ['deploy app'] -- id: 'test' +- id: 'integration test' name: 'gcr.io/cloud-builders/curl' entrypoint: '/bin/bash' args: @@ -148,17 +142,7 @@ steps: '-var=instance-name=test-$BUILD_ID', '-auto-approve' ] - waitFor: ['test'] - -# - id: 'Delete namespace' -# name: 'gcr.io/cloud-builders/kubectl' -# args: ['delete', 'namespaces', '$BUILD_ID'] - -# options: -# env: -# # location/name of GKE cluster (used by all kubectl commands) -# - CLOUDSDK_COMPUTE_ZONE=us-central1-a -# - CLOUDSDK_CONTAINER_CLUSTER=staging + waitFor: ['integration test'] timeout: 3600s \ No newline at end of file