<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Spinnaker – Additional Features</title>
    <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/</link>
    <description>Recent content in Additional Features on Spinnaker</description>
    <generator>Hugo -- gohugo.io</generator>
    
	  <atom:link href="https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Configuring the Script Stage</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/script-stage/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/script-stage/</guid>
      <description>
        
        
        &lt;h2 id=&#34;purpose&#34;&gt;Purpose&lt;/h2&gt;
&lt;p&gt;The 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/reference/pipeline/stages/#script&#34;&gt;Script stage&lt;/a&gt;
 lets you run an arbitrary
shell, Python, or Groovy script on a Jenkins instance as a first class stage in
Spinnaker. For example, you can use it to launch a test suite from a pipeline
instead of doing it manually. Using the Script stage requires some additional
setup after you add Jenkins to your Spinnaker deployment.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;To configure a Script stage, you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A running Jenkins instance at &lt;code&gt;$JENKINS_HOST&lt;/code&gt;, with a Jenkins user profile set up
with access to create jobs&lt;/li&gt;
&lt;li&gt;A running Spinnaker instance, with access to configuration files, and in
which you have 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/ci/jenkins/&#34;&gt;set up Jenkins on Spinnaker&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configure-jenkins&#34;&gt;Configure Jenkins&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the 
&lt;a href=&#34;https://storage.googleapis.com/jenkins-script-stage-config/scriptJobConfig.xml&#34; target=&#34;_blank&#34;&gt;raw job xml config
file&lt;/a&gt;

