Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: multi-stage CI #1261

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 22 additions & 10 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,30 @@ services:
- docker
install:
- pip3 install --no-cache-dir -r dev-requirements.txt
- . "ci/minikube-${SCENARIO}.env"
- ./ci/install.sh
script:
- ./ci/travis-script.sh

jobs:
include:
- stage: lint
script:
- . ci/lint.env
- ./ci/install-lint.sh
- python3 tools/templates/lint-and-validate.py
- stage: test
# Different scenarios described in
# /ci/minikube-${SCENARIO}.env
env:
matrix:
- SCENARIO=1.13-default RUNNER=minikube
- SCENARIO=1.12-netpol RUNNER=minikube
- SCENARIO=1.11-default RUNNER=minikube
- SCENARIO=1.14-default RUNNER=kind
script:
- . ci/lint.env
- . "ci/${RUNNER}-${SCENARIO}.env"
- ./ci/install-${RUNNER}.sh
- ./ci/travis-script.sh

env:
# Different scenarios described in
# /ci/minikube-${SCENARIO}.env
matrix:
- SCENARIO=1.13-default
- SCENARIO=1.12-netpol
- SCENARIO=1.11-default
global:
- secure: jpFpbMccpjGP+otWH2Z03VFdtR9AAu2vzrNxsoZ3IvJvrO4MfzYJ3uSCDQuB0NG9gBgaAscpTJtliPTEi7njXHLcsFeWXLUmeBEHLozYxfzDQzMvW3EYdNWcC7oVAAt3de0i0ojw9rGswiofhbu2dAe+Xd2bejv1+PVJcEC3SRPGy17kb6bme6gD3zty5ft4VpzP0nomUNqfZBRLUYxSZuKlHJaZ6Nuq434rKmXrcN6uy+eEWDorTbjyM22IIYgUmrhg++Qtu/MBR7/rriPhyRltCU14361bcxqyq2Hw+HNG8D3hsqo5TiEiYwxOQcXRgddL+Ci6/y0L1EvqOQc+1V8ycwNs2oNicwNgSn5A+9HpF495Kae039hGtj2Gpt4IbplSYwKFq/sFTq+CekxdD2YVQmGvsjep4bNVL66o2RSZVAW1Bg/G8/sSe3BwgD8IToy9+1NHPPuaVupeukRqNyUDcVvWH8hdb8AkXYY87+546etYDpn91GQnhTEberKbXX4UCmpKNXpXoprLE8nQLGb6TIoHPTyA+RRNQ4erDzMjqF43UVmhOZTtkGaRgIWK7vDAKpLUnuOguuhJUNpYpRggGQsMV8cZnaCumy5OFUf6i6rfN0Ru6a+/Bm7grJiAcnZlU7igaxgI38QaJgCKcqqzIImdcRYNQC74/Ok/1oM=
- secure: BK++GwKVPoS0iG8aB7wQ13daTgJR9MifHA+l9xr/tSZ3SUL6nc7kjxLbliRQJCqT9lcOODsd+v2u9PziEzBp0CCh67ftFxJw8riP2+FgdmHTK4yav9QpSwoBJHhV2SgBMGlXiqdUVC7wpgjzzK63V8abvzAhXkthWPl3kYpUI//xGYyuBNXVHEOImHB3F1M5bn90lflFtRfq2iH5FigGesMi2BFfTVeqvbzZVZrAs0E1/NRdO+/cRq0c9aRpNLkh254k1tcKbUvULQq1iLQuHN2Ramn3NgNnx93sbwp1e7ZjmETbjr9cwMIDg5mh25H0Rjf2Nn8cqHbBCWzoMkjZW097HRVDYht2kJZQIbQcaxX38DW6vykUwGWSBAWbtvCUwYwU57s/dIbSYUTQErkYYmhiq52cdOtnxZ2/ULoElCVyR8lTmQuANJrq9YFC9q1ly69YuMWWnFgwxWpK1JCgAJGELgj5EvcghEtNmkEFh5f6pmbKBE7PKQPTovzNKcdRauR/L+MsmhVYukCfNZq57LrruIQIX1GQNw9w3Ck8P4EPtNjdI4umCSy6nZSyTevWgVTmIP9EwXa5Cap32ZU+iDtw+wUBAr3sjROJOYGKlL/ktWsWbjog5hIG0rrb8PbgOfbLRZSEYGL9sYsyXXyW5oI37lB7AqG6D7vOA4TdmTQ=
45 changes: 45 additions & 0 deletions ci/install-kind.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/bin/bash
set -ex

. $PWD/install-lint.sh

