<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Spinnaker – Pipeline User Guide</title>
    <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/</link>
    <description>Recent content in Pipeline User Guide on Spinnaker</description>
    <generator>Hugo -- gohugo.io</generator>
    
	  <atom:link href="https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Managing Pipelines</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/managing-pipelines/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/managing-pipelines/</guid>
      <description>
        
        
        &lt;p&gt;Pipelines are the essential tool in Spinnaker for controlling how to deploy your
application. A pipeline is composed of a series of stages that can be combined
in almost any order, which makes pipelines flexible, consistent, and repeatable.&lt;/p&gt;
&lt;p&gt;You can configure your pipelines to run entirely automatically or require manual
intervention to ensure that everything is working as expected. Similarly,
pipelines can either be automatically triggered by a wide range of external
inputs, including other pipelines, or be manually triggered.&lt;/p&gt;
&lt;p&gt;This guide explains how to configure and control pipelines, including creating,
adding triggers to, or disabling pipelines.&lt;/p&gt;
&lt;h2 id=&#34;create-a-pipeline&#34;&gt;Create a pipeline&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Select the application in which you would like to create a pipeline.&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Pipelines&lt;/strong&gt; tab in the Spinnaker UI.
&lt;img src=&#34;images/pipelines-tab.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;, located in the upper right corner of the &lt;strong&gt;Pipelines&lt;/strong&gt; tab.
&lt;img src=&#34;images/create.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Pipeline&lt;/strong&gt; from the drop down menu and name your pipeline.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After you create your pipeline, add stages to specify the actions that your
pipeline will perform.&lt;/p&gt;
&lt;h3 id=&#34;add-a-trigger&#34;&gt;Add a trigger&lt;/h3&gt;
&lt;p&gt;Make sure that you are editing the &lt;strong&gt;Configuration&lt;/strong&gt; stage of your pipeline.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/configuration-stage.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Add Trigger&lt;/strong&gt;.
&lt;img src=&#34;images/add-trigger.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Choose your desired trigger type from the drop-down menu that appears, and
input any further required configuration.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For further information on how triggers work, see the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/triggers/&#34;&gt;documentation on pipeline
triggers&lt;/a&gt;
.&lt;/p&gt;
&lt;h3 id=&#34;add-a-stage&#34;&gt;Add a stage&lt;/h3&gt;
&lt;p&gt;The first step in any pipeline is &lt;strong&gt;Configuration&lt;/strong&gt;, where you can set up
pipeline triggers and parameters. Each &lt;em&gt;stage&lt;/em&gt; specifies an action the pipeline
will take once it&amp;rsquo;s configured.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;Add stage&lt;/strong&gt; from your pipeline configuration screen.
&lt;img src=&#34;images/add-stage.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Set the stage type using the drop-down menu.&lt;/li&gt;
&lt;li&gt;If this isn&amp;rsquo;t the first stage in your pipeline, make sure that this stage
depends on the desired upstream stage(s) using the &lt;strong&gt;Depends On&lt;/strong&gt; field.
&lt;img src=&#34;images/stage-depends-on.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can add as many stages as your pipeline needs, in any order that makes sense
for you.&lt;/p&gt;
&lt;h2 id=&#34;manually-run-a-pipeline&#34;&gt;Manually run a pipeline&lt;/h2&gt;
&lt;p&gt;From the &lt;strong&gt;Pipelines&lt;/strong&gt; tab, click &lt;strong&gt;Start Manual Execution&lt;/strong&gt; on the pipeline you
want to run. Spinnaker then shows you a confirmation dialog, where you can add
any necessary parameters.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/manual-execution.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;linking-to-the-manual-execution-dialog&#34;&gt;Linking to the Manual Execution dialog&lt;/h3&gt;
&lt;p&gt;You can create a deep link to the confirmation dialog for any pipeline by adding
a &lt;code&gt;startManualExecution&lt;/code&gt; parameter to the URL for an application&amp;rsquo;s pipelines
view. The parameter&amp;rsquo;s value can be either the pipeline name or its ID.&lt;/p&gt;
&lt;p&gt;To prepopulate pipeline parameter values in the dialog, just include them as
parameters in the URL.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you have an an application named &amp;ldquo;myapp&amp;rdquo;&lt;/li&gt;
&lt;li&gt;the application has a pipeline named &amp;ldquo;deploy-to-prod&amp;rdquo;&lt;/li&gt;
&lt;li&gt;the pipeline has one parameter, &lt;code&gt;region&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;the pipeline&amp;rsquo;s ID is &lt;code&gt;12345&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;your Spinnaker installation is hosted at 
&lt;a href=&#34;https://my.spinnaker.example.com&#34; target=&#34;_blank&#34;&gt;https://my.spinnaker.example.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These links would open the dialog automatically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://my.spinnaker.example.com/#/applications/myapp/executions?startManualExecution=deploy-to-prod&#34; target=&#34;_blank&#34;&gt;https://my.spinnaker.example.com/#/applications/myapp/executions?startManualExecution=deploy-to-prod&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://my.spinnaker.example.com/#/applications/myapp/executions?startManualExecution=12345&#34; target=&#34;_blank&#34;&gt;https://my.spinnaker.example.com/#/applications/myapp/executions?startManualExecution=12345&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These links would open the dialog automatically, and pre-populate the region
parameter with &lt;code&gt;us-central-1&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://my.spinnaker.example.com/#/applications/myapp/executions?startManualExecution=deploy-to-prod&amp;amp;region=us-central-1&#34; target=&#34;_blank&#34;&gt;https://my.spinnaker.example.com/#/applications/myapp/executions?startManualExecution=deploy-to-prod&amp;amp;region=us-central-1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://my.spinnaker.example.com/#/applications/myapp/executions?startManualExecution=12345&amp;amp;region=us-central-1&#34; target=&#34;_blank&#34;&gt;https://my.spinnaker.example.com/#/applications/myapp/executions?startManualExecution=12345&amp;amp;region=us-central-1&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;disable-a-pipeline&#34;&gt;Disable a pipeline&lt;/h2&gt;
&lt;p&gt;Disabling a pipeline prevents any triggers from firing, as well as preventing
users from running it manually.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;From the &lt;strong&gt;Pipelines&lt;/strong&gt; tab, click &lt;strong&gt;Configure&lt;/strong&gt; to modify an existing
pipeline.
&lt;img src=&#34;images/select-configure.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Pipeline actions&lt;/strong&gt; in the upper right corner, and select &lt;strong&gt;Disable&lt;/strong&gt;.
&lt;img src=&#34;images/pipeline-actions.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In order to re-enable your disabled pipeline, select &lt;strong&gt;Pipeline Actions&lt;/strong&gt; and
choose &lt;strong&gt;Enable&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;delete-a-pipeline&#34;&gt;Delete a pipeline&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;From the &lt;strong&gt;Pipelines&lt;/strong&gt; tab, click &lt;strong&gt;Configure&lt;/strong&gt; to modify an existing
pipeline.
&lt;img src=&#34;images/select-configure.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Pipeline actions&lt;/strong&gt; in the upper right corner, and select &lt;strong&gt;Delete&lt;/strong&gt;.
&lt;img src=&#34;images/pipeline-actions.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;edit-a-pipeline-as-json&#34;&gt;Edit a pipeline as JSON&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;: The JSON you write here is not validated &amp;ndash; Edit as JSON
essentially allows you to modify the pipeline via a free-form textbox. &lt;strong&gt;Be
careful!&lt;/strong&gt; It&amp;rsquo;s very easy to break the pipeline, although you can restore from
revision history to roll back any changes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Spinnaker represents pipelines as JSON behind the scenes. Any changes you make
to your pipeline using the UI are converted to JSON when Spinnaker saves the
pipeline.&lt;/p&gt;
&lt;p&gt;When you use the &lt;strong&gt;Edit as JSON&lt;/strong&gt; feature, you are directly editing the payload.
&lt;strong&gt;Edit as JSON&lt;/strong&gt; allows you to set pipeline fields or properties not exposed by
the UI.&lt;/p&gt;
&lt;p&gt;In order to edit your pipeline as JSON:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;From the &lt;strong&gt;Pipelines&lt;/strong&gt; tab, click &lt;strong&gt;Configure&lt;/strong&gt; to modify an existing
pipeline.
&lt;img src=&#34;images/select-configure.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Pipeline Actions&lt;/strong&gt; in the upper right corner, and select
&lt;strong&gt;Edit as JSON&lt;/strong&gt;.
&lt;img src=&#34;images/pipeline-actions.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;view-and-restore-revision-history&#34;&gt;View and restore revision history&lt;/h2&gt;
&lt;p&gt;Each time you save your pipeline, the current version is added to revision
history. You can use revision history to diff two versions of a pipeline or to
restore an older version of a pipeline.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: If you are using Minio or Redis as your

