forked from kubernetes/test-infra
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile
123 lines (104 loc) · 4.58 KB
/
Dockerfile
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
# Copyright 2016 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This file creates a build environment for building and running kubernetes
# unit and integration tests
ARG OLD_BAZEL_VERSION
FROM launcher.gcr.io/google/bazel:${OLD_BAZEL_VERSION} as old
FROM gcr.io/k8s-staging-test-infra/bootstrap:v20240308-3b134c2624
# hint to kubetest that it is in CI
ENV KUBETEST_IN_DOCKER="true"
# Go standard envs
ENV GOPATH /go
ENV PATH /usr/local/go/bin:$PATH
RUN mkdir -p /go/bin
ENV PATH $GOPATH/bin:$PATH
# setup k8s repo symlink
RUN mkdir -p /go/src/k8s.io/kubernetes \
&& ln -s /go/src/k8s.io/kubernetes /workspace/kubernetes
# preinstall:
# - graphviz package for graphing profiles
# - bc for shell to junit
# - rpm for building RPMs with Bazel
RUN apt-get update && \
apt-get install -y bc \
graphviz \
rpm && \
rm -rf /var/lib/apt/lists/*
# preinstall this for kops tests xref kubetest prepareAws(...)
# TODO(krzyzacy,justisb,chrislovecnm): remove this
RUN pip install --no-cache-dir --break-system-packages awscli
# install cfssl to prevent https://github.com/kubernetes/kubernetes/issues/55589
# The invocation at the end is to prevent download failures downloads as in the bug.
# TODO(porridge): bump CFSSL_VERSION to one where cfssljson supports the -version flag and test it as well.
ARG CFSSL_VERSION
RUN wget -q -O cfssl "https://pkg.cfssl.org/${CFSSL_VERSION}/cfssl_linux-amd64" && \
wget -q -O cfssljson "https://pkg.cfssl.org/${CFSSL_VERSION}/cfssljson_linux-amd64" && \
chmod +x cfssl cfssljson && \
mv cfssl cfssljson /usr/local/bin && \
cfssl version
# replace kubectl with one from K8S_RELEASE
ARG K8S_RELEASE=latest
RUN rm -f $(which kubectl) && \
export KUBECTL_VERSION=$(curl -L https://dl.k8s.io/release/${K8S_RELEASE}.txt) && \
wget https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl -O /usr/local/bin/kubectl && \
chmod +x /usr/local/bin/kubectl
# install go
ARG GO_VERSION
ENV GO_TARBALL "go${GO_VERSION}.linux-amd64.tar.gz"
RUN wget -q "https://go.dev/dl/${GO_TARBALL}" && \
tar xzf "${GO_TARBALL}" -C /usr/local && \
rm "${GO_TARBALL}"
# install yq
ARG YQ_VERSION
RUN wget -q "https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64" \
-O /usr/local/bin/yq && chmod +x /usr/local/bin/yq
# install bazel
ARG BAZEL_VERSION_ARG
ENV BAZEL_VERSION=${BAZEL_VERSION_ARG}
COPY images/kubekins-e2e/install-bazel.sh /
RUN bash /install-bazel.sh
ARG OLD_BAZEL_VERSION
COPY --from=old \
/usr/local/lib/bazel/bin/bazel-real /usr/local/lib/bazel/bin/bazel-${OLD_BAZEL_VERSION}
# install kind if a version is provided
ARG KIND_VERSION
RUN if [ -n "${KIND_VERSION}" ]; then \
wget -q -O /usr/local/bin/kind https://kind.sigs.k8s.io/dl/v${KIND_VERSION}/kind-linux-amd64 && \
chmod +x /usr/local/bin/kind; \
fi
# install kubetest2 binaries if a version is provided
# kubetest2 must be installed from git as the makefile embeds the git short hash and the day it was built.
ARG KUBETEST2_VERSION
RUN if [ -n "${KUBETEST2_VERSION}" ]; then \
git clone https://github.com/kubernetes-sigs/kubetest2.git /tmp/kubetest2 && \
cd /tmp/kubetest2 && make install-all && rm -rf /tmp/kubetest2; \
fi
# configure dockerd to use mirror.gcr.io
# per instructions at https://cloud.google.com/container-registry/docs/pulling-cached-images
ARG DOCKER_REGISTRY_MIRROR_URL=https://mirror.gcr.io
RUN [ -n "${DOCKER_REGISTRY_MIRROR_URL}" ] && \
echo "DOCKER_OPTS=\"\${DOCKER_OPTS} --registry-mirror=${DOCKER_REGISTRY_MIRROR_URL}\"" | \
tee --append /etc/default/docker
# add env we can debug with the image name:tag
ARG IMAGE_ARG
ENV IMAGE=${IMAGE_ARG}
# everything below will be triggered on every new image tag ...
ADD ["images/kubekins-e2e/kops-e2e-runner.sh", \
"images/kubekins-e2e/kubetest", \
"https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/get-kube.sh", \
"logexporter/cluster/log-dump.sh", \
"logexporter/cluster/logexporter-daemonset.yaml", \
"/workspace/"]
ENV LOG_DUMP_SCRIPT_PATH "/workspace/log-dump.sh"
RUN ["chmod", "+x", "/workspace/get-kube.sh", "/workspace/log-dump.sh"]