# install kubectl, kind
# based on https://blog.travis-ci.com/2017-10-26-running-kubernetes-on-travis-ci-with-minikube
if ! [ -f "bin/kubectl" ]; then
echo "installing kubectl"
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v${KUBE_VERSION}/bin/linux/amd64/kubectl
chmod +x kubectl
mv kubectl bin/
fi

if ! [ -f "bin/kind" ]; then
echo "installing kind"
curl -Lo kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-linux-amd64
chmod +x kind
mv kind bin/
fi


echo "starting cluster with kind"
$PWD/bin/kind create cluster --image kindest/node:v${KUBE_VERSION}
export KUBECONFIG="$($PWD/bin/kind get kubeconfig-path --name=kind)"

echo "waiting for kubernetes"
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}'
until kubectl get nodes -o jsonpath="$JSONPATH" 2>&1 | grep -q "Ready=True"; do
sleep 1
done
kubectl get nodes

echo "installing helm"
kubectl --namespace kube-system create sa tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
helm init --service-account tiller

echo "waiting for tiller"
kubectl --namespace=kube-system rollout status --watch deployment/tiller-deploy

echo "installing git-crypt"
curl -L https://github.com/minrk/git-crypt-bin/releases/download/0.5.0/git-crypt > bin/git-crypt
echo "46c288cc849c23a28239de3386c6050e5c7d7acd50b1d0248d86e6efff09c61b bin/git-crypt" | shasum -a 256 -c -
chmod +x bin/git-crypt
23 changes: 23 additions & 0 deletions ci/install-lint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/bin/bash
set -ex

mkdir -p bin

# nsenter is included on xenial

# install socat (required by helm)
sudo apt-get update && sudo apt-get install -y socat

echo "installing kubeval"
if ! [ -f bin/kubeval-${KUBEVAL_VERSION} ]; then
curl -sSLo bin/kubeval-${KUBEVAL_VERSION}.tar.gz https://github.com/garethr/kubeval/releases/download/${KUBEVAL_VERSION}/kubeval-linux-amd64.tar.gz
tar --extract --file bin/kubeval-${KUBEVAL_VERSION}.tar.gz --directory bin
rm bin/kubeval-${KUBEVAL_VERSION}.tar.gz
mv bin/kubeval bin/kubeval-${KUBEVAL_VERSION}
fi
cp bin/kubeval-${KUBEVAL_VERSION} bin/kubeval

echo "installing helm"
curl -ssL https://storage.googleapis.com/kubernetes-helm/helm-v${HELM_VERSION}-linux-amd64.tar.gz \
| tar -xz -C bin --strip-components 1 linux-amd64/helm
chmod +x bin/helm
21 changes: 1 addition & 20 deletions ci/install.sh → ci/install-minikube.sh
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
#!/bin/bash
set -ex

mkdir -p bin

# nsenter is included on xenial

# install socat (required by helm)
sudo apt-get update && sudo apt-get install -y socat
. $PWD/install-lint.sh

# install kubectl, minikube
# based on https://blog.travis-ci.com/2017-10-26-running-kubernetes-on-travis-ci-with-minikube
Expand Down Expand Up @@ -39,16 +34,6 @@ if [ ! -z "${CRICTL_VERSION}" ]; then
sudo ln -s "${PWD}/bin/crictl-${CRICTL_VERSION}" /usr/bin/crictl
fi


echo "installing kubeval"
if ! [ -f bin/kubeval-${KUBEVAL_VERSION} ]; then
curl -sSLo bin/kubeval-${KUBEVAL_VERSION}.tar.gz https://github.com/garethr/kubeval/releases/download/${KUBEVAL_VERSION}/kubeval-linux-amd64.tar.gz
tar --extract --file bin/kubeval-${KUBEVAL_VERSION}.tar.gz --directory bin
rm bin/kubeval-${KUBEVAL_VERSION}.tar.gz
mv bin/kubeval bin/kubeval-${KUBEVAL_VERSION}
fi
cp bin/kubeval-${KUBEVAL_VERSION} bin/kubeval

echo "starting minikube with RBAC"
sudo CHANGE_MINIKUBE_NONE_USER=true $PWD/bin/minikube start $MINIKUBE_ARGS
minikube update-context
Expand Down Expand Up @@ -79,15 +64,11 @@ done
kubectl get nodes

echo "installing helm"
curl -ssL https://storage.googleapis.com/kubernetes-helm/helm-v${HELM_VERSION}-linux-amd64.tar.gz \
| tar -xz -C bin --strip-components 1 linux-amd64/helm
chmod +x bin/helm

kubectl --namespace kube-system create sa tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
helm init --service-account tiller


echo "waiting for tiller"
kubectl --namespace=kube-system rollout status --watch deployment/tiller-deploy

Expand Down
9 changes: 9 additions & 0 deletions ci/kind-1.14-default.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
export KUBE_VERSION=1.14.0
export KIND_VERSION=0.2.1
export PATH="$PWD/bin:$PATH"

