forked from gomods/athens
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathe2e-kind.sh
executable file
·118 lines (93 loc) · 3.05 KB
/
e2e-kind.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
readonly CLUSTER_NAME=chart-testing
lint_charts() {
echo
echo "Starting charts linting..."
mkdir -p tmp
docker run --rm -v "$(pwd):/workdir" --workdir /workdir "$CHART_TESTING_IMAGE:$CHART_TESTING_TAG" ct lint --config /workdir/test/ct.yaml | tee tmp/lint.log || true
echo "Done Charts Linting!"
if grep -q "No chart changes detected" tmp/lint.log > /dev/null; then
echo "No chart changes detected, stopping pipeline!"
exit 0
elif grep -q "Error linting charts" tmp/lint.log > /dev/null; then
echo "Error linting charts stopping pipeline!"
exit 1
else
install_charts
fi
}
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() {
echo "Starting charts install testing..."
run_ct_container
trap cleanup EXIT
create_kind_cluster
install_local-path-provisioner
install_tiller
docker_exec ct install --config /workdir/test/ct.yaml
echo
}
main() {
lint_charts
}
main