diff --git a/roles/build-docker-image/common.rst b/roles/build-docker-image/common.rst
index 87a9a30d1..7b04e0441 100644
--- a/roles/build-docker-image/common.rst
+++ b/roles/build-docker-image/common.rst
@@ -130,4 +130,10 @@ using this role.
       added with each sibling project.  Note that projects here must
       be listed in ``required-projects``.
 
+   .. zuul:rolevar:: labels
+      :type: list
+      :default: []
+
+      A list of labels to attach to the built image, in the form of "key=value".
+
 .. _anchors: https://yaml.org/spec/1.2/spec.html#&%20anchor//
diff --git a/roles/build-docker-image/tasks/build.yaml b/roles/build-docker-image/tasks/build.yaml
index 76b21e1ca..5ccea855b 100644
--- a/roles/build-docker-image/tasks/build.yaml
+++ b/roles/build-docker-image/tasks/build.yaml
@@ -45,6 +45,11 @@
       {% endif -%}
       --tag {{ item.repository }}:{{ tag }}
     {% endfor -%}
+    {% for label in zj_image.labels | default([]) -%}
+      --label "{{ label }}"
+    {% endfor %}
+    --label "org.zuul-ci.change={{ zuul.change }}"
+    --label "org.zuul-ci.change_url={{ zuul.change_url }}"
   args:
     chdir: "{{ zuul_work_dir }}/{{ item.context }}"