export Z2JH_HELM_ARGS="-f minikube-config.yaml"
export DISABLE_TEST_NETPOL=1
export INSTALL_CALICO=0

export RUN_PUBLISH_SCRIPT=0
3 changes: 3 additions & 0 deletions ci/lint.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export HELM_VERSION=2.12.3
export KUBEVAL_VERSION=0.7.3

2 changes: 0 additions & 2 deletions ci/minikube-1.11-default.env
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
export KUBE_VERSION=1.11.7
export MINIKUBE_VERSION=0.33.1
export HELM_VERSION=2.12.3
export KUBEVAL_VERSION=0.7.3
export PATH="$PWD/bin:$PATH"

export MINIKUBE_ARGS="--vm-driver=none --kubernetes-version=v${KUBE_VERSION}"
Expand Down
2 changes: 0 additions & 2 deletions ci/minikube-1.12-netpol.env
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
export KUBE_VERSION=1.12.5
export MINIKUBE_VERSION=0.33.1
export HELM_VERSION=2.12.3
export KUBEVAL_VERSION=0.7.3
export PATH="$PWD/bin:$PATH"

export MINIKUBE_ARGS="--vm-driver=none --kubernetes-version=v${KUBE_VERSION} --network-plugin cni --extra-config=kubelet.network-plugin=cni"
Expand Down
2 changes: 0 additions & 2 deletions ci/minikube-1.13-default.env
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
export KUBE_VERSION=1.13.2
export MINIKUBE_VERSION=0.33.1
export HELM_VERSION=2.12.3
export KUBEVAL_VERSION=0.7.3
export PATH="$PWD/bin:$PATH"

export MINIKUBE_ARGS="--vm-driver=none --kubernetes-version=v${KUBE_VERSION}"
Expand Down
19 changes: 15 additions & 4 deletions ci/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,33 @@ set -eux

# Is there a standard interface name?
for iface in eth0 ens4 enp0s3; do
IP=$(ifconfig $iface | grep 'inet addr' | cut -d: -f2 | awk '{print $1}');
IP=$(/sbin/ifconfig $iface | grep 'inet addr' | cut -d: -f2 | awk '{print $1}');
if [ -n "$IP" ]; then
echo "IP: $IP"
break
fi
done
if [ -z "$IP" ]; then
echo "Failed to get IP, current interfaces:"
ifconfig -a
/sbin/ifconfig -a
exit 2
fi

TEST_NAMESPACE=jupyterhub-test
TEST_URL=http://$IP:31212

helm install --name jupyterhub-test --namespace $TEST_NAMESPACE ./jupyterhub/ $Z2JH_HELM_ARGS
if [ "$RUNNER" = "kind" ]; then
export KUBECONFIG="$($PWD/bin/kind get kubeconfig-path --name=kind)"
fi

helm install --wait --name jupyterhub-test --namespace $TEST_NAMESPACE ./jupyterhub/ $Z2JH_HELM_ARGS

if [ "$RUNNER" = "kind" ]; then
kubectl port-forward -n $TEST_NAMESPACE svc/proxy-public 8080:80 &
TEST_URL=http://127.0.0.1:8080
export HUB_API_URL=http://127.0.0.1:8080/hub/api
else
TEST_URL=http://$IP:31212
fi

echo "waiting for servers to become responsive"
until curl --fail -s $TEST_URL/hub/api; do
Expand Down
13 changes: 13 additions & 0 deletions ci/vagrant-run-kind.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/sh
# Run this inside vagrant to test the travis scripts

set -eux
export SCENARIO=1.14
export TRAVIS_BRANCH=master
export TRAVIS_PULL_REQUEST=true
export TRAVIS_COMMIT_RANGE=`git rev-parse --short origin/master`..`git rev-parse --short HEAD`

pip3 install --no-cache-dir -r dev-requirements.txt
. ./ci/kind-${SCENARIO}.env
./ci/install-kind.sh
./ci/travis-script.sh
2 changes: 1 addition & 1 deletion ci/vagrant-run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ export TRAVIS_COMMIT_RANGE=`git rev-parse --short origin/master`..`git rev-parse

pip3 install --no-cache-dir -r dev-requirements.txt
. ./ci/minikube-${SCENARIO}.env
./ci/install.sh
./ci/install-minikube.sh
./ci/travis-script.sh
1 change: 1 addition & 0 deletions ci/xenial-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ curl -O https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/
# dpkg won't install dependencies
dpkg -i $DOCKER_DEB || apt-get install -f -y
docker info
usermod -G docker vagrant

install -o vagrant -g vagrant -d /home/vagrant/bin

Expand Down