with the command:&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;curl -X GET &lt;span style=&#34;color:#4e9a06&#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:#4e9a06&#34;&gt;&lt;/span&gt;    -o &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;scriptJobConfig.xml&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#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:#4e9a06&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://storage.googleapis.com/jenkins-script-stage-config/scriptJobConfig.xml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create the Jenkins job where your script will run. To create the job, you
need the following information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$JENKINS_HOST&lt;/code&gt;: your running Jenkins instance with protocol (http/https - e.g. 
&lt;a href=&#34;https://myjenkins.com&#34; target=&#34;_blank&#34;&gt;https://myjenkins.com&lt;/a&gt;
 or http://somejenkins:8080).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$JOB_NAME&lt;/code&gt;: the name of the Jenkins job where your script runs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$USER&lt;/code&gt;: your Jenkins username.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$USER_API_TOKEN&lt;/code&gt;: the API token for your user. You can find this in
Jenkins in the &lt;strong&gt;Configure&lt;/strong&gt; page for your user (e.g. &lt;code&gt;$JENKINS_HOST/user/$USER/configure&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, run the command:&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;curl -s -XPOST &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$JENKINS_HOST&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;/createItem?name=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$JOB_NAME&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#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:#4e9a06&#34;&gt;&lt;/span&gt;    -u &lt;span style=&#34;color:#000&#34;&gt;$USER&lt;/span&gt;:&lt;span style=&#34;color:#000&#34;&gt;$USER_API_TOKEN&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#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:#4e9a06&#34;&gt;&lt;/span&gt;    --data-binary @scriptJobConfig.xml &lt;span style=&#34;color:#4e9a06&#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:#4e9a06&#34;&gt;&lt;/span&gt;    -H &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Content-Type:text/xml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Navigate to Jenkins &amp;raquo; the job you just created &amp;raquo; &lt;strong&gt;Configure&lt;/strong&gt; and do the
following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add the GitHub repository containing your scripts.&lt;/li&gt;
&lt;li&gt;Either create a &lt;code&gt;Spinnaker&lt;/code&gt; node in which Jenkins will run all Script
jobs, or de-select the &lt;strong&gt;Restrict where this project can be run&lt;/strong&gt;
checkbox.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At this point, you can manually run the script job in Jenkins (including
manually adding necessary parameters) and see it succeed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If your Jenkins master is named anything other than &lt;code&gt;master&lt;/code&gt; in your
Spinnaker configuration, you&amp;rsquo;ll need to add the following to
&lt;code&gt;orca-local.yml&lt;/code&gt; in order for Spinnaker to find it:&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-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;script&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;master&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;your-jenkins-master&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;job&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$JOB_NAME  # from step&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#3&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can now use the Script stage in your pipelines.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Enable Slack Support Channels</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/slack-support/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/slack-support/</guid>
      <description>
        
        
        &lt;p&gt;You can 
&lt;a href=&#34;https://deploy-preview-629--spinnaker-io.netlify.app/docs/guides/user/applications/create/&#34;&gt;create an application&lt;/a&gt;
 and configure it with relevant data—&lt;em&gt;application attributes&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Including a Slack support channel for an application is a configurable application attribute. This feature communicates with Slack&amp;rsquo;s 
&lt;a href=&#34;https://api.slack.com/docs/conversations-api&#34; target=&#34;_blank&#34;&gt;conversations API&lt;/a&gt;
 to expose a list of available Slack channels in your workspace. The Slack support channel feature is supported by all providers.&lt;/p&gt;
&lt;h1 id=&#34;configuration&#34;&gt;Configuration&lt;/h1&gt;
&lt;h2 id=&#34;gate&#34;&gt;Gate&lt;/h2&gt;
&lt;p&gt;You need an API token associated with your Slack workspace for gate to receive a list of channels from Slack&amp;rsquo;s API. See the 
&lt;a href=&#34;https://slack.com/help/articles/215770388-Create-and-regenerate-API-tokens&#34; target=&#34;_blank&#34;&gt;Slack documentation&lt;/a&gt;
 if you need to create a Slack token. Add this token in the config for gate&amp;rsquo;s &lt;strong&gt;encrypted&lt;/strong&gt; secrets.&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-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;slack&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;YOUR_TOKEN_HERE&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The base url for the Slack API is also needed in &lt;code&gt;gate.yml&lt;/code&gt;. This does not need to be encrypted.&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-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;slack&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;baseUrl&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;https://slack.com/api&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;deck&#34;&gt;Deck&lt;/h2&gt;
&lt;p&gt;The UI components in deck are protected with a feature flag in the application settings, &lt;code&gt;settings.netflix.ts&lt;/code&gt;. To activate this feature you need to enable this flag to &lt;code&gt;true&lt;/code&gt;.&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;feature&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#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:#000&#34;&gt;slack&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;true&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:#000;font-weight:bold&#34;&gt;...&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;otherFeatures&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;If your workspace&amp;rsquo;s base URL is anything other than 
&lt;a href=&#34;https://slack.com&#34; target=&#34;_blank&#34;&gt;https://slack.com&lt;/a&gt;
, then you need to configure this as well. This base URL is used to construct the link for accessing a Slack support channel.&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-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#000&#34;&gt;slack&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#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:#000&#34;&gt;baseUrl&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;https://my-cool-workspace.slack.com&amp;#39;&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:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: Notifications and Events Guide</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/notifications/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/notifications/</guid>
      <description>
        
        
        &lt;p&gt;Out of the box, Spinnaker allows you to configure the following types of notifications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;#email&#34;&gt;Email&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;#microsoft-teams&#34;&gt;Microsoft Teams&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;#slack&#34;&gt;Slack&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;#twilio&#34;&gt;SMS&lt;/a&gt;
 via Twilio&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;#cdevents&#34;&gt;CDEvents&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is discussed in the Configuring Notifications section below.&lt;/p&gt;
&lt;p&gt;Additionally, Spinnaker allows you to set webhooks for git triggers. See the 
&lt;a href=&#34;#setting-up-git-triggers-in-spinnaker&#34;&gt;Setting up Git Triggers in Spinnaker&lt;/a&gt;
 section.&lt;/p&gt;
&lt;p&gt;You can also set Spinnaker to stream all its events to a downstream listener. See the 
&lt;a href=&#34;#add-a-listening-webhook-to-spinnaker&#34;&gt;Add a Webhook to Spinnaker&lt;/a&gt;
 section.&lt;/p&gt;
&lt;p&gt;Spinnaker is also capable of handling cron-based triggers and detect changes in Jenkins builds and Docker
images by enabling 
&lt;a href=&#34;https://spinnaker.io/docs/setup/other_config/ci/&#34; target=&#34;_blank&#34;&gt;continuous integration configuration in spinnaker&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Last, pub/sub triggering with both custom and default types is available via 
&lt;a href=&#34;https://spinnaker.io/docs/setup/other_config/triggers/amazon/&#34; target=&#34;_blank&#34;&gt;aws pub/sub configurations&lt;/a&gt;

or 
&lt;a href=&#34;https://spinnaker.io/docs/setup/other_config/triggers/google/&#34; target=&#34;_blank&#34;&gt;Google pub/sub integration&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id=&#34;configuring-notifications&#34;&gt;Configuring notifications&lt;/h2&gt;
&lt;p&gt;Notification configurations are in &lt;code&gt;echo-local.yml&lt;/code&gt; and &lt;code&gt;settings-local.js&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;spinnaker-baseurl&#34;&gt;Spinnaker baseURL&lt;/h2&gt;
&lt;p&gt;You need to set the &lt;code&gt;spinnaker.baseUrl&lt;/code&gt; configuration value which is used by spinnaker templates. This should point back
to the url for your spinnaker&amp;rsquo;s UI ( deck ) instance. This url is used in notifications to link back to your spinnaker
instance.&lt;/p&gt;
&lt;h2 id=&#34;email&#34;&gt;Email&lt;/h2&gt;
&lt;p&gt;Email in spinnaker is provided by 
&lt;a href=&#34;https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-email.html&#34; target=&#34;_blank&#34;&gt;Spring Boot Mail
starter&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;The settings for some popular email providers are listed below:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Email Provider&lt;/th&gt;
&lt;th&gt;SMTP username&lt;/th&gt;
&lt;th&gt;SMTP password&lt;/th&gt;
&lt;th&gt;SMTP server address&lt;/th&gt;
&lt;th&gt;SMTP port (TLS)&lt;/th&gt;
&lt;th&gt;SMTP port (SSL)&lt;/th&gt;
&lt;th&gt;SMTP TLS/SSL required&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gsuite/Gmail&lt;/td&gt;
&lt;td&gt;Your email address&lt;/td&gt;
&lt;td&gt;Your email password&lt;/td&gt;
&lt;td&gt;smtp.gmail.com&lt;/td&gt;
&lt;td&gt;587&lt;/td&gt;
&lt;td&gt;465&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yahoo&lt;/td&gt;
&lt;td&gt;Your email address&lt;/td&gt;
&lt;td&gt;Your email password&lt;/td&gt;
&lt;td&gt;smtp.mail.yahoo.com&lt;/td&gt;
&lt;td&gt;587&lt;/td&gt;
&lt;td&gt;465&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hotmail/live&lt;/td&gt;
&lt;td&gt;Your email address&lt;/td&gt;
&lt;td&gt;Your email password&lt;/td&gt;
&lt;td&gt;smtp.live.com&lt;/td&gt;
&lt;td&gt;587&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outlook&lt;/td&gt;
&lt;td&gt;Your email address&lt;/td&gt;
&lt;td&gt;Your email password&lt;/td&gt;
&lt;td&gt;smtp-mail.outlook.com&lt;/td&gt;
&lt;td&gt;587&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The following is an example of using hotmail to send notifications.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo-local.yml&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mail:
  enabled: true
  from: &amp;lt;myemail&amp;gt;@hotmail.com
spring:
  mail:
    host: smtp.live.com
    username: &amp;lt;myemail&amp;gt;@hotmail.com
    password: hunter2
    port: 587
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
        transport:
          protocol: smtp
#	debug: true &amp;lt;- this is useful if you are mucking around with smtp properties  
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;in settings-local.js (deck)&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;window.spinnakerSettings = window.spinnakerSettings || {};
window.spinnakerSettings.notifications = window.spinnakerSettings.notifications || {};
window.spinnakerSettings.notifications.email = window.spinnakerSettings.notifications.email || {};
window.spinnakerSettings.notifications.email.enabled = true;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;microsoft-teams&#34;&gt;Microsoft Teams&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Note, teams has changed their APIs.  We are unable at this time to
send notifications to teams, but would welcome PRs to fix teams integration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To enable Microsoft Teams support, add the following statement to the &lt;code&gt;echo-local.yml&lt;/code&gt; file:&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;microsoftteams&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Spinnaker supports sending notifications to Microsoft Teams using Incoming Webhooks.&lt;/p&gt;
&lt;p&gt;To create a custom incoming webhook in Teams, follow the instructions provided here: 
&lt;a href=&#34;https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook#add-an-incoming-webhook-to-a-teams-channel&#34; target=&#34;_blank&#34;&gt;Add an incoming webhook to a Teams channel&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;When configuring a Microsoft Teams notification, enter the full incoming webhook URL in the &lt;code&gt;Teams Webhook URL&lt;/code&gt; text box.
&lt;img src=&#34;ms-teams.png&#34; alt=&#34;In the Edit Notification window, specify Microsoft Teams in the Notify via field and provide your Teams webhook URL. Then, select what events trigger notifications.&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;slack&#34;&gt;Slack&lt;/h2&gt;
&lt;p&gt;For slack, you need to 
&lt;a href=&#34;https://api.slack.com/bot-users#how_do_i_create_custom_bot_users_for_my_team&#34; target=&#34;_blank&#34;&gt;create a custom bot
user&lt;/a&gt;
,
then get the access token associated with that new bot user. Then&amp;hellip;&lt;/p&gt;
&lt;p&gt;Add to &lt;code&gt;echo-local.yml&lt;/code&gt;&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;slack&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;botName&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;SpinnakerNotifications&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;${ECHO_NOTIFICATION_SECRETS_SLACK_BOT_TOKEN}&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note: your users will need to invite the slack bot to private rooms that want to be notified.&lt;/p&gt;
&lt;h2 id=&#34;twilio&#34;&gt;Twilio&lt;/h2&gt;
&lt;p&gt;For Twilio, you need to add your account 
&lt;a href=&#34;https://support.twilio.com/hc/en-us/articles/223136027-Auth-Tokens-and-how-to-change-them&#34; target=&#34;_blank&#34;&gt;credentials&lt;/a&gt;
. Then&amp;hellip;
add this to your &lt;code&gt;echo-local.yml&lt;/code&gt;&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;twilio&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;baseUrl&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;https://api.twilio.com/&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;token&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;token&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;account&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;TWILIO_ACCOUNT_SID&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;from&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;twilioPhoneNumber&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;cdevents&#34;&gt;CDEvents&lt;/h2&gt;
&lt;p&gt;To enable CDEvents notification support, add the following statement to the &lt;code&gt;echo-local.yml&lt;/code&gt; file:&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cdevents&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;enabled&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Spinnaker supports sending CDEvents to a configured 
&lt;a href=&#34;https://www.enterpriseintegrationpatterns.com/patterns/messaging/MessageBroker.html&#34; target=&#34;_blank&#34;&gt;Message Broker&lt;/a&gt;
. The Message Broker is defined within the notification itself.&lt;/p&gt;
&lt;p&gt;For example, 
&lt;a href=&#34;https://knative.dev/docs/getting-started/&#34; target=&#34;_blank&#34;&gt;Knative Eventing&lt;/a&gt;
 can be configured as a Message Broker to receive CDEvents.&lt;/p&gt;
&lt;p&gt;When configuring a CDEvents notification, In the Edit Notification window, specify CDEvents in the Notify via field and enter the full Message Broker URL in the &lt;code&gt;Events Broker URL&lt;/code&gt; text box.&lt;/p&gt;
&lt;p&gt;To send a specific type of CDEvents, enter the CDEvents Type in the &lt;code&gt;CDEvents Type&lt;/code&gt; text box. Different types of CDEvents can be found in the 
&lt;a href=&#34;https://github.com/cdevents/spec&#34; target=&#34;_blank&#34;&gt;CDEvents Specification&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;cdevents.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Note: Currently Spinnaker supports sending 
&lt;a href=&#34;https://cdevents.dev/docs/core/&#34; target=&#34;_blank&#34;&gt;Continuous Delivery Core Events&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id=&#34;using-notifications&#34;&gt;Using notifications&lt;/h2&gt;
&lt;p&gt;Once notifications have been configured, you can use them to send changes in pipelines and in the manual judgment stage in Spinnaker.&lt;/p&gt;
&lt;p&gt;To set up an application-wide notification, go to Application -&amp;gt; Config -&amp;gt; Notifications,&lt;/p&gt;
&lt;p&gt;Click on &amp;lsquo;Add Notification&amp;rsquo;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;edit-notification.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Enter your notification details.&lt;/p&gt;
&lt;p&gt;You can also set Notifications at the Pipeline level ( under configuration ) and at the stage level ( by clicking on the [ ] Send Notifications for this stage checkbox.&lt;/p&gt;
&lt;h3 id=&#34;customizing-notifications&#34;&gt;Customizing notifications&lt;/h3&gt;
&lt;p&gt;Spinnaker will send a standard message based on the event that triggered the notification, indicating the stage (if applicable), the pipeline, the application, and the status of the event. It will also include a link to the pipeline.&lt;/p&gt;
&lt;p&gt;For stage-level notifications, you can override the message by editing the JSON of the stage, adding a &lt;code&gt;customBody&lt;/code&gt; field (for email) or a &lt;code&gt;customMessage&lt;/code&gt; field (for Slack). If you are customizing an email notification, you can use Markdown or HTML to customize the format of the email. If you are using Slack, you can use a more 
&lt;a href=&#34;https://api.slack.com/docs/message-formatting#message_formatting&#34; target=&#34;_blank&#34;&gt;limited range of formatting&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;For email messages, you can customize the subject by adding a &lt;code&gt;customSubject&lt;/code&gt; field.&lt;/p&gt;
&lt;p&gt;All standard 
&lt;a href=&#34;https://www.spinnaker.io/guides/user/pipeline/expressions/&#34; target=&#34;_blank&#34;&gt;SpEL expressions&lt;/a&gt;
 will be evaluated prior to sending the notifications, and can be used in the custom notification fields.&lt;/p&gt;
&lt;p&gt;There are two special variables available when adding a custom message or body: &lt;code&gt;executionId&lt;/code&gt; (the ID of the execution) and &lt;code&gt;link&lt;/code&gt; (a fully-formed URL for the pipeline or stage that triggered the notification). To use either of these fields, just wrap them in two curly brackets, e.g. &lt;code&gt;{% raw %}{{link}}{% endraw %}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;An example of a custom email notification:
{% raw %}&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;customSubject&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;Beginning deployment to production (started by: ${trigger.user})&amp;#34;&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;customBody&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;*Pipeline parameters:* ${parameters.toString()}\n\n [View the stage]({{link}}) here.&amp;#34;&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;notifications&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#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:#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;address&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;spinnakerteam@spinnaker.io&amp;#34;&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;level&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;stage&amp;#34;&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;type&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;email&amp;#34;&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;when&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#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:#4e9a06&#34;&gt;&amp;#34;stage.starting&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;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:#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:#8f5902;font-style:italic&#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;&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;{% endraw %}&lt;/p&gt;
&lt;p&gt;A custom Slack message:
{% raw %}&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;customMessage&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;${trigger.user} started a &amp;lt;{{link}}|deploy to production&amp;gt;&amp;#34;&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;notifications&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#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:#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;address&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;spinnaker-prod-deploys&amp;#34;&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;level&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;stage&amp;#34;&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;type&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;slack&amp;#34;&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;when&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#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:#4e9a06&#34;&gt;&amp;#34;stage.starting&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;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:#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:#8f5902;font-style:italic&#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;&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;{% endraw %}&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: the custom fields will apply to &lt;strong&gt;all&lt;/strong&gt; notifications within a stage. If you have different notifications for different events (e.g. a Slack message when the stage starts &lt;strong&gt;and&lt;/strong&gt; when it completes), the custom fields will be applied to both messages.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;setting-up-git-triggers-in-spinnaker&#34;&gt;Setting up Git Triggers in Spinnaker&lt;/h2&gt;
&lt;p&gt;Instead of listening for events from Github like in the Docker and Jenkins case, direct triggering from git requires a webhook endpoint to be set up in the corresponding VCS.&lt;/p&gt;
&lt;h2 id=&#34;github&#34;&gt;Github&lt;/h2&gt;
&lt;h3 id=&#34;using-github-as-a-trigger&#34;&gt;Using Github as a Trigger&lt;/h3&gt;
&lt;p&gt;Go to your project&amp;rsquo;s Webhooks page, for example 
&lt;a href=&#34;https://github.com/spinnaker/igor/settings/hooks&#34; target=&#34;_blank&#34;&gt;https://github.com/spinnaker/igor/settings/hooks&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Click &amp;ldquo;Add webhook&amp;rdquo;&lt;/p&gt;
&lt;p&gt;enter &lt;code&gt;http://[spinnakerapi]/webhooks/git/github&lt;/code&gt; in the Payload URL, where
&lt;code&gt;spinnakerapi&lt;/code&gt; is the location of your gate installation.&lt;/p&gt;
&lt;p&gt;select &amp;ldquo;Just the push event&amp;rdquo;&lt;/p&gt;
&lt;p&gt;make it active&lt;/p&gt;
&lt;p&gt;Click &amp;ldquo;Add Webhook&amp;rdquo; button&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;github.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;stash&#34;&gt;Stash&lt;/h2&gt;
&lt;p&gt;Go to settings / hooks for your repository&lt;/p&gt;
&lt;p&gt;Add a Post Receive webhook&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;stash.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Add the following URL: &lt;code&gt;http://[gate url]/webhooks/git/stash&lt;/code&gt;, where &lt;code&gt;gate url&lt;/code&gt;
is the url to your spinnaker api.&lt;/p&gt;
&lt;p&gt;You are now ready to receive events from this repository.&lt;/p&gt;
&lt;h2 id=&#34;bitbucket-cloud&#34;&gt;BitBucket Cloud&lt;/h2&gt;
&lt;p&gt;Go to settings / webhooks for your repository&lt;/p&gt;
&lt;p&gt;Click &amp;lsquo;Add webhook&amp;rsquo;&lt;/p&gt;
&lt;p&gt;Add a &amp;lsquo;Repository Push&amp;rsquo; or &amp;lsquo;Pull Request Merged&amp;rsquo; webhook&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;bitbucket.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Add the following URL: &lt;code&gt;http://[gate url]/webhooks/git/bitbucket&lt;/code&gt;, where
&lt;code&gt;gate url&lt;/code&gt; is the url to your spinnaker api.&lt;/p&gt;
&lt;p&gt;You are now ready to receive events from this repository.&lt;/p&gt;
&lt;h3 id=&#34;add-git-trigger-in-pipeline&#34;&gt;Add Git Trigger in Pipeline:&lt;/h3&gt;
&lt;p&gt;Go to Pipeline &amp;gt; Configuration&lt;/p&gt;
&lt;p&gt;Select Trigger Type to be Git&lt;/p&gt;
&lt;p&gt;Set Repository Type to be github, stash, or bitbucket&lt;/p&gt;
&lt;p&gt;Enter your Repository organization / user&lt;/p&gt;
&lt;p&gt;Enter your Repository name&lt;/p&gt;
&lt;p&gt;Save your pipeline&lt;/p&gt;
&lt;h4 id=&#34;notes&#34;&gt;Notes&lt;/h4&gt;
&lt;p&gt;You can access the hash of the build via expression &lt;code&gt;${trigger.hash}&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;add-a-listening-webhook-to-spinnaker&#34;&gt;Add a listening webhook to spinnaker&lt;/h2&gt;
&lt;p&gt;The 
&lt;a href=&#34;https://github.com/spinnaker/echo/tree/master/echo-rest&#34; target=&#34;_blank&#34;&gt;echo-rest&lt;/a&gt;

module in spinnaker allows you to set downstream listeners keeping track of
Spinnaker events.&lt;/p&gt;
&lt;p&gt;Whenever Spinnaker receives an event from Orca, igor, or echo, it will forward these events to the webhooks registered.&lt;/p&gt;
&lt;p&gt;A useful pattern is to have an intermediate service that will filter and convert events you care about into the format you expect.&lt;/p&gt;
&lt;h2 id=&#34;configuration-in-echoyml&#34;&gt;Configuration in echo.yml&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;rest:
  enabled: true
  endpoints:
    -
      wrap: false
      url: http://listener.com
    -
      wrap: false
      url: http://listener2.com
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will post every event to listener and listener2&lt;/p&gt;
&lt;h2 id=&#34;wrapping&#34;&gt;Wrapping&lt;/h2&gt;
&lt;p&gt;If your endpoint expects events of the form&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;	{ &amp;#34;eventName&amp;#34; : &amp;#34;abc&amp;#34;, &amp;#34;payload&amp;#34; : &amp;#34;[event json]&amp;#34;}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;you can wrap the event via this configuration:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  -
      wrap: true
      flatten: true
      url: http://listener3
      eventName: spinnaker_events
      fieldName: payload
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The flatten setting will simply make the json in content and details ( see below ) into a json String.&lt;/p&gt;
&lt;h2 id=&#34;event-types&#34;&gt;Event types&lt;/h2&gt;
&lt;p&gt;Here is an example event:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{
    &amp;#34;details&amp;#34;: {
      &amp;#34;source&amp;#34;: &amp;#34;orca&amp;#34;,
      &amp;#34;type&amp;#34;: &amp;#34;orca:task:complete&amp;#34;,
      &amp;#34;created&amp;#34;: &amp;#34;1422487582294&amp;#34;,
      &amp;#34;organization&amp;#34;: null,
      &amp;#34;project&amp;#34;: null,
      &amp;#34;application&amp;#34;: &amp;#34;asgard&amp;#34;,
      &amp;#34;_content_id&amp;#34;: null
    },
    &amp;#34;content&amp;#34;: {
      &amp;#34;standalone&amp;#34;: true,
      &amp;#34;context&amp;#34;: {
        &amp;#34;asgName&amp;#34;: &amp;#34;asgard-staging-v048&amp;#34;,
        &amp;#34;credentials&amp;#34;: &amp;#34;test&amp;#34;,
        &amp;#34;deploy.account.name&amp;#34;: &amp;#34;test&amp;#34;,
        &amp;#34;deploy.server.groups&amp;#34;: {},
        &amp;#34;kato.last.task.id&amp;#34;: {
          &amp;#34;id&amp;#34;: &amp;#34;19351&amp;#34;
        },
        &amp;#34;kato.task.id&amp;#34;: {
          &amp;#34;id&amp;#34;: &amp;#34;19351&amp;#34;
        },
        &amp;#34;kato.tasks&amp;#34;: [
          {
            &amp;#34;history&amp;#34;: [
            ],
            &amp;#34;id&amp;#34;: &amp;#34;19351&amp;#34;,
            &amp;#34;resultObjects&amp;#34;: []
          }
        ],
        &amp;#34;notification.type&amp;#34;: &amp;#34;enableasg&amp;#34;,
        &amp;#34;regions&amp;#34;: [&amp;#34;us-west-1&amp;#34;],
        &amp;#34;targetop.asg.enableAsg.name&amp;#34;: &amp;#34;asgard-staging-v048&amp;#34;,
        &amp;#34;targetop.asg.enableAsg.regions&amp;#34;: [&amp;#34;us-west-1&amp;#34;],
        &amp;#34;user&amp;#34;: &amp;#34;clin@netflix.com&amp;#34;,
        &amp;#34;zones&amp;#34;: [&amp;#34;us-west-1a&amp;#34;, &amp;#34;us-west-1c&amp;#34;]
      },
      &amp;#34;execution&amp;#34;: ...
      &amp;#34;executionId&amp;#34;: &amp;#34;62ca5574-0629-419a-b9ac-fb873aa165b2&amp;#34;,
      &amp;#34;taskName&amp;#34;: &amp;#34;f92239a7-b57a-408d-9d72-3a77484e050b.enableAsg.monitorAsg.9568e7e5-3c37-4699-9e93-f62118adc7c6&amp;#34;
    }
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Events have details, which will always be the same.&lt;/p&gt;
&lt;h3 id=&#34;detailstype&#34;&gt;details.type&lt;/h3&gt;
&lt;p&gt;The type of the event will outline where the event is coming from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;orca:[task type]:[status] - where task type is either &amp;lsquo;pipeline&amp;rsquo;, &amp;lsquo;stage&amp;rsquo; or &amp;rsquo;task&amp;rsquo; and status is &amp;lsquo;starting&amp;rsquo;, &amp;lsquo;complete&amp;rsquo;, &amp;lsquo;failed&amp;rsquo;&lt;/li&gt;
&lt;li&gt;build - from igor Jenkins events&lt;/li&gt;
&lt;li&gt;docker - from igor Docker events&lt;/li&gt;
&lt;li&gt;git - from git web triggers&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;detailsapplication&#34;&gt;details.application&lt;/h3&gt;
&lt;p&gt;The application involved in the execution, this will only exist for orca: type events.&lt;/p&gt;
&lt;h3 id=&#34;contentexecution&#34;&gt;content.execution&lt;/h3&gt;
&lt;p&gt;For orca type events, this is the current execution that has the entire pipeline execution.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: User Data Files and Metadata</title>
      <link>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/user-data/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://deploy-preview-629--spinnaker-io.netlify.app/docs/setup/other_config/features/user-data/</guid>
      <description>
        
        
        &lt;p&gt;Spinnaker refers to data injected into instances started by Spinnaker as &lt;em&gt;user data&lt;/em&gt;.
