Artifacts from Build Triggers
Overview
When an external CI system triggers a pipeline, Spinnaker can use the CI build information to inject relevant artifacts into the pipeline. The instructions here assume that you have set up a CI system and are familiar with using property files to pass variables from CI builds to Spinnaker pipelines.
The extraction of artifacts from the build information is done via a Jinja template; the template uses the trigger as context and outputs a list of artifacts to inject into the pipeline. Spinnaker provides a set of standard templates to use for artifact extraction, which users can augment with custom templates.
Requirements
The instructions here assume that you have set up a CI system and are familiar with using property files to pass variables from CI builds to Spinnaker pipelines.
Select a template
To configure Spinnaker to use a Jinja template for artifact extraction, export the following properties from your CI build:
messageFormat
: the name of the Jinja template to usecustomFormat
:true
ifmessageFormat
refers to a user-configured template;false
or omitted if it refers to a Spinnaker-supplied template
For example, to use the Spinnaker-provided JAR
template, you would export the following
properties from your CI job:
messageFormat=JAR
The recommended way to configure artifact templates is by using the hal config artifact templates
Halyard command
:
hal config artifact templates add <name of template> --template-path <path to the template>
As an alternative, you can manually configure templates by adding the following to igor-local.yml
:
artifacts:
templates:
- name: <name of template>
templatePath: <path to the template>
(Before Spinnaker 1.13, this manual configuration went into echo-local.yml
. As of 1.13, it goes
in igor-local.yml
.)
You can then use the configured custom template by exporting the following as properties from your CI build:
messageFormat=<name of template>
customFormat=true
Bind variables into templates
In general, artifact-extracting templates will read other properties that are exported
by the CI job. The general pattern is to export any build-specific information in the
property file and to have the Jinja template construct the artifact by looking in
trigger.properties
.
For example, consider a Jenkins job uploads a .jar
file to a maven repository. We might define
a custom Jinja template custom-jar.jinja
as follows:
{% raw %}
{
"reference": "{{ properties.group }}-{{ properties.artifact }}-{{ properties.version }}",
"name": "{{ properties.artifact }}-{{ properties.version }}",
"version": "{{ properties.version }}",
"type": "maven/file"
}
{% endraw %}
We could then generate a useful artifact by having the CI job export the following:
group=test.group
artifact=test-artifact
version=123
messageFormat=custom-jar
customFormat=true
Supplied templates
The templates that are supplied with Spinnaker can be found in the following folder .
JAR
The JAR template creates an artifact representing a JAR archive in a Maven or Ivy repository. This template expects the following properties to be exported:
- group
- artifact
- version
- (optional) classifier
By default, the artifact represents an archive in a Maven repository; to create an artifact for an
archive in an Ivy repository, export the property repotype=ivy
.