From 5fb15f360f553d5f8db9d683430043ecb40cd44e Mon Sep 17 00:00:00 2001 From: Dr Nic Williams Date: Sat, 17 Nov 2018 10:53:15 +1000 Subject: [PATCH] initial test-chart WIP --- ci/pipeline.yml | 64 +++++++++++++++++++++++++++-- ci/scripts/lib/kubernetes-target.sh | 19 +++++++++ ci/scripts/test-chart | 32 +++++++++++++++ ci/settings.yml | 10 +++++ 4 files changed, 121 insertions(+), 4 deletions(-) create mode 100755 ci/scripts/lib/kubernetes-target.sh create mode 100755 ci/scripts/test-chart diff --git a/ci/pipeline.yml b/ci/pipeline.yml index 8dd4cba..472a65c 100644 --- a/ci/pipeline.yml +++ b/ci/pipeline.yml @@ -28,6 +28,16 @@ meta: email: (( param "Please provide the git email for automated commits" )) name: (( param "Please provide the git name for automated commits" )) + kubernetes: + pool: + uri: (( param "Please provide kubernetes pool uri" )) + branch: (( param "Please provide kubernetes pool branch" )) + private_key: (( param "Please provide kubernetes pool private_key" )) + name: (( param "Please provide kubernetes pool pool" )) + + google: + serviceaccount: (( param "Please provide GCP Service Account JSON" )) + aws: bucket: (( concat meta.name "-pipeline" )) region_name: us-east-1 @@ -62,6 +72,7 @@ groups: - name: (( grab meta.name )) jobs: - latest-image + - helm-test - rc - shipit - name: versioning @@ -87,6 +98,46 @@ jobs: icon_url: (( grab meta.slack.icon )) text: '(( concat meta.slack.fail_url " " meta.pipeline ": patch job failed" ))' + - name: helm-test + public: true + plan: + - aggregate: + - { get: git, trigger: true } + - { get: image-latest, params: {skip_download: true} } + # - { get: git, passed: [latest-image], trigger: true } + # - { get: image-latest, passed: [latest-image] } + - put: kube + resource: kubernetes-pool + params: + acquire: true + - name: test-chart + task: test-chart + config: + platform: linux + image_resource: + type: docker-image + source: + repository: (( grab meta.image.name )) + tag: (( grab meta.image.tag )) + inputs: + - name: git + - name: kube + - name: image-latest + run: + path: ./git/ci/scripts/test-chart + args: [] + params: + CHART_ROOT: (( grab meta.helm.chart_path )) + REPO_ROOT: git + K8S_CLUSTER: kube + GCP_SERVICEACCOUNT: (( grab meta.google.serviceaccount )) + ensure: + do: + - put: kube + resource: kubernetes-pool + params: + release: kube + - name: shipit public: true serial: true @@ -94,8 +145,6 @@ jobs: - do: - name: inputs aggregate: - # - { get: version, params: {bump: final} } - # - { get: git } - { get: version, passed: [rc], params: {bump: final} } - { get: git, passed: [rc] } - { get: image-latest, passed: [latest-image], params: { save: true } } @@ -179,8 +228,7 @@ jobs: plan: - do: - aggregate: - # - { get: git, trigger: true } - - { get: git, trigger: true, passed: [latest-image] } + - { get: git, trigger: true, passed: [helm-test] } - { get: version, trigger: true, params: {pre: rc} } - task: release-notes config: @@ -289,3 +337,11 @@ resources: user: (( grab meta.github.owner )) repository: (( grab meta.github.repo )) access_token: (( grab meta.github.access_token )) + + - name: kubernetes-pool + type: pool + source: + uri: (( grab meta.kubernetes.pool.uri )) + branch: (( grab meta.kubernetes.pool.branch )) + private_key: (( grab meta.kubernetes.pool.private_key )) + pool: (( grab meta.kubernetes.pool.name )) \ No newline at end of file diff --git a/ci/scripts/lib/kubernetes-target.sh b/ci/scripts/lib/kubernetes-target.sh new file mode 100755 index 0000000..0ca1d0d --- /dev/null +++ b/ci/scripts/lib/kubernetes-target.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +CLOUD_PROVIDER=$(cat $K8S_CLUSTER/metadata | jq -r ".provider") +case ${CLOUD_PROVIDER:?require "provider" key in pool resource metadata} in + google|gcp) + gcloud auth activate-service-account --key-file <(echo "${GCP_SERVICEACCOUNT:?require GCP Service Account JSON}") + + PROJECT=$(cat $K8S_CLUSTER/metadata | jq -r ".project") + CLUSTER_NAME=$(cat $K8S_CLUSTER/metadata | jq -r ".cluster_name") + CLUSTER_ZONE=$(cat $K8S_CLUSTER/metadata | jq -r ".cluster_zone") + # CLUSTER_REGION=$(cat $K8S_CLUSTER/metadata | jq -r ".cluster_region") + + gcloud container clusters get-credentials "$CLUSTER_NAME" --region "$CLUSTER_ZONE" --project "$PROJECT" + ;; + *) + echo "ERROR: unknown cloud provider $CLOUD_PROVIDER" + exit 1 + ;; +esac diff --git a/ci/scripts/test-chart b/ci/scripts/test-chart new file mode 100755 index 0000000..edb04b8 --- /dev/null +++ b/ci/scripts/test-chart @@ -0,0 +1,32 @@ +#!/bin/bash + +# +# ci/scripts/test-chart +# +# Script for installing Helm chart to test it +# +# author: Dr Nic Williams +# created: 2018-11-17 + +set -eu + +: ${CHART_ROOT:?required} +: ${REPO_ROOT:?required} +: ${K8S_CLUSTER:?required} + +header() { + echo + echo "###############################################" + echo + echo $* + echo +} + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +header "Authenticate to Kubernetes" + +$DIR/lib/kubernetes-target.sh + +kubectl get pods --all-namespaces + diff --git a/ci/settings.yml b/ci/settings.yml index 7fa4db2..504a4b0 100644 --- a/ci/settings.yml +++ b/ci/settings.yml @@ -11,6 +11,16 @@ meta: email: ((git-commit-email)) name: ((git-commit-name)) + kubernetes: + pool: + uri: git@github.com:drnic/example-concourse-kubenetes-pool.git + branch: master + private_key: ((github-private-key)) + name: gke + + google: + serviceaccount: ((gcp-service-account-knative-experiments)) + aws: bucket: (( grab meta.pipeline )) region_name: us-east-1