&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/install/storage/&#34;&gt;storage service&lt;/a&gt;
, you won&amp;rsquo;t be able to use revision
history because neither supports it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;From the &lt;strong&gt;Pipelines&lt;/strong&gt; tab, click &lt;strong&gt;Configure&lt;/strong&gt; to modify an existing
pipeline.
&lt;img src=&#34;images/select-configure.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Pipeline Actions&lt;/strong&gt; in the upper right corner, and select
&lt;strong&gt;View revision history&lt;/strong&gt;.
&lt;img src=&#34;images/pipeline-actions.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This pulls up a window that shows a JSON representation of your current
pipeline. From there, you can see all previously saved versions via the
drop-down menu in the upper left corner.&lt;/p&gt;
&lt;h3 id=&#34;diff-two-versions-of-a-pipeline&#34;&gt;Diff two versions of a pipeline&lt;/h3&gt;
&lt;p&gt;You can compare any version of your pipeline to either the version before it or
the current pipeline.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;View revision history.&lt;/li&gt;
&lt;li&gt;Select a version from the &lt;strong&gt;Revision&lt;/strong&gt; drop-down.
&lt;img src=&#34;images/revision-history.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Choose whether to compare that version to the current or previous version.
&lt;img src=&#34;images/compare-version.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;restore-a-previous-version&#34;&gt;Restore a previous version&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Choose a version from the &lt;strong&gt;Revision&lt;/strong&gt; drop-down.
&lt;img src=&#34;images/revision-history.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;A button appears that allows you to restore your pipeline to that version. If
you restore an older version, the current version of your pipeline is saved in
your revision history in case you want to return to it in the future.
&lt;img src=&#34;images/restore-revision.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;lock-a-pipeline&#34;&gt;Lock a pipeline&lt;/h2&gt;
&lt;p&gt;Locking a pipeline prevents all users from modifying the pipeline using the
Spinnaker UI. You can still update a locked pipeline via the API.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;From the &lt;strong&gt;Pipelines&lt;/strong&gt; tab, click &lt;strong&gt;Configure&lt;/strong&gt; to modify an existing
pipeline.
&lt;img src=&#34;images/select-configure.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Pipeline Actions&lt;/strong&gt; in the upper right corner, and select
&lt;strong&gt;Lock&lt;/strong&gt;.
&lt;img src=&#34;images/pipeline-actions.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;rename-a-pipeline&#34;&gt;Rename a pipeline&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;From the &lt;strong&gt;Pipelines&lt;/strong&gt; tab, click &lt;strong&gt;Configure&lt;/strong&gt; to modify an existing
pipeline.
&lt;img src=&#34;images/select-configure.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Pipeline Actions&lt;/strong&gt; in the upper right corner, and select
&lt;strong&gt;Rename&lt;/strong&gt;.
&lt;img src=&#34;images/pipeline-actions.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Pipeline Expressions Guide</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/expressions/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/expressions/</guid>
      <description>
        
        
        &lt;p&gt;Pipeline expressions allow you to dynamically set and access variables during
