Handle multiple docker images with the same repository
So that users can specify two docker image builds for the same repository, but with different tags, ensure that the temporary change_ tag attached to the image also includes the final tag name. This allows this configuration to work: docker_images: - repository: foo/image context: opensuse tags: - opensuse-latest - repository: foo/image context: ubuntu tags: - ubuntu-latest Change-Id: I917dcf8a74fc864ea06dc70bdb3e212dc170eb48
This commit is contained in:
parent
2428945c21
commit
885f02e217
@ -13,8 +13,8 @@
|
|||||||
{% for build_arg in item.build_args | default([]) -%}
|
{% for build_arg in item.build_args | default([]) -%}
|
||||||
--build-arg {{ build_arg }}
|
--build-arg {{ build_arg }}
|
||||||
{% endfor -%}
|
{% endfor -%}
|
||||||
--tag {{ item.repository }}:change_{{ zuul.change }}
|
|
||||||
{% for tag in item.tags | default(['latest']) -%}
|
{% for tag in item.tags | default(['latest']) -%}
|
||||||
|
--tag {{ item.repository }}:change_{{ zuul.change }}_{{ tag }}
|
||||||
--tag {{ item.repository }}:{{ tag }}
|
--tag {{ item.repository }}:{{ tag }}
|
||||||
{% endfor -%}
|
{% endfor -%}
|
||||||
args:
|
args:
|
||||||
|
28
roles/promote-docker-image/tasks/promote-retag-inner.yaml
Normal file
28
roles/promote-docker-image/tasks/promote-retag-inner.yaml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
- name: Get manifest
|
||||||
|
no_log: true
|
||||||
|
uri:
|
||||||
|
url: "https://registry.hub.docker.com/v2/{{ image.repository }}/manifests/change_{{ zuul.change }}_{{ image_tag }}"
|
||||||
|
status_code: 200
|
||||||
|
headers:
|
||||||
|
Accept: "application/vnd.docker.distribution.manifestv2+json"
|
||||||
|
Authorization: "Bearer {{ token.json.token }}"
|
||||||
|
return_content: true
|
||||||
|
register: manifest
|
||||||
|
- name: Put manifest
|
||||||
|
no_log: true
|
||||||
|
uri:
|
||||||
|
url: "https://registry.hub.docker.com/v2/{{ image.repository }}/manifests/{{ image_tag }}"
|
||||||
|
method: PUT
|
||||||
|
status_code: 201
|
||||||
|
body: "{{ manifest.content | string }}"
|
||||||
|
headers:
|
||||||
|
Content-Type: "application/vnd.docker.distribution.manifestv2+json"
|
||||||
|
Authorization: "Bearer {{ token.json.token }}"
|
||||||
|
- name: Delete the current change tag
|
||||||
|
no_log: true
|
||||||
|
uri:
|
||||||
|
url: "https://hub.docker.com/v2/repositories/{{ image.repository }}/tags/change_{{ zuul.change }}_{{ image_tag }}/"
|
||||||
|
method: DELETE
|
||||||
|
status_code: 204
|
||||||
|
headers:
|
||||||
|
Authorization: "JWT {{ jwt_token.json.token }}"
|
@ -6,34 +6,8 @@
|
|||||||
password: "{{ docker_credentials.password }}"
|
password: "{{ docker_credentials.password }}"
|
||||||
force_basic_auth: true
|
force_basic_auth: true
|
||||||
register: token
|
register: token
|
||||||
- name: Get manifest
|
- name: Retag image
|
||||||
no_log: true
|
|
||||||
uri:
|
|
||||||
url: "https://registry.hub.docker.com/v2/{{ image.repository }}/manifests/change_{{ zuul.change }}"
|
|
||||||
status_code: 200
|
|
||||||
headers:
|
|
||||||
Accept: "application/vnd.docker.distribution.manifestv2+json"
|
|
||||||
Authorization: "Bearer {{ token.json.token }}"
|
|
||||||
return_content: true
|
|
||||||
register: manifest
|
|
||||||
- name: "Put manifest"
|
|
||||||
no_log: true
|
|
||||||
loop: "{{ image.tags | default(['latest']) }}"
|
loop: "{{ image.tags | default(['latest']) }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: new_tag
|
loop_var: image_tag
|
||||||
uri:
|
include_tasks: promote-retag-inner.yaml
|
||||||
url: "https://registry.hub.docker.com/v2/{{ image.repository }}/manifests/{{ new_tag }}"
|
|
||||||
method: PUT
|
|
||||||
status_code: 201
|
|
||||||
body: "{{ manifest.content | string }}"
|
|
||||||
headers:
|
|
||||||
Content-Type: "application/vnd.docker.distribution.manifestv2+json"
|
|
||||||
Authorization: "Bearer {{ token.json.token }}"
|
|
||||||
- name: Delete the current change tag
|
|
||||||
no_log: true
|
|
||||||
uri:
|
|
||||||
url: "https://hub.docker.com/v2/repositories/{{ image.repository }}/tags/change_{{ zuul.change }}/"
|
|
||||||
method: DELETE
|
|
||||||
status_code: 204
|
|
||||||
headers:
|
|
||||||
Authorization: "JWT {{ jwt_token.json.token }}"
|
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
- name: Log in to dockerhub
|
- name: Log in to dockerhub
|
||||||
command: "docker login -u {{ docker_credentials.username }} -p {{ docker_credentials.password }}"
|
command: "docker login -u {{ docker_credentials.username }} -p {{ docker_credentials.password }}"
|
||||||
no_log: true
|
no_log: true
|
||||||
- name: Upload to dockerhub
|
- name: Upload image to dockerhub
|
||||||
command: "docker push {{ item.repository }}:change_{{ zuul.change }}"
|
|
||||||
loop: "{{ docker_images }}"
|
loop: "{{ docker_images }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: image
|
||||||
|
include_tasks: push.yaml
|
||||||
|
5
roles/upload-docker-image/tasks/push.yaml
Normal file
5
roles/upload-docker-image/tasks/push.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
- name: Upload tag to dockerhub
|
||||||
|
command: "docker push {{ item.repository }}:change_{{ zuul.change }}_{{ image_tag }}"
|
||||||
|
loop: "{{ image.tags | default(['latest']) }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: image_tag
|
Loading…
Reference in New Issue
Block a user