From c713ed7a55d9cf3e3348aa661dd3e06bf3105280 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Thu, 11 Jun 2020 13:59:43 -0700 Subject: [PATCH] Add test-build-container-image-release job Add a job that tests the build-container-image role as it would be used in a tag-based release pipeline (as opposed to check or gate+promote). Also, correct an issue in the role where we assumed zuul.change existed. Change-Id: If2566764a52726ce45fff9b5e96ce9a42d513d8d --- roles/build-docker-image/tasks/build.yaml | 4 ++- test-playbooks/container/docker/Dockerfile | 3 +++ ...est-build-container-image-release-pre.yaml | 5 ++++ .../test-build-container-image-release.yaml | 25 +++++++++++++++++++ zuul-tests.d/container-roles-jobs.yaml | 25 +++++++++++++++++++ 5 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 test-playbooks/container/docker/Dockerfile create mode 100644 test-playbooks/container/test-build-container-image-release-pre.yaml create mode 100644 test-playbooks/container/test-build-container-image-release.yaml diff --git a/roles/build-docker-image/tasks/build.yaml b/roles/build-docker-image/tasks/build.yaml index d61aca355..8c622aaeb 100644 --- a/roles/build-docker-image/tasks/build.yaml +++ b/roles/build-docker-image/tasks/build.yaml @@ -22,7 +22,9 @@ {% for label in zj_image.labels | default([]) -%} --label "{{ label }}" {% endfor %} - --label "org.zuul-ci.change={{ zuul.change }}" + {% if zuul.change | default(false) -%} + --label "org.zuul-ci.change={{ zuul.change }}" + {% endif -%} --label "org.zuul-ci.change_url={{ zuul.change_url }}" args: chdir: "{{ zuul_work_dir }}/{{ zj_image.context }}" diff --git a/test-playbooks/container/docker/Dockerfile b/test-playbooks/container/docker/Dockerfile new file mode 100644 index 000000000..d32f9e817 --- /dev/null +++ b/test-playbooks/container/docker/Dockerfile @@ -0,0 +1,3 @@ +FROM docker.io/library/debian:testing +RUN touch "/test-nonce" +CMD echo "Zuul container test"; sleep infinity diff --git a/test-playbooks/container/test-build-container-image-release-pre.yaml b/test-playbooks/container/test-build-container-image-release-pre.yaml new file mode 100644 index 000000000..e576fb482 --- /dev/null +++ b/test-playbooks/container/test-build-container-image-release-pre.yaml @@ -0,0 +1,5 @@ +- hosts: all + tasks: + - name: Install container system + include_role: + name: "ensure-{{ container_command }}" diff --git a/test-playbooks/container/test-build-container-image-release.yaml b/test-playbooks/container/test-build-container-image-release.yaml new file mode 100644 index 000000000..9d5243e1e --- /dev/null +++ b/test-playbooks/container/test-build-container-image-release.yaml @@ -0,0 +1,25 @@ +- hosts: all + tasks: + - name: Save zuul variables + set_fact: + old_zuul: "{{ zuul }}" + - name: Set simulated zuul variables + set_fact: + new_zuul: + change_url: "{{ old_zuul.change_url }}" + executor: "{{ old_zuul.executor }}" + newrev: c12f3fe1defe8b61d59061363c9c04fb520dae18 + project: "{{ old_zuul.project }}" + ref: refs/tags/3.19.0 + tag: 3.19.0 + - name: "Build a container image" + include_role: + name: "build-{{ (container_command == 'docker') | ternary('docker', 'container') }}-image" + vars: + docker_images: + - context: test-playbooks/container/docker + repository: "testrepo" + # This is what the Zuul repo uses to tag its releases: + tags: "{{ zuul.tag is defined | ternary([zuul.get('tag', '').split('.')[0], '.'.join(zuul.get('tag', '').split('.')[:2]), zuul.get('tag', '')], ['latest']) }}" + container_images: "{{ docker_images }}" + zuul: "{{ new_zuul }}" diff --git a/zuul-tests.d/container-roles-jobs.yaml b/zuul-tests.d/container-roles-jobs.yaml index 385d30104..0280b51d0 100644 --- a/zuul-tests.d/container-roles-jobs.yaml +++ b/zuul-tests.d/container-roles-jobs.yaml @@ -62,6 +62,30 @@ - name: ubuntu-xenial label: ubuntu-xenial +- job: + name: zuul-jobs-test-build-docker-image-release + description: | + Test building a docker image in a release pipeline. + + This job tests changes to the build-docker-image role, + simulating its use within a tag-based release pipeline. It is + not meant to be used directly but rather run on changes to roles + in the zuul-jobs repo. + files: + - roles/ensure-docker/.* + - roles/ensure-package-repositories/.* + - roles/build-docker-image/.* + - test-playbooks/container/.* + pre-run: test-playbooks/container/test-build-container-image-release-pre.yaml + run: test-playbooks/container/test-build-container-image-release.yaml + vars: + container_command: docker + multiarch: false + nodeset: + nodes: + - name: builder + label: ubuntu-bionic + - job: name: zuul-jobs-test-registry-docker description: | @@ -353,6 +377,7 @@ - zuul-jobs-test-ensure-docker-fedora-31 - zuul-jobs-test-ensure-docker-ubuntu-bionic - zuul-jobs-test-ensure-docker-ubuntu-xenial + - zuul-jobs-test-build-docker-image-release - zuul-jobs-test-registry-docker - zuul-jobs-test-registry-docker-multiarch - zuul-jobs-test-registry-podman