-
Notifications
You must be signed in to change notification settings - Fork 0
157 lines (138 loc) · 5.1 KB
/
e2e.yml
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
name: e2e
on:
push:
branches:
- 'main'
tags:
- 'v*'
pull_request:
branches: [ main ]
workflow_dispatch:
env:
GO_VERSION: "1.22.0"
K8S_VERSION: "v1.31.0"
KIND_VERSION: "v0.24.0"
IMAGE_NAME: aojea/kube-network-driver
KIND_CLUSTER_NAME: kind
permissions: write-all
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: ${{ env.GO_VERSION }}
id: go
- name: Check out code
uses: actions/checkout@v2
- name: Build
run: |
docker build -t aojea/kube-network-driver:test -f Dockerfile .
mkdir _output
docker save aojea/kube-network-driver:test > _output/kube-network-driver-image.tar
- uses: actions/upload-artifact@v2
with:
name: test-image
path: _output/kube-network-driver-image.tar
e2e:
name: e2e
runs-on: ubuntu-22.04
timeout-minutes: 100
needs:
- build
strategy:
fail-fast: false
matrix:
ipFamily: ["ipv4", "ipv6"]
env:
JOB_NAME: "kube-network-driver-${{ matrix.ipFamily }}-${{ matrix.proxyMode }}"
IP_FAMILY: ${{ matrix.ipFamily }}
KUBEPROXY_MODE: ${{ matrix.proxyMode }}
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Enable ipv4 and ipv6 forwarding
run: |
sudo sysctl -w net.ipv6.conf.all.forwarding=1
sudo sysctl -w net.ipv4.ip_forward=1
- name: Set up environment (download dependencies)
run: |
TMP_DIR=$(mktemp -d)
# Test binaries
curl -L https://dl.k8s.io/${{ env.K8S_VERSION }}/kubernetes-test-linux-amd64.tar.gz -o ${TMP_DIR}/kubernetes-test-linux-amd64.tar.gz
tar xvzf ${TMP_DIR}/kubernetes-test-linux-amd64.tar.gz \
--directory ${TMP_DIR} \
--strip-components=3 kubernetes/test/bin/ginkgo kubernetes/test/bin/e2e.test
# kubectl
curl -L https://dl.k8s.io/${{ env.K8S_VERSION }}/bin/linux/amd64/kubectl -o ${TMP_DIR}/kubectl
# kind
curl -Lo ${TMP_DIR}/kind https://kind.sigs.k8s.io/dl/${{ env.KIND_VERSION }}/kind-linux-amd64
# kind image
git clone --single-branch --branch master https://github.com/kubernetes/kubernetes ${TMP_DIR}/kubernetes
/usr/local/bin/kind build node-image ${TMP_DIR}/kubernetes --image aojea/kindnode:latest
# Install
sudo cp ${TMP_DIR}/ginkgo /usr/local/bin/ginkgo
sudo cp ${TMP_DIR}/e2e.test /usr/local/bin/e2e.test
sudo cp ${TMP_DIR}/kubectl /usr/local/bin/kubectl
sudo cp ${TMP_DIR}/kind /usr/local/bin/kind
sudo chmod +x /usr/local/bin/*
# Clean
sudo rm -rf ${TMP_DIR}
- name: Create multi node cluster
run: |
# output_dir
mkdir -p _artifacts
# create cluster
kind create cluster --name ${{ env.KIND_CLUSTER_NAME}} --image aojea/kindnode:latest --config kind.yaml
# dump the kubeconfig for later
/usr/local/bin/kind get kubeconfig --name ${{ env.KIND_CLUSTER_NAME}} > _artifacts/kubeconfig.conf
- uses: actions/download-artifact@v2
with:
name: test-image
- name: Install kube-network-driver
run: |
# preload kube-network-driver image
docker load --input kube-network-driver-image.tar
/usr/local/bin/kind load docker-image aojea/kube-network-driver:test --name ${{ env.KIND_CLUSTER_NAME}}
sed -i s#aojea/kube-network-driver.*#aojea/kube-network-driver:test# install.yaml
/usr/local/bin/kubectl apply -f ./install.yaml
- name: Get Cluster status
run: |
# wait network is ready
sleep 5
/usr/local/bin/kubectl get nodes -o wide
/usr/local/bin/kubectl get pods -A
/usr/local/bin/kubectl wait --timeout=1m --for=condition=ready pods --namespace=kube-system -l k8s-app=kube-dns
/usr/local/bin/kubectl wait --timeout=1m --for=condition=ready pods --namespace=kube-system -l app=network-driver
- name: Run tests
run: |
export KUBERNETES_CONFORMANCE_TEST='y'
export E2E_REPORT_DIR=${PWD}/_artifacts
# Run tests
/usr/local/bin/ginkgo --nodes=25 \
--focus="DRA" \
/usr/local/bin/e2e.test \
-- \
--kubeconfig=${PWD}/_artifacts/kubeconfig.conf \
--provider=local \
--dump-logs-on-failure=false \
--report-dir=${E2E_REPORT_DIR} \
--disable-log-dump=true
- name: Upload Junit Reports
if: always()
uses: actions/upload-artifact@v2
with:
name: kind-junit-${{ env.JOB_NAME }}-${{ github.run_id }}
path: './_artifacts/*.xml'
- name: Export logs
if: always()
run: |
/usr/local/bin/kind export logs --name ${KIND_CLUSTER_NAME} --loglevel=debug ./_artifacts/logs
- name: Upload logs
if: always()
uses: actions/upload-artifact@v2
with:
name: kind-logs-${{ env.JOB_NAME }}-${{ github.run_id }}
path: ./_artifacts/logs