Package: docker-ci-deploy
docker-ci-deploy================`|PyPI| <https://pypi.python.org/pypi/docker-ci-deploy>`_ `|BuildStatus| <https://travis-ci.org/praekeltfoundation/docker-ci-deploy>`_`|codecov| <https://codecov.io/gh/praekeltfoundation/docker-ci-deploy>`_NOTE: The ``-l``/``--login`` parameter (and associated``-d``/``--debug`` parameter) has been removed in version 0.3.0. Usea manual ``docker login`` command in the ``before_deploy`` sectionof your Travis file (or equivalent) to log in.A command-line tool to help generate tags and push Docker images to aregistry. Simplifies deployment of Docker images from CI services suchas Travis CI.In a single command, ``docker-ci-deploy`` can: \* Change the tags onimages \* Add version information to image tags \* Add registryaddresses to image tags \* Push tags to a registryThe best way to try out ``docker-ci-deploy`` is to give it a spin withthe ``--dry-run`` flag and observe all the ``docker`` commands that it*would* invoke: \`\`\` > $ docker-ci-deploy --version 2.7.13--version-semver --version-latest--registry registry:5000 --dry-runpraekeltorg/alpine-pythonpraekeltorg/alpine-python:onbuilddocker tag praekeltorg/alpine-pythonregistry:5000/praekeltorg/alpine-python:2.7.13 docker tagpraekeltorg/alpine-python registry:5000/praekeltorg/alpine-python:2.7docker tag praekeltorg/alpine-pythonregistry:5000/praekeltorg/alpine-python:2 docker tagpraekeltorg/alpine-python registry:5000/praekeltorg/alpine-python:latestdocker tag praekeltorg/alpine-python:onbuildregistry:5000/praekeltorg/alpine-python:2.7.13-onbuild docker tagpraekeltorg/alpine-python:onbuildregistry:5000/praekeltorg/alpine-python:2.7-onbuild docker tagpraekeltorg/alpine-python:onbuildregistry:5000/praekeltorg/alpine-python:2-onbuild docker tagpraekeltorg/alpine-python:onbuildregistry:5000/praekeltorg/alpine-python:onbuild docker pushregistry:5000/praekeltorg/alpine-python:2.7.13 docker pushregistry:5000/praekeltorg/alpine-python:2.7 docker pushregistry:5000/praekeltorg/alpine-python:2 docker pushregistry:5000/praekeltorg/alpine-python:latest docker pushregistry:5000/praekeltorg/alpine-python:2.7.13-onbuild docker pushregistry:5000/praekeltorg/alpine-python:2.7-onbuild docker pushregistry:5000/praekeltorg/alpine-python:2-onbuild docker pushregistry:5000/praekeltorg/alpine-python:onbuild \`\`\`If you want to make your commands even shorter, the ``docker-ci-deploy``command is also available as just ``dcd``, and most options have a shortform: \`\`\` > $ dcd -V 3.6.0 -S -L -r registry:5000 --dry-runalpine-pythondocker tag alpine-python registry:5000/alpine-python:3.6.0 docker tagalpine-python registry:5000/alpine-python:3.6 docker tag alpine-pythonregistry:5000/alpine-python:3 docker tag alpine-pythonregistry:5000/alpine-python:latest docker pushregistry:5000/alpine-python:3.6.0 docker pushregistry:5000/alpine-python:3.6 docker pushregistry:5000/alpine-python:3 docker pushregistry:5000/alpine-python:latest \`\`\`Use the ``-h``/``--help`` option to see all available options.Installation------------::pip install docker-ci-deploy==0.2.0The script is self-contained and has no dependencies. It can be run bysimply executing the `main file <docker-ci-deploy/__main__.py>`_.Usage-----The script can tag an existing image and push the new tags to aregistry.There is one required argument: the image to push.Pushing an image^^^^^^^^^^^^^^^^::docker-ci-deploy my-image:latestThis will simply push the image ``my-image:latest`` to the defaultregistry (https://hub.docker.com).Tagging^^^^^^^\`\`\` docker-ci-deploy --tag alpine --tag $(git rev-parse --short HEAD)my-image:latest\`\```This will result in the tags``my-image:alpine``and``my-image:eea981f``(for example) being created and pushed (**Note:** the original tag``my-image:latest\`is *not* pushed).Version tags^^^^^^^^^^^^``docker-ci-deploy --tag alpine --version 1.2.3 my-image`` This willresult in the tag ``my-image:1.2.3-alpine`` being created and pushed. Ifa version is already present in the start of a tag, it will not beadded. For example, in the above example if ``--tag 1.2.3-alpine`` wereprovided, the image would still be tagged with ``1.2.3-alpine``, not``1.2.3-1.2.3-alpine``.You can also push the tags without the version information so that theyare considered the "latest" tag:``docker-ci-deploy --version 1.2.3 --version-latest my-image`` This willresult in the tags ``my-image:1.2.3`` and ``my-image:latest`` beingpushed.NOTE: The ``--version`` and ``--version-latest`` options used to beknown as ``--tag-version`` and ``--tag-latest``, respectively. Theseold option names will continue working for the current release butwill be removed soon.Semantic version tags^^^^^^^^^^^^^^^^^^^^^``docker-ci-deploy --tag alpine --version 1.2.3 --version-semver my-image``This will result in the tags ``my-image:1.2.3-alpine``,``my-image:1.2-alpine``, and ``my-image:1-alpine`` being created andpushed. If part of the version is already present in the start of a tag,it will not be added. For example, in the above example if``--tag 1.2-alpine`` were provided, the image would still be tagged with``1.2.3-alpine``, not ``1.2.3-1.2-alpine``.This works by stripping pieces from the front of the version stringusing the regex ``[.-]?\w+$``. This means that version strings with sometext in them are also supported. For example, a tag such as``8.7.1-jessie`` will produce the tags/tag prefixes ``8.7.1-jessie``,``8.7.1``, ``8.7``, and ``8``.An optional "precision" value can be set using the``--semver-precision`` option. This sets the minimum precision of thegenerated versions. For example, by passing``--version 1.2.3 --version-semver --semver-precision 2``, the versions``1.2.3`` and ``1.2`` are generated but *not* ``1``.Note that this will **not** tag a version ``0`` unless the``--semver-zero`` option is also used.This can be used in combination with ``--version-latest``.NOTE: The ``--version-semver`` option used to be known as``--tag-version``. This old option name will continue working forthe current release but will be removed soon.Custom registry^^^^^^^^^^^^^^^``docker-ci-deploy \   --tag alpine --tag $(git rev-parse --short HEAD) \   --registry my-registry.example.com:5000 \   my-image:latest``This will result in the tags``my-registry.example.com:5000/my-image:alpine`` and``my-registry.example.com:5000/my-image:eea981f`` being created andpushed.**NOTE:** The reference grammar for Docker image tags (as of Docker1.13.0) is not strict enough to distinguish between a registry addressand an image name component in all cases. For example, the tag``praekeltorg/alpine-python`` could refer to the image with name``alpine-python`` stored in the registry with hostname ``praekeltorg``*or* it could be an image called ``praekeltorg/alpine-python`` stored inthe default registry. ``docker-ci-deploy`` will first just prepend theregistry address to the tag and only attempt to remove an existingregistry address from the tag if the new tag is invalid.Multiple images^^^^^^^^^^^^^^^You can provide multiple images to ``docker-ci-deploy`` and it will tagand push all of them:``docker-ci-deploy --tag $(git rev-parse --short HEAD) my-image my-other-image``This will result in the tags ``my-image:eea981f`` and``my-other-image:eea981f`` being created and pushed.Debugging^^^^^^^^^Use the ``--dry-run`` and ``--verbose`` parameters to see what thescript will do before you use it. For more help try``docker-ci-deploy --help``.Travis CI---------The script could be used in any CI service that provides access to thestandard Docker CLI but was developed with Travis in mind.For Travis CI this config should get you started pushing images toDocker Hub: \`\`\`yaml sudo: required services: - docker language:python env: global: - DOCKER\_USER=janedoe - secret: #DOCKER\_PASS=pa$$wordbefore\_install: - sudo apt-get update - sudo apt-get install -oDpkg::Options::="--force-confold" -y docker-engine - pip installdocker-ci-deployscript: - docker build -t janedoe/my-image .before\_deploy: - docker login -u ":math:`DOCKER_USER" -p "`\ DOCKER\_PASS"deploy: provider: script script: docker-ci-deploy --tag $(git rev-parse--short HEAD) --tag latest janedoe/my-image \`\`\`.. |PyPI| image:: https://img.shields.io/pypi/v/docker-ci-deploy.svg.. |BuildStatus| image:: https://travis-ci.org/praekeltfoundation/docker-ci-deploy.svg?branch=develop.. |codecov| image:: https://codecov.io/gh/praekeltfoundation/docker-ci-deploy/branch/develop/graph/badge.svg