use circleci for chart testing (#1225)

* use circleci for chart testing

* update ct flags

* trigger ci

* restore circleci config
This commit is contained in:
Rimas Mocevicius
2019-05-15 20:21:12 +01:00
committed by Aaron Schlesinger
parent a75776b4ee
commit 955929d89d
4 changed files with 236 additions and 15 deletions
+99
View File
@@ -0,0 +1,99 @@
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
readonly CLUSTER_NAME=chart-testing
run_ct_container() {
echo 'Running ct container...'
docker run --rm --interactive --detach --network host --name ct \
--volume "$(pwd):/workdir" \
--workdir /workdir \
"$CHART_TESTING_IMAGE:$CHART_TESTING_TAG" \
cat
echo
}
cleanup() {
echo 'Removing ct container...'
docker kill ct > /dev/null 2>&1
echo 'Done!'
}
docker_exec() {
docker exec --interactive -e HELM_HOST=127.0.0.1:44134 -e HELM_TILLER_SILENT=true ct "$@"
}
create_kind_cluster() {
echo 'Installing kind...'
curl -sSLo kind "https://github.com/kubernetes-sigs/kind/releases/download/$KIND_VERSION/kind-linux-amd64"
chmod +x kind
sudo mv kind /usr/local/bin/kind
kind create cluster --name "$CLUSTER_NAME" --image "kindest/node:$K8S_VERSION"
docker_exec mkdir -p /root/.kube
echo 'Copying kubeconfig to container...'
local kubeconfig
kubeconfig="$(kind get kubeconfig-path --name "$CLUSTER_NAME")"
docker cp "$kubeconfig" ct:/root/.kube/config
docker_exec kubectl cluster-info
echo
echo -n 'Waiting for cluster to be ready...'
until ! grep --quiet 'NotReady' <(docker_exec kubectl get nodes --no-headers); do
printf '.'
sleep 1
done
echo '✔︎'
echo
docker_exec kubectl get nodes
echo
echo 'Cluster ready!'
echo
}
install_local-path-provisioner() {
# Remove default storage class. It will be recreated by local-path-provisioner
docker_exec kubectl delete storageclass standard
echo 'Installing local-path-provisioner...'
docker_exec kubectl apply -f test/local-path-provisioner.yaml
echo
}
install_tiller() {
docker_exec apk add bash
echo "Install Tillerless Helm plugin..."
docker_exec helm init --client-only
docker_exec helm plugin install https://github.com/rimusz/helm-tiller
docker_exec bash -c 'echo "Starting Tiller..."; helm tiller start-ci >/dev/null 2>&1 &'
docker_exec bash -c 'echo "Waiting Tiller to launch on 44134..."; while ! nc -z localhost 44134; do sleep 1; done; echo "Tiller launched..."'
echo
}
install_charts() {
docker_exec ct lint-and-install --config /workdir/test/ct.yaml
echo
}
main() {
run_ct_container
trap cleanup EXIT
create_kind_cluster
install_local-path-provisioner
install_tiller
install_charts
}
main
+108
View File
@@ -0,0 +1,108 @@
apiVersion: v1
kind: Namespace
metadata:
name: local-path-storage
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: local-path-provisioner-service-account
namespace: local-path-storage
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: local-path-provisioner-role
namespace: local-path-storage
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumeclaims"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["endpoints", "persistentvolumes", "pods"]
verbs: ["*"]
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "patch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: local-path-provisioner-bind
namespace: local-path-storage
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: local-path-provisioner-role
subjects:
- kind: ServiceAccount
name: local-path-provisioner-service-account
namespace: local-path-storage
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: local-path-provisioner
namespace: local-path-storage
spec:
replicas: 1
selector:
matchLabels:
app: local-path-provisioner
template:
metadata:
labels:
app: local-path-provisioner
spec:
serviceAccountName: local-path-provisioner-service-account
containers:
- name: local-path-provisioner
image: rancher/local-path-provisioner:v0.0.8
imagePullPolicy: Always
command:
- local-path-provisioner
- --debug
- start
- --config
- /etc/config/config.json
volumeMounts:
- name: config-volume
mountPath: /etc/config/
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumes:
- name: config-volume
configMap:
name: local-path-config
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-path
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: rancher.io/local-path
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
---
kind: ConfigMap
apiVersion: v1
metadata:
name: local-path-config
namespace: local-path-storage
data:
config.json: |-
{
"nodePathMap":[
{
"node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
"paths":["/opt/local-path-provisioner"]
}
]
}