pipeline execution. You can use an expression in almost any text field in a
Spinnaker pipeline stage. Pipeline expressions help you use arbitrary values
about the state of your system in the execution of your pipelines. You can use
them to turn on or off particular stages or branches of your pipeline,
dynamically name your stack, check the status of another stage, and perform
other operations.&lt;/p&gt;
&lt;p&gt;This guide explains how and where to use expressions, and provides some examples
of what you can do with them. For a list of available functions, see the

&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/pipeline/expressions/&#34;&gt;reference guide&lt;/a&gt;
.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: Pipeline expression syntax is based on 
&lt;a href=&#34;https://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html&#34; target=&#34;_blank&#34;&gt;Spring Expression Language
(SpEL)&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;what-does-a-pipeline-expression-look-like&#34;&gt;What does a pipeline expression look like?&lt;/h2&gt;
&lt;p&gt;A pipeline expression is made up of &lt;code&gt;$&lt;/code&gt; followed by opening/closing brackets:
&lt;code&gt;${ }&lt;/code&gt;. For example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;${expression here}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If an expression can&amp;rsquo;t be evaluated, Spinnaker simply returns the expression.
The above example would return &amp;ldquo;expression here.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;You also can interpolate expressions and strings. For example if
&lt;code&gt;expressionA&lt;/code&gt; evaluates to &lt;em&gt;Hello&lt;/em&gt; and &lt;code&gt;expressionB&lt;/code&gt; evaluates to &lt;em&gt;world&lt;/em&gt;,&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; ${expressionA}-randomString-${expressionB}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;evaluates to &lt;em&gt;Hello-randomString-world&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Note that expressions can&amp;rsquo;t be nested: &lt;code&gt;${ expression1 ${expression2} }&lt;/code&gt; won&amp;rsquo;t
be evaluated.&lt;/p&gt;
&lt;h2 id=&#34;how-do-i-use-a-pipeline-expression&#34;&gt;How do I use a pipeline expression?&lt;/h2&gt;
&lt;h3 id=&#34;where-can-i-use-pipeline-expressions&#34;&gt;Where can I use pipeline expressions?&lt;/h3&gt;
&lt;p&gt;You can use pipeline expressions any place in the UI where you can enter
free-form text, with the exception of the pipeline &lt;strong&gt;Configuration&lt;/strong&gt; stage.
However, expressions can be used with Expected Artifacts, just enable &amp;ldquo;Use
Default Artifact&amp;rdquo; and write the expression in the Object path.&lt;/p&gt;
&lt;p&gt;If you want to set the value of a field using a pipeline expression but there is
no text box available, you can use the 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/managing-pipelines/#edit-a-pipeline-as-json&#34;&gt;Edit as JSON&lt;/a&gt;

