Working with Docker Images

This guide includes:

Before you start, you’ll need to configure a Docker registry using Halyard. If you don’t see your Docker registry as an option, or you’re missing your organization or image in the UI, you’ll need to double-check your Spinnaker is configured to use that registry (and/or repository)

Triggering a Pipeline with a Docker Registry Update

To add a Jenkins trigger to your pipeline, go to your configurations stage and select “Add Trigger”, then select “Docker Registry” from the Type dropdown menu. You should then be able to select the Registry to use, and find your Organization(s) and Image(s).

The Tag field is optional; if left empty, any new Docker image posted to the registry (for that image) will trigger the pipeline. You can enter a regular expression here to limit triggering to tag pattern names (for example, master-.* will only trigger when a new image with a tag starting with “master-“ is uploaded).

A Regular Expression (“regex”) is similar to, but different than, a wildcard. You may be familiar with wildcards on your command line, where good* would list all files that start with “good”. In regexes, a * character simply “matches 0 or more of the preceding character” – good* would then match “goo”, “good”, and “goodddddd”, but wouldn’t match “goodbar”. If you need help with the regex syntax, this is a good introduction.

Add Trigger

Referencing the New Image

When a new Docker image (that matches the Tag pattern, if set) is detected, the Docker Registry trigger will fill in some context, which can be used in SpEL Expressions elsewhere in the pipeline (for example, in a Kubernetes manifest).

If you click on the Source link for the pipeline that was triggered, you can find the trigger section of the JSON. Below is a partial block of JSON as an example of the fields that will be filled in.

  "trigger": {
    "account": "my-docker-registry",
    "artifacts": [
      {
        "name": "index.docker.io/armory/demoapp",
        "reference": "index.docker.io/armory/demoapp:master-29",
        "type": "docker/image",
        "version": "master-29"
      }
    ],
    "repository": "armory/demoapp",
    "tag": "master-29",
    "type": "docker",
  },

You can reference the Docker tag that triggered the pipeline with the expression ${trigger['tag']}, which may be all you need, as in this image spec line from a Kubernetes manifest:

- image: "docker.io/armory/demoapp:${trigger['tag']}"