Add CI jobs to track the master and 1.2 branch with Trusty images

Add two CI jobs that run e2e tests on GCE with Trusty images (on both the master
and the nodes) on the `master` and `release-1.2` branch. Both tests use the
latest Trusty build from its `HEAD`. We will use these jobs to guard
kubernetes-Trusty compatibility.

These jobs mimic the existing `kubernetes-e2e-gce` and `kubernetes-e2e-gce-1-2`,
which follow `kubernetes-build` and `kubernetes-build-1-2`, respectively.

Additionally, move all Trusty related jobs into one section in the config file.
This commit is contained in:
Daniel Wang 2016-03-15 22:17:52 -07:00
parent ad7a0da5af
commit 3a56b68cc5
2 changed files with 251 additions and 99 deletions

View File

@ -94,11 +94,69 @@ function unpack_binaries() {
tar -xzf kubernetes-test.tar.gz
}
# GCP Project to fetch Trusty images.
function get_trusty_image_project() {
local project=""
# Retry the gsutil command a couple times to mitigate the effect of
# transient server errors.
for n in $(seq 3); do
project="$(gsutil cat "gs://trusty-images/image-project.txt")" && break || sleep 1
done
if [[ -z "${project}" ]]; then
echo "Failed to find the image project for Trusty images."
exit 1
fi
echo "${project}"
# Clean up gsutil artifacts otherwise the later test stage will complain.
rm -rf .config &> /dev/null
rm -rf .gsutil &> /dev/null
}
# Get the latest Trusty image for a Jenkins job.
function get_latest_trusty_image() {
local image_project="$1"
local image_type="$2"
local image_index=""
if [[ "${image_type}" == head ]]; then
image_index="trusty-head"
elif [[ "${image_type}" == dev ]]; then
image_index="trusty-dev"
elif [[ "${image_type}" == beta ]]; then
image_index="trusty-beta"
elif [[ "${image_type}" == stable ]]; then
image_index="trusty-stable"
fi
local image=""
# Retry the gsutil command a couple times to mitigate the effect of
# transient server errors.
for n in $(seq 3); do
image="$(gsutil cat "gs://${image_project}/image-indices/latest-test-image-${image_index}")" && break || sleep 1
done
if [[ -z "${image}" ]]; then
echo "Failed to find Trusty image for ${image_type}"
exit 1
fi
echo "${image}"
# Clean up gsutil artifacts otherwise the later test stage will complain.
rm -rf .config &> /dev/null
rm -rf .gsutil &> /dev/null
}
echo "--------------------------------------------------------------------------------"
echo "Test Environment:"
printenv | sort
echo "--------------------------------------------------------------------------------"
# We get the image project and name for Trusty dynamically.
if [[ "${JENKINS_USE_TRUSTY_IMAGES:-}" =~ ^[yY]$ ]]; then
trusty_image_project="$(get_trusty_image_project)"
trusty_image="$(get_latest_trusty_image "${trusty_image_project}" "head")"
export KUBE_MASTER_IMAGE_PROJECT="${trusty_image_project}"
export KUBE_MASTER_IMAGE="${trusty_image}"
export KUBE_OS_DISTRIBUTION="trusty"
fi
# We get the Kubernetes tarballs unless we are going to use old ones
if [[ "${JENKINS_USE_EXISTING_BINARIES:-}" =~ ^[yY]$ ]]; then
echo "Using existing binaries; not cleaning, fetching, or unpacking new ones."

View File