pipeline feature.&lt;/p&gt;
&lt;h3 id=&#34;when-are-pipeline-expressions-evaluated&#34;&gt;When are pipeline expressions evaluated?&lt;/h3&gt;
&lt;p&gt;Spinnaker evaluates the expressions for a given stage at the beginning of that
stage. You can&amp;rsquo;t use pipeline expressions during the pipeline &lt;strong&gt;Configuration&lt;/strong&gt;
stage, because Spinnaker doesn&amp;rsquo;t begin evaluating expressions until after the
&lt;strong&gt;Configuration&lt;/strong&gt; stage has finished.&lt;/p&gt;
&lt;h2 id=&#34;how-do-i-define-additional-data-for-use-with-pipeline-expressions&#34;&gt;How do I define additional data for use with pipeline expressions?&lt;/h2&gt;
&lt;h3 id=&#34;create-parameters-within-the-pipeline-configuration&#34;&gt;Create Parameters within the Pipeline Configuration&lt;/h3&gt;
&lt;p&gt;As mentioned above, pipeline expressions cannot be used during the pipeline &lt;strong&gt;Configuration&lt;/strong&gt; stage.  Instead, you can
use the &lt;strong&gt;Parameters&lt;/strong&gt; section of the pipeline &lt;strong&gt;Configuration&lt;/strong&gt; stage to set either static or dynamic key/value pairs at
runtime of the pipeline.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Warning: there are several reserved parameter keys (names) that cause unexpected behavior and failures
if overwritten by a pipeline parameter definition.
See the 
&lt;a href=&#34;#list-of-reserved-parameter-and-evaluate-variable-key-names&#34;&gt;list of reserved parameter and evaluate variable key names&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/expressions/images/parameters.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Any parameter set in the pipeline configuration can be accessed using one of the following pipeline expression syntax:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;${ execution.trigger.parameters[&amp;#34;stack&amp;#34;] }
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;${ execution.trigger.parameters.stack }
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;${ parameters[&amp;#34;stack&amp;#34;] }
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;${ parameters.stack }
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;create-variables-using-an-evaluate-variables-stage&#34;&gt;Create Variables using an Evaluate Variables Stage&lt;/h3&gt;
&lt;p&gt;The Evaluate Variables stage can be used to create reuseable variables with custom keys paired with either static values
or values as the result of a pipeline expression.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Warning: there are several reserved parameter keys (names) that cause unexpected behavior and failures
if overwritten by a pipeline parameter definition.
See the 
&lt;a href=&#34;#list-of-reserved-parameter-and-evaluate-variable-key-names&#34;&gt;list of reserved parameter and evaluate variable key names&lt;/a&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;./images/evaluate-variables-stage.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Any variable set in an Evaluate Variables stage can be accessed using one of the following pipeline expression syntax
assuming the following scenario:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Evaluate Variable Stage Name:  &amp;lsquo;Set My Variables&amp;rsquo;&lt;/li&gt;
&lt;li&gt;Variable Name:  environment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Option 1:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;${ execution.stages.?[ name == &amp;#39;Set My Variables&amp;#39; ][0].outputs.environment }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Option 2:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;${ environment }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As shown in Option 2, Spinnaker makes any variable set with an Evaluate Variable stage accessible to
pipeline expressions during runtime through an Ephemeral Variable that is referenced by its defined name.  This simplifies the process of referencing the variable downstream and eliminates the need to write out the long form
shown in Option 1 above. Be careful to inadvertently overwrite the variable in subsequent Evaluate Variable
stages in the pipeline.&lt;/p&gt;
&lt;h3 id=&#34;list-of-reserved-parameter-and-evaluate-variable-key-names&#34;&gt;List of reserved parameter and evaluate variable key names&lt;/h3&gt;
&lt;p&gt;The following is a list of strings that should not be used for either a parameter or evaluate variable key name. Using any of these key names causes unexpected behavior and failures.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;strategy&lt;/li&gt;
&lt;li&gt;cloudProvider&lt;/li&gt;
&lt;li&gt;cluster&lt;/li&gt;
&lt;li&gt;credentials&lt;/li&gt;
&lt;li&gt;region&lt;/li&gt;
&lt;li&gt;zone&lt;/li&gt;
&lt;li&gt;imageName&lt;/li&gt;
&lt;li&gt;application&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-tools-do-i-have-for-writing-pipeline-expressions&#34;&gt;What tools do I have for writing pipeline expressions?&lt;/h2&gt;
&lt;h3 id=&#34;helper-functions&#34;&gt;Helper functions&lt;/h3&gt;
&lt;p&gt;There are several built-in 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/pipeline/expressions/#helper-functions&#34;&gt;helper functions&lt;/a&gt;

to simplify some common use cases. These functions allow you to do things like
access a particular stage by name, strip non-alphanumerical characters out of a
string, or parse JSON.&lt;/p&gt;
&lt;p&gt;Adding a pound sign (&lt;code&gt;#&lt;/code&gt;) within your pipeline expression displays a list of all
the helper functions that are available.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/helper-func-autocomplete.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;helper-properties&#34;&gt;Helper properties&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/pipeline/expressions/#helper-properties&#34;&gt;Helper properties&lt;/a&gt;

are variables which refer to global information about the current pipeline
execution. For example, &lt;code&gt;execution&lt;/code&gt; is a variable which refers to the current
pipeline execution, whereas &lt;code&gt;trigger&lt;/code&gt; lets you access information
about the pipeline trigger. For example, if you&amp;rsquo;ve set up a Jenkins trigger and
want to know which build triggered the current pipeline, you could access that
information with the expression &lt;code&gt;${trigger[&amp;quot;buildInfo&amp;quot;][&amp;quot;number&amp;quot;]}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To quickly list available helper properties and stages, you can enter a question
mark (&lt;code&gt;?&lt;/code&gt;) into your pipeline expression. Once the list is displayed, you can
start typing to narrow down the list, or press enter to add the selected helper
property or stage name to the expression.&lt;/p&gt;
&lt;p&gt;Typing a helper property into an expression displays a list of the values that
are available to you:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/helper-properties-list.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Once a helper property is added to the expression you can use any of the meta
keys (Shift, Command, Alt, Control) to bring up a list of all the pipeline
context that is relevant to the selected helper property.&lt;/p&gt;
&lt;h3 id=&#34;context-values&#34;&gt;Context values&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Context values&lt;/em&gt; are similar to helper properties, except that they are specific
to a particular stage. This includes the stage name, status, start or end time,
and so on. You can use context values in combination with the &lt;code&gt;#stage&lt;/code&gt; helper
function to access properties of a particular stage. For example,
&lt;code&gt;${#stage(&amp;quot;Deploy to Prod&amp;quot;)[&amp;quot;type&amp;quot;]}&lt;/code&gt; returns the stage type (in this case,
deploy).&lt;/p&gt;
&lt;p&gt;To see the available variables for a given pipeline, you can view the pipeline
execution JSON. The easiest way to do this is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Go to an execution of your pipeline.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on &lt;em&gt;Details&lt;/em&gt; to expand the pipeline.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on the source link under the pipeline execution, which opens a new tab
containing the JSON details of your pipeline execution.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/execution-json.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;property-files&#34;&gt;Property files&lt;/h3&gt;
&lt;p&gt;You can use Jenkins jobs to pass property files to your pipeline. A &lt;em&gt;property
file&lt;/em&gt; is a file containing a list of variables that you would like to pass to
your pipeline. The file can be a Java .properties file, YML, or JSON. Spinnaker
reads the contents of this file and adds the specified variables to the pipeline
context.&lt;/p&gt;
&lt;p&gt;To specify a property file:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Archive it in your Jenkins job.&lt;/li&gt;
&lt;li&gt;Specify the name of the file in the pipeline configuration. Note that this
is just the name of the file, not the absolute path —
&lt;code&gt;mypropertyfile.properties&lt;/code&gt; rather than
&lt;code&gt;workspace/build/mypropertyfile.properties&lt;/code&gt;.
&lt;img src=&#34;images/property-file.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you upload a property file via a Jenkins trigger, you can access the
variables via &lt;code&gt;trigger[&amp;quot;properties&amp;quot;]&lt;/code&gt;. However, if you&amp;rsquo;re using property files
in Jenkins or Script pipeline &lt;em&gt;stages&lt;/em&gt;, they are added directly to the stage
context. Within the stage itself you can access them directly, and future stages
can access them via the stage context.&lt;/p&gt;
&lt;p&gt;For example, consider a property file containing this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;version=&amp;#39;0.1.0&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If this was uploaded by a Jenkins trigger, you could access the value of
&lt;em&gt;version&lt;/em&gt; using the expression &lt;code&gt;${trigger[&amp;quot;properties&amp;quot;][&amp;quot;version&amp;quot;]}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If it was uploaded in a Jenkins or Script stage, you would access it in that
stage directly: &lt;code&gt;${version}&lt;/code&gt;. Successive stages could access the variable
using the stage context: &lt;code&gt;${#stage(&amp;quot;Jenkins job&amp;quot;)[&amp;quot;context&amp;quot;][&amp;quot;version&amp;quot;]}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Be careful when using property files in pipelines with multiple Jenkins jobs. If
both jobs upload property files with the same variables specified, they may
overwrite one another.&lt;/p&gt;
&lt;h3 id=&#34;root&#34;&gt;#root&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;#root&lt;/code&gt; returns the current stage context — the &lt;em&gt;context&lt;/em&gt; map contained in each
stage. For example, each Bake stage has a &lt;em&gt;package&lt;/em&gt; value which returns the name
of the package that it installed. To access that value within the stage, you can
use the expression &lt;code&gt;${#root[&amp;quot;package&amp;quot;]}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Note that if you are running an expression against the 
&lt;a href=&#34;#how-do-i-test-a-pipeline-expression&#34;&gt;testing
endpoint&lt;/a&gt;
, &lt;code&gt;#root&lt;/code&gt; returns the entire
pipeline context, because the expression isn&amp;rsquo;t tied to a particular stage.&lt;/p&gt;
&lt;h3 id=&#34;special-characters&#34;&gt;Special characters&lt;/h3&gt;
&lt;h4 id=&#34;set-default-values&#34;&gt;Set default values&lt;/h4&gt;
&lt;p&gt;You can use pipeline expressions to set a default value for a field with the
characters &lt;code&gt;?:&lt;/code&gt;. For example, &lt;code&gt;${parameters[&amp;quot;region&amp;quot;] ?: &#39;us-east-1&#39;}&lt;/code&gt; sets the
region to &lt;em&gt;us-east-1&lt;/em&gt; unless otherwise specified.&lt;/p&gt;
&lt;h4 id=&#34;filter-maps&#34;&gt;Filter maps&lt;/h4&gt;
&lt;p&gt;You can filter maps using &lt;code&gt;.?&lt;/code&gt;. For example, return a list of all of the bake
stages in your pipeline, use the expression
&lt;code&gt;${execution[&amp;quot;stages&amp;quot;].?[type == &amp;quot;bake&amp;quot;]}&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;autocomplete&#34;&gt;Autocomplete&lt;/h3&gt;
&lt;p&gt;Pipeline expressions auto-complete as you begin typing. Type &lt;code&gt;$&lt;/code&gt; into any text
field and hit enter, and &lt;code&gt;${ }&lt;/code&gt; – enclosing braces for an expression – are
automatically added for you. You can also use &lt;code&gt;#&lt;/code&gt; to display helper functions,
or &lt;code&gt;?&lt;/code&gt; to display a list of helper parameters and stages in your pipeline.&lt;/p&gt;
&lt;h2 id=&#34;how-do-i-test-a-pipeline-expression&#34;&gt;How do I test a pipeline expression?&lt;/h2&gt;
&lt;p&gt;Spinnaker provides an API endpoint that allows you you to test an expression
before plugging it into your pipeline. To use the endpoint, you need a running
instance of Spinnaker and the ID of a previous pipeline execution that you want
to use in the test.&lt;/p&gt;
&lt;p&gt;You can find the pipeline execution ID through the execution JSON:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Expand the &lt;strong&gt;Details&lt;/strong&gt; of a particular execution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Source&lt;/strong&gt; in the lower right corner, which opens a new tab containing
the pipeline execution JSON.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/execution-json.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The execution ID is the value of the top-level &lt;strong&gt;id&lt;/strong&gt; field in the JSON, and
looks something like &lt;em&gt;01CGYV7Q4PMEBDYS146CCED0M6&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can use &lt;code&gt;curl&lt;/code&gt; to pass an expression to the testing endpoint:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PIPELINE_ID=[your_pipeline_id]
curl http://api.my.spinnaker/pipelines/$PIPELINE_ID/evaluateExpression \
       -H &amp;#34;Content-Type: text/plain&amp;#34; \
       --data &amp;#39;${ #stage(&amp;#34;Deploy&amp;#34;).status.toString() }&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you&amp;rsquo;ve 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/security/authorization/&#34;&gt;enabled authz&lt;/a&gt;
 on Spinnaker, you can include your session cookie from your
browser into &lt;code&gt;curl&lt;/code&gt;.
&lt;code&gt;-H &#39;cookie: SESSION=&amp;lt;INSERT_SESSION_ID_FROM_BROWSER_HERE&amp;gt;&#39;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This example outputs the status of your Deploy stage:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{&amp;#34;result&amp;#34;: &amp;#34;SUCCEEDED&amp;#34;}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If Spinnaker cannot evaluate the expression, the result includes error details.
For example, if you forget the closing bracket in the example above, it outputs
the following:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{
  &amp;#34;detail&amp;#34;:
    {
      &amp;#34;{ #stage(\&amp;#34;Deploy\&amp;#34;).status.toString() &amp;#34;:
        [
          {
            &amp;#34;description&amp;#34;:
              &amp;#34;Failed to evaluate [expression] Expression
              [{ #stage( #root.execution, \&amp;#34;Deploy\&amp;#34;).status.toString() ]
              @0: No ending suffix &amp;#39;}&amp;#39; for expression starting at character 0:
              { #stage( #root.execution, \&amp;#34;Deploy\&amp;#34;).status.toString() &amp;#34;,
            &amp;#34;exceptionType&amp;#34;:&amp;#34;org.springframework.expression.ParseException&amp;#34;,
            &amp;#34;level&amp;#34;:&amp;#34;ERROR&amp;#34;,
            &amp;#34;timestamp&amp;#34;:1531254890849
         }
        ]
   },
  &amp;#34;result&amp;#34;:&amp;#34;${#stage(\&amp;#34;Deploy\&amp;#34;).status.toString() &amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note that 
&lt;a href=&#34;https://github.com/spinnaker/gate&#34; target=&#34;_blank&#34;&gt;Gate&lt;/a&gt;
 is the microservice that
provides access to the Spinnaker API. If you&amp;rsquo;re accessing Spinnaker via the
default &lt;code&gt;localhost:9000&lt;/code&gt;, make sure you&amp;rsquo;re sending your API requests to Gate
(defaults to &lt;code&gt;localhost:8084&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Note also that pipeline expressions may not behave exactly the same against the
testing endpoint and in your pipeline. In your pipeline, each expression is
evaluated against the context of the particular stage in which it was declared.
When using the testing endpoint, your expression is evaluated against the
entire pipeline at the end of its execution. Because of this, you need to access
all variables from the top level when using the testing endpoint. For example,
to check the type of a particular stage, you need to use the expression
&lt;code&gt;${#stage(&amp;quot;My Stage&amp;quot;)[&amp;quot;type&amp;quot;]}&lt;/code&gt;, whereas within &amp;ldquo;My Stage&amp;rdquo; you can use the
expression &lt;code&gt;${#root[&amp;quot;type&amp;quot;]}&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;examples&#34;&gt;Examples&lt;/h2&gt;
&lt;h3 id=&#34;dynamically-skip-a-stage&#34;&gt;Dynamically skip a stage&lt;/h3&gt;
&lt;p&gt;Each stage has a &lt;em&gt;Conditional on Expression&lt;/em&gt; checkbox in the &lt;em&gt;Execution Options&lt;/em&gt;
section of its configuration. If you select &lt;em&gt;Conditional on Expression&lt;/em&gt; and
enter an expression, the stage only runs if the expression evaluates to true.&lt;/p&gt;
&lt;p&gt;For example, if you input the expression &lt;code&gt;trigger[&amp;quot;dryRun&amp;quot;] == false&lt;/code&gt;, the
stage will be skipped during dry runs.  Note: expressions in this field do not
need to be wrapped in &lt;code&gt;${}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/conditional-on-expression.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Note that only the specific stage containing this expression will be skipped.
Stages that depend on it will still run.&lt;/p&gt;
&lt;h3 id=&#34;create-a-stack-named-after-a-committed-git-branch&#34;&gt;Create a stack named after a committed git branch&lt;/h3&gt;
&lt;p&gt;In this example, you use pipeline expressions to dynamically name the stack that
you&amp;rsquo;re deploying to.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Set up a pipeline that bakes an image from a Jenkins trigger. Make sure that
the Jenkins build is triggered by a git commit.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/jenkins-trigger.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a deploy stage to the pipeline. In the &lt;em&gt;stack&lt;/em&gt; field, you&amp;rsquo;ll use the
expression &lt;code&gt;${#alphanumerical(scmInfo.branch)}&lt;/code&gt; rather than a static value.
&lt;code&gt;#alphanumerical&lt;/code&gt; strips out all special characters from the input string, which
is important because some providers don&amp;rsquo;t allow stack names with special
characters. &lt;code&gt;scmInfo&lt;/code&gt; is a helper property which provides details about the most
recently executed Jenkins job.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/dynamic-stack-name.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Once saved, the deploy configuration should look like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/dynamic-stack-deploy-config.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit to a git branch in the repo you&amp;rsquo;ve connected to Jenkins in order to
trigger your pipeline. When the pipeline runs, it replaces the expression with
the name of the branch, creating a new cluster. The screenshot below shows what
happens when you push commits to both the &lt;em&gt;master&lt;/em&gt; branch and a branch called
&lt;em&gt;new-release&lt;/em&gt;. Note that the dash was stripped out of &lt;em&gt;new-release&lt;/em&gt;, creating
the &lt;em&gt;newrelease&lt;/em&gt; cluster.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/dynamic-clusters.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;use-preconditions-to-choose-pipeline-paths&#34;&gt;Use preconditions to choose pipeline paths&lt;/h3&gt;
&lt;p&gt;You&amp;rsquo;re going to set up a pipeline with three conditions, and gate these
conditions with a manual judgment stage. The screenshots below show a pipeline
that receives and bakes a binary from a Jenkins trigger, but you can work
through this example with any pipeline that&amp;rsquo;s able to deploy an image.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a pipeline and add a Manual Judgment stage named &amp;lsquo;Ask for next
step&amp;rsquo; with three input options: &lt;strong&gt;do nothing&lt;/strong&gt;, &lt;strong&gt;deploy another&lt;/strong&gt;, and
&lt;strong&gt;clean up&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/manual-judge-options.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a new &lt;em&gt;Check Precondition&lt;/em&gt; stage. Use the expression
&lt;code&gt;${#judgment(&amp;quot;Ask for next step&amp;quot;) == &#39;clean up&#39;}&lt;/code&gt; to check that the input was
&lt;strong&gt;clean up&lt;/strong&gt; before proceeding. Make sure that you uncheck &lt;em&gt;Fail pipeline&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/cleanup-precondition.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;judgment&lt;/code&gt; function checks the output of a Manual Judgment stage whose name
matches the input string.  Note that the input is case-sensitive. Since the name
of the Manual Judgment stage is &amp;lsquo;Ask for next step&amp;rsquo;, attempting to find it using
&lt;code&gt;#judgment(&amp;quot;ask for next step&amp;quot;)&lt;/code&gt; would fail.&lt;/p&gt;
&lt;p&gt;Now you have a branch of your pipeline that only executes if you decide to clean
up. Add any stages you want to execute based on this precondition. For example,
you may want to add a stage that disables the oldest Server Group.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/full-cleanup-branch.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Repeat the last few steps for the &lt;strong&gt;deploy another&lt;/strong&gt; input:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add an expression to check that the input was &lt;strong&gt;deploy another&lt;/strong&gt; before
proceeding&lt;/li&gt;
&lt;li&gt;Add the other stages for this pipeline branch (for example, a second deploy
stage)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At this point, the pipeline looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/deploy-and-cleanup.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run your pipeline. The options show up in the Manual Judgment stage:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/running-manual-judge.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;If you select &lt;strong&gt;do nothing&lt;/strong&gt;, which matches no preconditions, the pipeline just
stops:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/do-nothing-execution.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;If you select &lt;strong&gt;deploy another&lt;/strong&gt;, the stages gated by &lt;strong&gt;deploy another&lt;/strong&gt; are
executed:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/deploy-another-execution.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Finally, if you select &lt;strong&gt;cleaning up&lt;/strong&gt;, only the cleanup stages run:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/cleanup-execution.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Using Pipeline Templates</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/pipeline-templates/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/pipeline-templates/</guid>
      <description>
        
        
        &lt;p&gt;You can share these templates with your teams within a single application,
across different applications, or even across different deployments of
Spinnaker itself.&lt;/p&gt;
&lt;p&gt;Templates can be managed using 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/spin/pipeline-templates/&#34;&gt;spin&lt;/a&gt;
 or the UI. To manage templates through the UI, enable the requisite feature flag: &lt;code&gt;hal config features edit --managed-pipeline-templates-v2-ui true&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The following diagram illustrates one common workflow for Managed Pipeline Templates (MPT v2). Depending on your deployment, enabled features, and tooling, the lifecycle may vary. For example, Sponnet is optional, and templates may be authored or managed using different tools.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/images/mpt-v2-architecture.png&#34; alt=&#34;Example Managed Pipeline Template v2 workflow&#34;&gt;&lt;/p&gt;
&lt;p&gt;This diagram is intended as an illustrative example rather than the only supported architecture. In this example, templates are authored directly or generated using Sponnet, managed through the Spin CLI or Deck UI, stored through Gate and Front50, hydrated by Orca, and ultimately executed as pipelines.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Before you begin:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/spin/&#34;&gt;Install the Spin CLI&lt;/a&gt;
 so you can manage pipelines and pipeline templates.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/pipeline-templates/enable/&#34;&gt;Enable pipelines templates&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;structure-of-a-pipeline-template&#34;&gt;Structure of a pipeline template&lt;/h2&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/pipeline/templates/&#34;&gt;The underlying structure&lt;/a&gt;
 of a pipeline template is very close to the pipeline
JSON configuration format, viewable in the Deck UI. But it includes information
about the variables the template uses.&lt;/p&gt;
&lt;h2 id=&#34;the-things-you-can-do-with-pipeline-templates&#34;&gt;The things you can do with pipeline templates&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/pipeline-templates/create/&#34;&gt;Create a template&lt;/a&gt;
 based on an existing pipeline.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Share the template with one or more teams of developers using Spinnaker.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/pipeline-templates/create/#4-save-the-template&#34;&gt;Save a pipeline template&lt;/a&gt;
 to Spinnaker to make it available to developers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[Use the Spin CLI to plan how to parameterize the
template]({&amp;lt; ref &amp;ldquo;/docs/guides/user/pipeline/pipeline-templates/plan&amp;rdquo; &amp;gt;}}) by visualizing a hydrated pipeline.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/pipeline-templates/instantiate/&#34;&gt;Create a pipeline based on a template&lt;/a&gt;
.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/pipeline-templates/override/&#34;&gt;Override&lt;/a&gt;
 template definitions in your pipeline.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/spin/pipeline-templates/&#34;&gt;List and get pipeline templates&lt;/a&gt;
.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Triggers Overview</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/triggers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/triggers/</guid>
      <description>
        
        
        &lt;p&gt;There are many types of triggers available: Jenkins jobs, webhooks, CRON jobs, and
even other pipelines. Adding a trigger to your pipeline means that the pipeline
runs each time the triggering event occurs.&lt;/p&gt;
&lt;p&gt;Note that whether or not you have set up a pipeline trigger, you can always

&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/managing-pipelines#manually-run-a-pipeline&#34;&gt;run your pipeline manually&lt;/a&gt;
.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Search for Triggered Pipeline Executions</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/searching/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/pipeline/searching/</guid>
      <description>
        
        
        &lt;p&gt;This guide describes how to use the &lt;code&gt;searchForPipelineExecutionsByTrigger&lt;/code&gt; API to search for pipeline executions triggered by Pub/Sub messages or webhooks.&lt;/p&gt;
&lt;h2 id=&#34;pubsub&#34;&gt;Pub/Sub&lt;/h2&gt;
&lt;h3 id=&#34;structure-your-trigger&#34;&gt;Structure your trigger&lt;/h3&gt;
&lt;p&gt;When you create the Pub/Sub message, add a field that can be used to identify the message. For example, you can add an &lt;code&gt;id&lt;/code&gt; field with a randomly generated GUID string as its value.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;9c3036f6-3791-47eb-bb69-30983acb00be&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This &lt;code&gt;id&lt;/code&gt; field can be used later to search for all pipelines executed by this trigger.&lt;/p&gt;
&lt;h3 id=&#34;query-your-triggered-pipelines&#34;&gt;Query your triggered pipelines&lt;/h3&gt;
&lt;p&gt;To query for pipeline triggered by a specific Pub/Sub message, you can structure your API call with the following information:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;APPLICATION&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;application-name&amp;gt;  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# This will narrow down results to only contain pipeline executions within a given application. You may supply &amp;#39;*&amp;#39; here to search across all applications.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;TRIGGER_TYPE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;pubsub  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# This will narrow down results to only contain pipelines executions triggered by a Pub/Sub message&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;TRIGGER&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{ &amp;#34;id&amp;#34;: &amp;#34;9c3036f6-3791-47eb-bb69-30983acb00be&amp;#34; }&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; base64&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# This will narrow down results to only contain pipeline executions triggered with a payload that includes this key/value. We base64-encode this so that it can be passed as a query parameter to the API.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Example call to Gate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl localhost:8084/applications/&lt;span style=&#34;color:#000&#34;&gt;$APPLICATION&lt;/span&gt;/executions/search?triggerTypes&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$TRIGGER_TYPE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;trigger&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$TRIGGER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This call will return a list of pipeline executions triggered by a trigger with the given information, sorted by trigger time in reverse order so that newer executions are first in the list.&lt;/p&gt;
&lt;h2 id=&#34;query-your-webhook-triggered-pipeline&#34;&gt;Query your webhook-triggered pipeline&lt;/h2&gt;
&lt;p&gt;Triggering a pipeline via a webhook returns a unique ID that can later be used to search for all pipelines executed by this trigger. The response body will contain an &lt;code&gt;eventId&lt;/code&gt; field with a unique value.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;eventId&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;c581dc8c-af6d-4ef0-8d84-27a64764b2f3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To query for pipeline executions triggered by a specific webhook call, you can structure your API call with the following information:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;APPLICATION&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;application-name&amp;gt;  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# This will narrow down results to only contain pipeline executions within a given application. You may supply &amp;#39;*&amp;#39; here to search across all applications.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;TRIGGER_TYPE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;webhook  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# This will narrow down results to only contain pipelines executions triggered by a webhook call&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;EVENT_ID&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;c581dc8c-af6d-4ef0-8d84-27a64764b2f3  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# eventId value returned by webhook call&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Example call to Gate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl localhost:8084/applications/&lt;span style=&#34;color:#000&#34;&gt;$APPLICATION&lt;/span&gt;/executions/search?triggerTypes&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$TRIGGER_TYPE&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;eventId&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$EVENT_ID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This call will return a list of pipeline executions triggered by a trigger with the given information, sorted by trigger time in reverse order so that newer executions are first in the list.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
