Deployments can have a strong impact on the people whose work depends on the system being deployed. Great communication is an important part of a great deployment strategy, and email steps are a key way that Octopus can help you keep everyone in the loop. You may want to:
- Notify stakeholders when a new version of an app has been deployed to production.
- Let testers know when a new version is available in UAT.
- Use email in conjunction with manual interventions approvals to make sure everyone is ready for a new deployment.
Getting Started - Email Notifications
Before you can add email steps to your deployment processes, you need to add your SMTP configuration.
SMTP configuration
To add your SMTP configuration navigate to Configuration ➜ SMTP and set the following values:
Property | Description | Example |
---|---|---|
SMTP Host | The DNS hostname for your SMTP server. | smtp.example.com |
SMTP Port | The TCP port for your SMTP server. | 25 |
Timeout | The timeout for SMTP operations. Value is in milliseconds. | 12000 (12 seconds) |
Use SSL/TLS | This option controls whether or not Octopus enforces using an SSL/TLS-wrapped connection. | True |
From Address | The address which all emails will be sent ‘From’. | octopus@mydomain.com |
Credentials | Optional SMTP login / password if your SMTP server requires authentication. | mylogin@mydomain.com / SuperSecretPa$$word |
Click Save and test to save the SMTP configuration and verify the values are valid:
You will be prompted for an email address to send a test email to. Enter a test email address and click Ok. A Send test email task will start to verify your SMTP Configuration:
Add an email step
Email steps are added to deployment processes in the same way as other steps.
-
Navigate to your project.
-
Click Process and Add step to add a step to an existing process. Alternatively, if this is a new deployment process, click the Create process button.
-
Find the Send an Email step and click Add step.
-
Give the step a short memorable name.
-
Choose the recipients of the email. You have several options:
- Enter a comma-separated list of email addresses.
- Bind to a variable which defines a list of email addresses (this is useful for tailoring your recipient list per-environment).
- Choose one or more teams to include members of those teams in the recipient list.
- Use a combination of all of these options.
Octopus will build the resulting recipient list during the deployment, remove duplicate email addresses, and send the email to each recipient.
-
Provide a subject line for the emails. The subject can contain Octopus basic variable syntax.
-
Add the body of the email. The email can be sent in plain text or HTML, and you can use Octopus extended variable syntax to include information about the deployment in the email. See the email template examples below.
-
You can set conditions to determine when the step should run. For instance:
- Send the email only for successful deployments to certain environments.
- Send a specific email for failed deployments.
- Send an email based on the value of a variable expression which works well with output variables.
-
Save the deployment process.
Email template examples
You can set the email subject and author the email body as plain text or HTML content. You can even use the Octopus variable syntax to include information about the deployment in the email.
Deployment summary template
This template collects basic information about the deployment, including the package versions included in each step.
<h1>Deployment of #{Octopus.Project.Name} #{Octopus.Release.Number} to #{Octopus.Environment.Name}</h1>
<p>
<em>Initiated by
#{unless Octopus.Deployment.CreatedBy.DisplayName}#{Octopus.Deployment.CreatedBy.Username}#{/unless}
#{if Octopus.Deployment.CreatedBy.DisplayName}#{Octopus.Deployment.CreatedBy.DisplayName}#{/if}
#{if Octopus.Deployment.CreatedBy.EmailAddress} (<a href="mailto: #{Octopus.Deployment.CreatedBy.EmailAddress}">#{Octopus.Deployment.CreatedBy.EmailAddress}</a>)#{/if}
at #{Octopus.Deployment.Created}</em>
</p>
#{if Octopus.Release.Notes}
<h2>Release notes</h2>
<p>#{Octopus.Release.Notes}</p>
#{/if}
<h2>Deployment process</h2>
<p>The deployment included the following actions:</p>
<ul>
#{each action in Octopus.Action}
<li><strong>#{action.Name}</strong> #{if action.Package.NuGetPackageId}— <a href="http://nuget.org/packages/#{action.Package.NuGetPackageId}">#{action.Package.NuGetPackageId}</a> <em>version #{action.Package.NuGetPackageVersion}#{/if}</em></li>
#{/each}
</ul>
<p>View the <a href="http://my-octopus#{Octopus.Web.DeploymentLink}">detailed deployment log</a>.</p>
To use the template in your projects, replace nuget.org
with the DNS name of your NuGet server, and my-octopus
with the DNS name of your Octopus Server. Make sure you select Body is HTML on the email step configuration page.
The output of the template will be an HTML email like:
Step status summary template
The outcome of each step can be included using a template like the one below:
<h3>Task summary</h3>
<ol>
#{each step in Octopus.Step}
#{if step.Status.Code}
<li>#{step | HtmlEscape} — <strong>#{step.Status.Code}</strong>
#{if step.Status.Error}
<pre>#{step.Status.Error | HtmlEscape}</pre>
<pre>#{step.Status.ErrorDetail | HtmlEscape}</pre>
#{/if}
</li>
#{/if}
#{/each}
</ol>
Step error detail
step.Status.Error
and step.Status.ErrorDetail
will only display the exit code and Octopus stack trace for the error. As we cannot parse the deployment log, we can only extract the exit/error codes. It cannot show detailed information on what caused the error. For full information on what happened when the deployment fails, you will need to reference the logs.
See system variables for more detail.
Referencing package metadata
This example displays package ID and version numbers for any steps that reference a package.
#{each action in Octopus.Action}
#{if Octopus.Action[#{action.StepName}].Package.PackageId}
<b>PackageId: #{Octopus.Action[#{action.StepName}].Package.PackageId}</b>
<br>
<b>Package Version: #{Octopus.Action[#{action.StepName}].Package.PackageVersion}</b>
#{/if}
#{/each}
Iterating over Octopus.Action
like above is a useful way to retrieve data from all steps in your process without having to refer to a hard-coded step name that could potentially change.
Referencing additional package metadata
Using custom scripts you can include additional reference packages. This example displays package ID and version numbers for any steps that include additional reference packages.
#{each action in Octopus.Action}
#{each package in action.Package}
#{if Octopus.Action[#{action.StepName}].Package[#{package}].PackageId}
<b>PackageId: #{Octopus.Action[#{action.StepName}].Package[#{package}].PackageId}</b>
<br>
<b>Package Version: #{Octopus.Action[#{action.StepName}].Package[#{package}].PackageVersion}</b>
#{/if}
#{/each}
#{/each}
Help us continuously improve
Please let us know if you have any feedback about this page.
Page updated on Tuesday, August 27, 2024