@ -40,25 +40,7 @@
- timestamps
- workspace-cleanup
# Template for e2e test jobs that run on GCE with Trusty images.
- job-template:
name: 'kubernetes-e2e-gce-trusty-{suffix}'
<<: *e2e_job_defaults
triggers:
- timed: 'H H/8 * * *'
publishers:
- e2e-publishers:
recipients: '{emails}'
- description-setter:
regexp: KUBE_GCE_MINION_IMAGE=(.*)
- groovy-postbuild:
script: |
def trustyImageMatcher = manager.getLogMatcher("KUBE_GCE_MINION_IMAGE=(.*)")
if(trustyImageMatcher?.matches()) manager.addShortText("<b>Trusty Image: " + trustyImageMatcher.group(1) + "</b>", "grey", "white", "0px", "white")
def k8sVersionMatcher = manager.getLogMatcher("Using\\spublished\\sversion\\s(.*)\\s\\(from.*")
if(k8sVersionMatcher?.matches()) manager.addShortText("<br><b>Kubernetes version: " + k8sVersionMatcher.group(1) + "</b>", "grey", "white", "0px", "white")
# Template for the rest of e2e test jobs.
# Template for most e2e test jobs.
- job-template:
name: 'kubernetes-e2e-{suffix}'
<<: *e2e_job_defaults
@ -285,7 +267,7 @@
export TEST_CLUSTER_DELETE_COLLECTION_WORKERS="--delete-collection-workers=16"
jobs:
- 'kubernetes-e2e-{suffix}'
- project:
name: kubernetes-e2e-gke-1-2
trigger-job: 'kubernetes-build-1.2'
@ -390,47 +372,6 @@
jobs:
- 'kubernetes-e2e-{suffix}'
- project:
name: kubernetes-e2e-gke-trusty
trigger-job: 'kubernetes-build-1.1'
test-owner: 'wonderfly@google.com'
branch: 'release-1.1'
runner: '{old-runner-1-1}'
post-env: ''
emails: 'wonderfly@google.com,qzheng@google.com'
suffix:
- 'gke-trusty-prod':
timeout: 180
description: |
Run e2e tests with Trusty as node image using the following config:<br>
- provider: GKE<br>
- api proxy: prod<br>
- borg job: prod<br>
- client (kubectl): release/stable.txt<br>
- cluster (k8s): release/stable.txt<br>
- tests: release/stable.txt
- 'gke-trusty-staging':
timeout: 300
description: |
Run e2e tests with Trusty as node image using the following config:<br>
- provider: GKE<br>
- api proxy: staging<br>
- borg job: staging<br>
- client (kubectl): release/stable.txt<br>
- cluster (k8s): release/stable.txt<br>
- tests: release/stable.txt
- 'gke-trusty-test':
timeout: 300
description: |
Run e2e tests with Trusty as node image using the following config:<br>
- provider: GKE<br>
- api proxy: staging<br>
- borg job: test<br>
- client (kubectl): release/stable.txt<br>
- cluster (k8s): release/stable.txt<br>
- tests: release/stable.txt
jobs:
- 'kubernetes-e2e-{suffix}'
- project:
name: kubernetes-e2e-gce-1.1
@ -543,44 +484,6 @@
jobs:
- 'kubernetes-e2e-{suffix}'
- project:
name: kubernetes-e2e-gce-trusty
test-owner: 'wonderfly@google.com'
branch: 'release-1.1'
emails: 'wonderfly@google.com,qzheng@google.com'
runner: '{old-runner-1-1}'
post-env: ''
suffix:
- 'head-release':
description: 'Continuously test Trusty build against latest k8s release.'
timeout: 150
- 'dev-release':
description: 'Continuously test Trusty dev build against latest k8s release.'
timeout: 150
- 'beta-release':
description: 'Continuously test Trusty beta build against latest k8s release.'
timeout: 150
- 'stable-release':
description: 'Continuously test Trusty stable build against latest k8s release.'
timeout: 150
- 'head-slow':
description: 'Run slow E2E tests on latest Trusty build.'
timeout: 270
- 'dev-slow':
# Constantly failing due to a known issue of the image. Disabled
# until the issue is resolved.
disable_job: true
description: 'Run slow E2E tests on latest Trusty dev build.'
timeout: 270
- 'beta-slow':
description: 'Run slow E2E tests on latest Trusty beta build.'
timeout: 270
- 'stable-slow':
description: 'Run slow E2E tests on latest Trusty stable build.'
timeout: 270
jobs:
- 'kubernetes-e2e-gce-trusty-{suffix}'
- project:
name: kubernetes-e2e-gce-enormous-cluster
test-owner: 'gmarek'
@ -620,3 +523,194 @@
jobs:
- 'kubernetes-e2e-{suffix}'
# ==============================================================================
# NOTE: From here on all jobs use Trusty as the image for master and/or nodes.
# Please add templates/groups/projects/jobs that use ContainerVm above/below
# this section (search "End of Trusty jobs" for the ending separator).
# Template for e2e test jobs that run on GCE with Trusty images against
# kubernetes HEAD.
- job-template:
name: 'kubernetes-e2e-gce-trusty-ci-{suffix}'
<<: *e2e_job_defaults
triggers:
- reverse:
jobs: '{trigger-job}'
result: success
- timed: '{cron-string}'
publishers:
- e2e-publishers:
recipients: '{emails}'
- description-setter:
regexp: KUBE_GCE_MASTER_IMAGE=(.*)
- groovy-postbuild:
script: |
def trustyImageMatcher = manager.getLogMatcher("KUBE_GCE_MASTER_IMAGE=(.*)")
if(trustyImageMatcher?.matches()) manager.addShortText("<b>Trusty Image: " + trustyImageMatcher.group(1) + "</b>", "grey", "white", "0px", "white")
def k8sVersionMatcher = manager.getLogMatcher("Using\\spublished\\sversion\\s(.*)\\s\\(from.*")
if(k8sVersionMatcher?.matches()) manager.addShortText("<br><b>Kubernetes version: " + k8sVersionMatcher.group(1) + "</b>", "grey", "white", "0px", "white")
# CI jobs that run on GCE with both master and nodes running Trusty images. We
# use these to guard k8s+Trusty compatibility.
- project:
name: kubernetes-e2e-gce-trusty-ci-master
trigger-job: 'kubernetes-build'
test-owner: 'wonderfly@google.com'
emails: 'wonderfly@google.com,qzheng@google.com'
provider-env: |
{gce-provider-env}
export JENKINS_USE_TRUSTY_IMAGES="y"
suffix:
# TODO(wonderfly): For Trusty, we currently only run CI and slow tests.
# More test coverage under way.
- 'master':
description: 'Runs all non-slow, non-serial, non-flaky, tests on GCE with Trusty images in parallel on the master branch.'
timeout: 30
job-env: |
export GINKGO_TEST_ARGS="--ginkgo.skip=\[Slow\]|\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]"
export GINKGO_PARALLEL="y"
export PROJECT="e2e-gce-trusty-ci-master"
- 'slow-master':
description: 'Runs slow tests on GCE with Trusty images, sequentially on the master branch.'
timeout: 60
job-env: |
export GINKGO_TEST_ARGS="--ginkgo.focus=\[Slow\] \
--ginkgo.skip=\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]"
export GINKGO_PARALLEL="y"
export PROJECT="e2e-gce-trusty-ci-master-slow"
jobs:
- 'kubernetes-e2e-gce-trusty-ci-{suffix}'
- project:
name: kubernetes-e2e-gce-trusty-ci-1-2
trigger-job: 'kubernetes-build-1.2'
test-owner: 'wonderfly@google.com'
emails: 'wonderfly@google.com,qzheng@google.com'
provider-env: |
{gce-provider-env}
export JENKINS_PUBLISHED_VERSION="ci/latest-1.2"
export JENKINS_USE_TRUSTY_IMAGES="y"
suffix:
# TODO(wonderfly): For Trusty, we currently only run CI and slow tests.
# More test coverage under way.
- 'release-1.2':
description: 'Runs all non-slow, non-serial, non-flaky, tests on GCE with Trusty images in parallel on the release-1.2 branch.'
timeout: 30
job-env: |
export GINKGO_TEST_ARGS="--ginkgo.skip=\[Slow\]|\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]"
export GINKGO_PARALLEL="y"
export PROJECT="e2e-gce-trusty-ci-1-2"
- 'slow-release-1.2':
description: 'Runs slow tests on GCE with Trusty images, sequentially on the release-1.2 branch.'
timeout: 60
job-env: |
export GINKGO_TEST_ARGS="--ginkgo.focus=\[Slow\] \
--ginkgo.skip=\[Serial\]|\[Disruptive\]|\[Flaky\]|\[Feature:.+\]"
export GINKGO_PARALLEL="y"
export PROJECT="e2e-gce-trusty-ci-slow-1-2"
jobs:
- 'kubernetes-e2e-gce-trusty-ci-{suffix}'
# Template for e2e test jobs that run on GCE with Trusty images against last
# released k8s version. We use these jobs to test Trusty's continuous build.
- job-template:
name: 'kubernetes-e2e-gce-trusty-{suffix}'
<<: *e2e_job_defaults
triggers:
- timed: 'H H/8 * * *'
publishers:
- e2e-publishers:
recipients: '{emails}'
- description-setter:
regexp: KUBE_GCE_MINION_IMAGE=(.*)
- groovy-postbuild:
script: |
def trustyImageMatcher = manager.getLogMatcher("KUBE_GCE_MINION_IMAGE=(.*)")
if(trustyImageMatcher?.matches()) manager.addShortText("<b>Trusty Image: " + trustyImageMatcher.group(1) + "</b>", "grey", "white", "0px", "white")
def k8sVersionMatcher = manager.getLogMatcher("Using\\spublished\\sversion\\s(.*)\\s\\(from.*")
if(k8sVersionMatcher?.matches()) manager.addShortText("<br><b>Kubernetes version: " + k8sVersionMatcher.group(1) + "</b>", "grey", "white", "0px", "white")
# Jobs that run e2e tests on GCE with Trusty images against the latest k8s
# release.
- project:
name: kubernetes-e2e-gce-trusty
test-owner: 'wonderfly@google.com'
branch: 'release-1.1'
emails: 'wonderfly@google.com,qzheng@google.com'
runner: '{old-runner-1-1}'
post-env: ''
suffix:
- 'head-release':
description: 'Continuously test Trusty build against latest k8s release.'
timeout: 150
- 'dev-release':
description: 'Continuously test Trusty dev build against latest k8s release.'
timeout: 150
- 'beta-release':
description: 'Continuously test Trusty beta build against latest k8s release.'
timeout: 150
- 'stable-release':
description: 'Continuously test Trusty stable build against latest k8s release.'
timeout: 150
- 'head-slow':
description: 'Run slow E2E tests on latest Trusty build.'
timeout: 270
- 'dev-slow':
# Constantly failing due to a known issue of the image. Disabled
# until the issue is resolved.
# TODO(wonderfly): Re-enable it once the internal issue is fixed.
disable_job: true
description: 'Run slow E2E tests on latest Trusty dev build.'
timeout: 270
- 'beta-slow':
description: 'Run slow E2E tests on latest Trusty beta build.'
timeout: 270
- 'stable-slow':
description: 'Run slow E2E tests on latest Trusty stable build.'
timeout: 270
jobs:
- 'kubernetes-e2e-gce-trusty-{suffix}'
# Jobs that run e2e tests on GKE with Trusty as node image on the release-1.1 branch.
- project:
name: kubernetes-e2e-gke-trusty
trigger-job: 'kubernetes-build-1.1'
test-owner: 'wonderfly@google.com'
branch: 'release-1.1'
runner: '{old-runner-1-1}'
post-env: ''
emails: 'wonderfly@google.com,qzheng@google.com'
suffix:
- 'gke-trusty-prod':
timeout: 180
description: |
Run e2e tests with Trusty as node image using the following config:<br>
- provider: GKE<br>
- api proxy: prod<br>
- borg job: prod<br>
- client (kubectl): release/stable.txt<br>
- cluster (k8s): release/stable.txt<br>
- tests: release/stable.txt
- 'gke-trusty-staging':
timeout: 300
description: |
Run e2e tests with Trusty as node image using the following config:<br>
- provider: GKE<br>
- api proxy: staging<br>
- borg job: staging<br>
- client (kubectl): release/stable.txt<br>
- cluster (k8s): release/stable.txt<br>
- tests: release/stable.txt
- 'gke-trusty-test':
timeout: 300
description: |
Run e2e tests with Trusty as node image using the following config:<br>
- provider: GKE<br>
- api proxy: staging<br>
- borg job: test<br>
- client (kubectl): release/stable.txt<br>
- cluster (k8s): release/stable.txt<br>
- tests: release/stable.txt
jobs:
- 'kubernetes-e2e-{suffix}'
#============================== End of Trusty jobs =============================