The implementation and naming of this varies from provider to provider, but the resulting functionality is similar.
In AWS, it is known as 
&lt;a href=&#34;http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html&#34; target=&#34;_blank&#34;&gt;User Data&lt;/a&gt;
.
In GCP, it is known as 
&lt;a href=&#34;https://cloud.google.com/compute/docs/storing-retrieving-metadata&#34; target=&#34;_blank&#34;&gt;Instance Metadata&lt;/a&gt;
.
The template file used to define the user data is called the &lt;em&gt;user data file&lt;/em&gt; which is located on the Clouddriver server.
Tokens are replaced in the user data file to provide some specifics about the deployment.
Every instance started has environment variables are set according to the template and the deployment.
This feature is currently supported with the AWS and GCP providers.&lt;/p&gt;
&lt;h2 id=&#34;configuration&#34;&gt;Configuration&lt;/h2&gt;
&lt;p&gt;The filename and location of the file is configured differently for each provider.
The general format for the template file a simple property file though there are some differences depending on the provider.&lt;/p&gt;
&lt;p&gt;Example of setting a Consul server address:&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;CONSUL_SERVER_ADDRESS&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;consul.example.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The environment variable &lt;code&gt;CONSUL_SERVER_ADDRESS&lt;/code&gt; will be set on every instance with the value of &lt;code&gt;consul.example.com&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Typical usage would be defining environment variables with the values including the environment specific details
to customize the behavior based on account, environment, region, and other things.&lt;/p&gt;
&lt;p&gt;Here is the list of replacement tokens:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Token&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%%account%%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Name of the account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%%accounttype%%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Type of the account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%%env%%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Environment of the account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%%app%%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Application being deployed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%%region%%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The deployment region&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%%group%%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Name of the server group&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%%cluster%%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Name of the cluster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%%stack%%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stack component of the cluster name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%%detail%%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Detail component of the cluster name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%%launchconfig%%&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Name of the launch configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Example template file using tokens in the values:&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;CLOUD_ACCOUNT&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;%%account%%&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&#34;&gt;CLOUD_ACCOUNT_TYPE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;%%accounttype%%&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&#34;&gt;CLOUD_ENVIRONMENT&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;%%env%%&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&#34;&gt;CLOUD_SERVER_GROUP&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;%%group%%&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&#34;&gt;CLOUD_CLUSTER&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;%%cluster%%&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&#34;&gt;CLOUD_STACK&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;%%stack%%&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&#34;&gt;CLOUD_DETAIL&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;%%detail%%&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&#34;&gt;CLOUD_REGION&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;%%region%%&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the server group udf-example-cluster-v001 was deployed using this template in the account &lt;code&gt;main&lt;/code&gt;, accountType &lt;code&gt;streaming&lt;/code&gt;, environment &lt;code&gt;prod&lt;/code&gt;, in the &lt;code&gt;east&lt;/code&gt; region, the resulting user data would look like:&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;CLOUD_ACCOUNT&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;main&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&#34;&gt;CLOUD_ACCOUNT_TYPE&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;streaming&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&#34;&gt;CLOUD_ENVIRONMENT&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;prod&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&#34;&gt;CLOUD_SERVER_GROUP&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;udf-example-cluster-v001&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&#34;&gt;CLOUD_CLUSTER&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;udf-example-cluster&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&#34;&gt;CLOUD_STACK&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;example&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&#34;&gt;CLOUD_DETAIL&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;cluster&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&#34;&gt;CLOUD_REGION&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;east&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;aws&#34;&gt;AWS&lt;/h3&gt;
&lt;p&gt;The location of the template file for AWS is controlled by the &lt;code&gt;udf.udfRoot&lt;/code&gt; property and the behavior is controlled by the &lt;code&gt;udf.defaultLegacyUdf&lt;/code&gt; property. The defaults are:&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-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;udf&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;udfRoot&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/apps/nflx-udf&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#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:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;defaultLegacyUdf&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You probably want to change the location on the filesystem where the template file lives to suit your deployment.
You almost certainly want to change &lt;code&gt;udf.defaultLegacyUdf=false&lt;/code&gt; as this disables deprecated behavior that is specific to Netflix.
In the &lt;code&gt;udf.udfRoot&lt;/code&gt; directory, create a file called &lt;code&gt;udf0&lt;/code&gt;. The contents of this file are base64 encoded and set as the &lt;code&gt;user-data&lt;/code&gt; for the LaunchConfiguration when a new server group is created.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The &lt;code&gt;udf&lt;/code&gt; property is root level property instead of being nested under the AWS section.&lt;/p&gt;
&lt;h3 id=&#34;google&#34;&gt;Google&lt;/h3&gt;
&lt;p&gt;The path to the template file is controlled by the &lt;code&gt;userDataFile&lt;/code&gt; property
in &lt;code&gt;clouddriver-local.yml&lt;/code&gt;.  You can find more properties or information
in the 
&lt;a href=&#34;https://github.com/spinnaker/spinnaker/blob/main/clouddriver/clouddriver-google/src/main/groovy/com/netflix/spinnaker/clouddriver/google/config/GoogleConfigurationProperties.groovy#L48&#34; target=&#34;_blank&#34;&gt;google account properties&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;With Google, the user data file is set per account.
It is best practice to use the same file for different accounts to ensure consistency,
but different user data files can be used for different accounts if needed.
The contents of the file is parsed and set as the

&lt;a href=&#34;https://docs.cloud.google.com/compute/docs/metadata/overview&#34; target=&#34;_blank&#34;&gt;Instance Metadata&lt;/a&gt;
 on launched instances.
Any metadata defined in the server group configuration within Spinnaker is
appended to the metadata defined by the &lt;em&gt;user data file&lt;/em&gt;.
The metadata defined in the server group configuration within Spinnaker takes preferences over the metadata defined in the &lt;em&gt;user data file&lt;/em&gt; if the metadata keys match.
For example, if the environment variable &lt;code&gt;CLOUD_CLUSTER=%%app%%-%%stack%%&lt;/code&gt; is set in the &lt;em&gt;user data file&lt;/em&gt;
and in the server group configuration, the metadata section includes &lt;code&gt;CLOUD_CLUSTER=overridden-stack&lt;/code&gt;
then the final metadata injected into the instance will be &lt;code&gt;CLOUD_CLUSTER=overridden-stack&lt;/code&gt;.&lt;/p&gt;

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