From 039c860dc226a9ee64451f530e98791d3a9e810e Mon Sep 17 00:00:00 2001 From: tanhengyeow Date: Mon, 10 Sep 2018 23:31:15 +0800 Subject: Add support for "Build / Publish Docker Image" Change-Id: Iac9ffcdcb4312818d53e1da9be92ecdbb84c8cc1 Co-Authored-By: Anil Belur Signed-off-by: Tan Heng Yeow Signed-off-by: Anil Belur --- jenkins_jobs/modules/builders.py | 60 ++++++++++++++++++++++ .../fixtures/build-publish-docker-image-full.xml | 19 +++++++ .../fixtures/build-publish-docker-image-full.yaml | 10 ++++ .../build-publish-docker-image-minimal.xml | 19 +++++++ .../build-publish-docker-image-minimal.yaml | 2 + 5 files changed, 110 insertions(+) create mode 100644 tests/builders/fixtures/build-publish-docker-image-full.xml create mode 100644 tests/builders/fixtures/build-publish-docker-image-full.yaml create mode 100644 tests/builders/fixtures/build-publish-docker-image-minimal.xml create mode 100644 tests/builders/fixtures/build-publish-docker-image-minimal.yaml diff --git a/jenkins_jobs/modules/builders.py b/jenkins_jobs/modules/builders.py index 9cf9bdf2..5c81a9c4 100644 --- a/jenkins_jobs/modules/builders.py +++ b/jenkins_jobs/modules/builders.py @@ -3923,6 +3923,66 @@ def description_setter(registry, xml_parent, data): descriptionsetter, data, mapping, fail_required=True) +def build_publish_docker_image(registry, xml_parent, data): + """yaml: build-publish-docker-image + Requires the Jenkins :jenkins-wiki:`CloudBees Docker Build and + Publish plugin `. + + :arg str docker-registry-url: URL to the Docker registry you are + using (default '') + :arg str image: Repository name to be applied to the resulting image + in case of success (default '') + :arg str docker-file-directory: Build step that sends a Dockerfile for + building to docker host that used for this build run (default '') + :arg bool push-on-success: Resulting docker image will be pushed to + the registry (or registries) specified within the + "Image" field (default false) + :arg str push-credentials-id: Credentials to push to a private + registry (default '') + :arg bool clean-images: Option to clean local images (default false) + :arg bool jenkins-job-delete: Attempt to remove images when jenkins + deletes the run (default false) + :arg str cloud: Cloud to use to build image (default '') + + Minimal example: + + .. literalinclude:: + /../../tests/builders/fixtures/build-publish-docker-image-minimal.yaml + + Full example: + + .. literalinclude:: + /../../tests/builders/fixtures/build-publish-docker-image-full.yaml + """ + dbp = XML.SubElement(xml_parent, + 'com.nirima.jenkins.plugins.docker.builder' + '.DockerBuilderPublisher') + dbp.set('plugin', 'docker-plugin') + + from_registry = XML.SubElement(dbp, 'fromRegistry') + from_registry.set('plugin', 'docker-commons') + from_registry_mapping = [ + ('docker-registry-url', 'url', ''), + ] + helpers.convert_mapping_to_xml( + from_registry, data, from_registry_mapping, + fail_required=False) + + tags = XML.SubElement(dbp, 'tags') + XML.SubElement(tags, 'string').text = data.get('image', '') + + mapping = [ + ('docker-file-directory', 'dockerFileDirectory', ''), + ('push-on-success', 'pushOnSuccess', False), + ('push-credentials-id', 'pushCredentialsId', ''), + ('clean-images', 'cleanImages', False), + ('jenkins-job-delete', 'cleanupWithJenkinsJobDelete', False), + ('cloud', 'cloud', ''), + ] + helpers.convert_mapping_to_xml( + dbp, data, mapping, fail_required=False) + + def docker_build_publish(parse, xml_parent, data): """yaml: docker-build-publish Requires the Jenkins :jenkins-wiki:`Docker build publish Plugin diff --git a/tests/builders/fixtures/build-publish-docker-image-full.xml b/tests/builders/fixtures/build-publish-docker-image-full.xml new file mode 100644 index 00000000..d0e99bd1 --- /dev/null +++ b/tests/builders/fixtures/build-publish-docker-image-full.xml @@ -0,0 +1,19 @@ + + + + + + Docker registry URL + + + Image string + + Directory for Dockerfile + true + 71e4f29c-162b-40d0-85d9-3ddfba2911a0 + true + true + cloud + + + diff --git a/tests/builders/fixtures/build-publish-docker-image-full.yaml b/tests/builders/fixtures/build-publish-docker-image-full.yaml new file mode 100644 index 00000000..2469d11e --- /dev/null +++ b/tests/builders/fixtures/build-publish-docker-image-full.yaml @@ -0,0 +1,10 @@ +builders: + - build-publish-docker-image: + docker-registry-url: Docker registry URL + image: Image string + docker-file-directory: Directory for Dockerfile + push-on-success: true + push-credentials-id: 71e4f29c-162b-40d0-85d9-3ddfba2911a0 + clean-images: true + jenkins-job-delete: true + cloud: cloud diff --git a/tests/builders/fixtures/build-publish-docker-image-minimal.xml b/tests/builders/fixtures/build-publish-docker-image-minimal.xml new file mode 100644 index 00000000..3e616113 --- /dev/null +++ b/tests/builders/fixtures/build-publish-docker-image-minimal.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + false + + false + false + + + + diff --git a/tests/builders/fixtures/build-publish-docker-image-minimal.yaml b/tests/builders/fixtures/build-publish-docker-image-minimal.yaml new file mode 100644 index 00000000..4497d40e --- /dev/null +++ b/tests/builders/fixtures/build-publish-docker-image-minimal.yaml @@ -0,0 +1,2 @@ +builders: + - build-publish-docker-image -- cgit