Merge commit '915dbb98ef6e5e0e1f03863c48af68f5391f8ec2' into prow-update-master
This commit is contained in:
@@ -104,3 +104,47 @@ naming convention `<hostpath-deployment-version>-on-<kubernetes-version>`.
|
|||||||
CSI hostpath driver with the new sidecars in the [CSI repo](https://github.com/kubernetes-csi/csi-driver-host-path/tree/master/deploy)
|
CSI hostpath driver with the new sidecars in the [CSI repo](https://github.com/kubernetes-csi/csi-driver-host-path/tree/master/deploy)
|
||||||
and [k/k
|
and [k/k
|
||||||
in-tree](https://github.com/kubernetes/kubernetes/tree/master/test/e2e/testing-manifests/storage-csi/hostpath/hostpath)
|
in-tree](https://github.com/kubernetes/kubernetes/tree/master/test/e2e/testing-manifests/storage-csi/hostpath/hostpath)
|
||||||
|
|
||||||
|
## Adding support for a new Kubernetes release
|
||||||
|
|
||||||
|
1. Add the new release to `k8s_versions` in
|
||||||
|
https://github.com/kubernetes/test-infra/blob/090dec5dd535d5f61b7ba52e671a810f5fc13dfd/config/jobs/kubernetes-csi/gen-jobs.sh#L25
|
||||||
|
to enable generating a job for it. Set `experimental_k8s_version`
|
||||||
|
in
|
||||||
|
https://github.com/kubernetes/test-infra/blob/090dec5dd535d5f61b7ba52e671a810f5fc13dfd/config/jobs/kubernetes-csi/gen-jobs.sh#L40
|
||||||
|
to ensure that the new jobs aren't run for PRs unless explicitly
|
||||||
|
requested. Generate and submit the new jobs.
|
||||||
|
1. Create a test PR to try out the new job in some repo with `/test
|
||||||
|
pull-kubernetes-csi-<repo>-<x.y>-on-kubernetes-<x.y>` where x.y
|
||||||
|
matches the Kubernetes release. Alternatively, run .prow.sh in that
|
||||||
|
repo locally with `CSI_PROW_KUBERNETES_VERSION=x.y.z`.
|
||||||
|
1. Optional: update to a [new
|
||||||
|
release](https://github.com/kubernetes-sigs/kind/tags) of kind with
|
||||||
|
pre-built images for the new Kubernetes release. This is optional
|
||||||
|
if the current version of kind is able to build images for the new
|
||||||
|
Kubernetes release. However, jobs require less resources when they
|
||||||
|
don't need to build those images from the Kubernetes source code.
|
||||||
|
This change needs to be tried out in a PR against a component
|
||||||
|
first, then get submitted against csi-release-tools.
|
||||||
|
1. Optional: propagate the updated csi-release-tools to all components
|
||||||
|
with the script from
|
||||||
|
https://github.com/kubernetes-csi/csi-release-tools/issues/7#issuecomment-707025402
|
||||||
|
1. Once it is likely to work in all components, unset
|
||||||
|
`experimental_k8s_version` and submit the updated jobs.
|
||||||
|
1. Once all sidecars for the new Kubernetes release are released,
|
||||||
|
either bump the version number of the images in the existing
|
||||||
|
[csi-driver-host-path
|
||||||
|
deployments](https://github.com/kubernetes-csi/csi-driver-host-path/tree/master/deploy)
|
||||||
|
and/or create a new deployment, depending on what Kubernetes
|
||||||
|
release an updated sidecar is compatible with. If no new deployment
|
||||||
|
is needed, then add a symlink to document that there intentionally
|
||||||
|
isn't a separate deployment. This symlink is not needed for Prow
|
||||||
|
testing because that will use "kubernetes-latest" as fallback.
|
||||||
|
Update that link when creating a new deployment.
|
||||||
|
1. Create a new csi-driver-host-path release.
|
||||||
|
1. Bump `CSI_PROW_DRIVER_VERSION` in prow.sh to that new release and
|
||||||
|
(eventually) roll that change out to all repos by updating
|
||||||
|
`release-tools` in them. This is used when testing manually. The
|
||||||
|
Prow jobs override that value, so also update
|
||||||
|
`hostpath_driver_version` in
|
||||||
|
https://github.com/kubernetes/test-infra/blob/91b04e6af3a40a9bcff25aa030850a4721e2dd2b/config/jobs/kubernetes-csi/gen-jobs.sh#L46-L47
|
||||||
|
@@ -55,6 +55,12 @@ mods=$( (set -x; curl --silent --show-error --fail "https://raw.githubuserconten
|
|||||||
sed -n 's|.*k8s.io/\(.*\) => ./staging/src/k8s.io/.*|k8s.io/\1|p'
|
sed -n 's|.*k8s.io/\(.*\) => ./staging/src/k8s.io/.*|k8s.io/\1|p'
|
||||||
) || die "failed to determine Kubernetes staging modules"
|
) || die "failed to determine Kubernetes staging modules"
|
||||||
for mod in $mods; do
|
for mod in $mods; do
|
||||||
|
if ! (env GO111MODULE=on go mod graph) | grep "$mod@" > /dev/null; then
|
||||||
|
echo "Kubernetes module $mod is not used, skipping"
|
||||||
|
# Remove the module from go.mod "replace" that was added by an older version of this script.
|
||||||
|
(set -x; env GO111MODULE=on go mod edit "-dropreplace=$mod") || die "'go mod edit' failed"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
# The presence of a potentially incomplete go.mod file affects this command,
|
# The presence of a potentially incomplete go.mod file affects this command,
|
||||||
# so move elsewhere.
|
# so move elsewhere.
|
||||||
modinfo=$(set -x; cd /; env GO111MODULE=on go mod download -json "$mod@kubernetes-${k8s}") ||
|
modinfo=$(set -x; cd /; env GO111MODULE=on go mod download -json "$mod@kubernetes-${k8s}") ||
|
||||||
|
@@ -136,6 +136,9 @@ kind_version_default () {
|
|||||||
case "${CSI_PROW_KUBERNETES_VERSION}" in
|
case "${CSI_PROW_KUBERNETES_VERSION}" in
|
||||||
latest|master)
|
latest|master)
|
||||||
echo main;;
|
echo main;;
|
||||||
|
1.21*|release-1.21)
|
||||||
|
# TODO: replace this special case once the next KinD release supports 1.21.
|
||||||
|
echo main;;
|
||||||
*)
|
*)
|
||||||
echo v0.10.0;;
|
echo v0.10.0;;
|
||||||
esac
|
esac
|
||||||
@@ -159,11 +162,6 @@ kindest/node:v1.14.10@sha256:3fbed72bcac108055e46e7b4091eb6858ad628ec51bf693c21f
|
|||||||
# Use kind node-image --type=bazel by default, but allow to disable that.
|
# Use kind node-image --type=bazel by default, but allow to disable that.
|
||||||
configvar CSI_PROW_USE_BAZEL true "use Bazel during 'kind node-image' invocation"
|
configvar CSI_PROW_USE_BAZEL true "use Bazel during 'kind node-image' invocation"
|
||||||
|
|
||||||
# Work directory. It has to allow running executables, therefore /tmp
|
|
||||||
# is avoided. Cleaning up after the script is intentionally left to
|
|
||||||
# the caller.
|
|
||||||
configvar CSI_PROW_WORK "$(mkdir -p "$GOPATH/pkg" && mktemp -d "$GOPATH/pkg/csiprow.XXXXXXXXXX")" "work directory"
|
|
||||||
|
|
||||||
# By default, this script tests sidecars with the CSI hostpath driver,
|
# By default, this script tests sidecars with the CSI hostpath driver,
|
||||||
# using the install_csi_driver function. That function depends on
|
# using the install_csi_driver function. That function depends on
|
||||||
# a deployment script that it searches for in several places:
|
# a deployment script that it searches for in several places:
|
||||||
@@ -190,8 +188,8 @@ configvar CSI_PROW_WORK "$(mkdir -p "$GOPATH/pkg" && mktemp -d "$GOPATH/pkg/csip
|
|||||||
# CSI_PROW_DEPLOYMENT variable can be set in the
|
# CSI_PROW_DEPLOYMENT variable can be set in the
|
||||||
# .prow.sh of each component when there are breaking changes
|
# .prow.sh of each component when there are breaking changes
|
||||||
# that require using a non-default deployment. The default
|
# that require using a non-default deployment. The default
|
||||||
# is a deployment named "kubernetes-x.yy" (if available),
|
# is a deployment named "kubernetes-x.yy${CSI_PROW_DEPLOYMENT_SUFFIX}" (if available),
|
||||||
# otherwise "kubernetes-latest".
|
# otherwise "kubernetes-latest${CSI_PROW_DEPLOYMENT_SUFFIX}".
|
||||||
# "none" disables the deployment of the hostpath driver.
|
# "none" disables the deployment of the hostpath driver.
|
||||||
#
|
#
|
||||||
# When no deploy script is found (nothing in `deploy` directory,
|
# When no deploy script is found (nothing in `deploy` directory,
|
||||||
@@ -203,6 +201,7 @@ configvar CSI_PROW_WORK "$(mkdir -p "$GOPATH/pkg" && mktemp -d "$GOPATH/pkg/csip
|
|||||||
configvar CSI_PROW_DRIVER_VERSION "v1.3.0" "CSI driver version"
|
configvar CSI_PROW_DRIVER_VERSION "v1.3.0" "CSI driver version"
|
||||||
configvar CSI_PROW_DRIVER_REPO https://github.com/kubernetes-csi/csi-driver-host-path "CSI driver repo"
|
configvar CSI_PROW_DRIVER_REPO https://github.com/kubernetes-csi/csi-driver-host-path "CSI driver repo"
|
||||||
configvar CSI_PROW_DEPLOYMENT "" "deployment"
|
configvar CSI_PROW_DEPLOYMENT "" "deployment"
|
||||||
|
configvar CSI_PROW_DEPLOYMENT_SUFFIX "" "additional suffix in kubernetes-x.yy[suffix].yaml files"
|
||||||
|
|
||||||
# The install_csi_driver function may work also for other CSI drivers,
|
# The install_csi_driver function may work also for other CSI drivers,
|
||||||
# as long as they follow the conventions of the CSI hostpath driver.
|
# as long as they follow the conventions of the CSI hostpath driver.
|
||||||
@@ -361,10 +360,23 @@ configvar CSI_SNAPSHOTTER_VERSION "$(default_csi_snapshotter_version)" "external
|
|||||||
# to all the K8s versions we test against
|
# to all the K8s versions we test against
|
||||||
configvar CSI_PROW_E2E_SKIP 'Disruptive|different\s+node' "tests that need to be skipped"
|
configvar CSI_PROW_E2E_SKIP 'Disruptive|different\s+node' "tests that need to be skipped"
|
||||||
|
|
||||||
# This is the directory for additional result files. Usually set by Prow, but
|
# This creates directories that are required for testing.
|
||||||
# if not (for example, when invoking manually) it defaults to the work directory.
|
ensure_paths () {
|
||||||
configvar ARTIFACTS "${CSI_PROW_WORK}/artifacts" "artifacts"
|
# Work directory. It has to allow running executables, therefore /tmp
|
||||||
mkdir -p "${ARTIFACTS}"
|
# is avoided. Cleaning up after the script is intentionally left to
|
||||||
|
# the caller.
|
||||||
|
configvar CSI_PROW_WORK "$(mkdir -p "$GOPATH/pkg" && mktemp -d "$GOPATH/pkg/csiprow.XXXXXXXXXX")" "work directory"
|
||||||
|
|
||||||
|
# This is the directory for additional result files. Usually set by Prow, but
|
||||||
|
# if not (for example, when invoking manually) it defaults to the work directory.
|
||||||
|
configvar ARTIFACTS "${CSI_PROW_WORK}/artifacts" "artifacts"
|
||||||
|
mkdir -p "${ARTIFACTS}"
|
||||||
|
|
||||||
|
# For additional tools.
|
||||||
|
CSI_PROW_BIN="${CSI_PROW_WORK}/bin"
|
||||||
|
mkdir -p "${CSI_PROW_BIN}"
|
||||||
|
PATH="${CSI_PROW_BIN}:$PATH"
|
||||||
|
}
|
||||||
|
|
||||||
run () {
|
run () {
|
||||||
echo "$(date) $(go version | sed -e 's/.*version \(go[^ ]*\).*/\1/') $(if [ "$(pwd)" != "${REPO_DIR}" ]; then pwd; fi)\$" "$@" >&2
|
echo "$(date) $(go version | sed -e 's/.*version \(go[^ ]*\).*/\1/') $(if [ "$(pwd)" != "${REPO_DIR}" ]; then pwd; fi)\$" "$@" >&2
|
||||||
@@ -384,11 +396,6 @@ die () {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# For additional tools.
|
|
||||||
CSI_PROW_BIN="${CSI_PROW_WORK}/bin"
|
|
||||||
mkdir -p "${CSI_PROW_BIN}"
|
|
||||||
PATH="${CSI_PROW_BIN}:$PATH"
|
|
||||||
|
|
||||||
# Ensure that PATH has the desired version of the Go tools, then run command given as argument.
|
# Ensure that PATH has the desired version of the Go tools, then run command given as argument.
|
||||||
# Empty parameter uses the already installed Go. In Prow, that version is kept up-to-date by
|
# Empty parameter uses the already installed Go. In Prow, that version is kept up-to-date by
|
||||||
# bumping the container image regularly.
|
# bumping the container image regularly.
|
||||||
@@ -647,9 +654,9 @@ find_deployment () {
|
|||||||
|
|
||||||
# Ignore: See if you can use ${variable//search/replace} instead.
|
# Ignore: See if you can use ${variable//search/replace} instead.
|
||||||
# shellcheck disable=SC2001
|
# shellcheck disable=SC2001
|
||||||
file="$dir/kubernetes-$(echo "${CSI_PROW_KUBERNETES_VERSION}" | sed -e 's/\([0-9]*\)\.\([0-9]*\).*/\1.\2/')/deploy.sh"
|
file="$dir/kubernetes-$(echo "${CSI_PROW_KUBERNETES_VERSION}" | sed -e 's/\([0-9]*\)\.\([0-9]*\).*/\1.\2/')${CSI_PROW_DEPLOYMENT_SUFFIX}/deploy.sh"
|
||||||
if ! [ -e "$file" ]; then
|
if ! [ -e "$file" ]; then
|
||||||
file="$dir/kubernetes-latest/deploy.sh"
|
file="$dir/kubernetes-latest${CSI_PROW_DEPLOYMENT_SUFFIX}/deploy.sh"
|
||||||
if ! [ -e "$file" ]; then
|
if ! [ -e "$file" ]; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@@ -1098,6 +1105,9 @@ main () {
|
|||||||
local images ret
|
local images ret
|
||||||
ret=0
|
ret=0
|
||||||
|
|
||||||
|
# Set up work directory.
|
||||||
|
ensure_paths
|
||||||
|
|
||||||
images=
|
images=
|
||||||
if ${CSI_PROW_BUILD_JOB}; then
|
if ${CSI_PROW_BUILD_JOB}; then
|
||||||
# A successful build is required for testing.
|
# A successful build is required for testing.
|
||||||
@@ -1259,6 +1269,9 @@ gcr_cloud_build () {
|
|||||||
# Required for "docker buildx build --push".
|
# Required for "docker buildx build --push".
|
||||||
gcloud auth configure-docker
|
gcloud auth configure-docker
|
||||||
|
|
||||||
|
# Might not be needed here, but call it just in case.
|
||||||
|
ensure_paths
|
||||||
|
|
||||||
if find . -name Dockerfile | grep -v ^./vendor | xargs --no-run-if-empty cat | grep -q ^RUN; then
|
if find . -name Dockerfile | grep -v ^./vendor | xargs --no-run-if-empty cat | grep -q ^RUN; then
|
||||||
# Needed for "RUN" steps on non-linux/amd64 platforms.
|
# Needed for "RUN" steps on non-linux/amd64 platforms.
|
||||||
# See https://github.com/multiarch/qemu-user-static#getting-started
|
# See https://github.com/multiarch/qemu-user-static#getting-started
|
||||||
|
32
release-tools/pull-test.sh
Executable file
32
release-tools/pull-test.sh
Executable file
@@ -0,0 +1,32 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# Copyright 2021 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 script is called by pull Prow jobs for the csi-release-tools
|
||||||
|
# repo to ensure that the changes in the PR work when imported into
|
||||||
|
# some other repo.
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
# It must be called inside the updated csi-release-tools repo.
|
||||||
|
CSI_RELEASE_TOOLS_DIR="$(pwd)"
|
||||||
|
|
||||||
|
# Update the other repo.
|
||||||
|
cd "$PULL_TEST_REPO_DIR"
|
||||||
|
git subtree pull --squash --prefix=release-tools "$CSI_RELEASE_TOOLS_DIR" master
|
||||||
|
git log -n2
|
||||||
|
|
||||||
|
# Now fall through to testing.
|
||||||
|
exec ./.prow.sh
|
Reference in New Issue
Block a user