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