---
title: "Release Automation for Jira: Triggers, Conditions & Actions"
canonical: "https://help.releasemanagement.app/space/RMC/2522284033/Release%20Automation%20for%20Jira%3A%20Triggers%2C%20Conditions%20%26%20Actions"
format: markdown
---
> Macro (include)

# Troubleshooting?

> ℹ️ Have issues running Release Automation rules? Please check our troubleshooting guide - [https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%86%98-Troubleshooting-Automation-Rules](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%86%98-Troubleshooting-Automation-Rules).

# Topics

> Macro (toc)

# Introduction

Release automation is the practice of coordinating the steps that move a release through its lifecycle - status changes, approvals, notifications, hand-offs to other systems - without doing each one by hand. In a Jira context that means reacting to what happens to a version or a package and triggering the right action automatically: a Slack message, a webhook, a new Jira issue for CAB approval, an update through Jira Automation.

Most teams arrive here after outgrowing manual release coordination. Build and release automation, application release automation, release management automation: the labels differ, but the problem is the same. Too many routine release operations are handled by people who should be doing something else. [Release Management for Jira](https://marketplace.atlassian.com/apps/1221946/release-management-workflows-calendar-roadmaps-for-jira?hosting=cloud&tab=overview) applies the trigger, condition, and action model to that problem inside Jira, so the release process runs itself wherever it safely can.

We aim to be “One Stop Shop“ for Release Management in Jira. And Release Automation is one of the key elements on this pathway. With Jira Automation gaining the momentum in optimizing routine operations and improving efficiency of SDLC … we aim to apply it to Release Management process & practices. 

Therefore below you will see a similar notion of Automation rules with Triggers, Conditions and Actions. If you are new to Jira Automation you will feel right at home with Release Automation. Plus you can [connect the two](https://releasemanagement.atlassian.net/wiki/spaces/RM4J/pages/2514485249) to gain Ultimate Automation.  

# Integration with Jira Automation

Conceptually our Automation rules are very similar to Jira Automation - triggers, conditions, actions. They could also be easily integrated - you can call a hook from Release Automation to cause execution of Automation rule in Jira (via Incoming webhook as Trigger).

This opens up an endless opportunity to `do any changes you want in Jira following the change in Release Management.

Examples could be found here - [https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2514157660](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2514157660).

# Foundations of Release Automation rules 

In Release Management you can create multiple automation rules.

To do so click on Board Settings and find Automation section on the left.

![image](media://f8ebaa9d-705b-47ae-95f9-4ce5b7d86cfc)

To create new rule click on **Add rule **on top left. to Edit existing one just click on it.

For each rule you need to specify couple of basic parameters

- **Name **to differentiate your rules
- **Status** - [Active] / [SUSPENDED]
- **Version/Package **toggle (Version includes Fix Versions, Epics, Sprints and JQL Versions)

> ℹ️ You can change the scope between Version/Package only upon creation. When you edit the rule it’s not possible. The reason is simple - triggers, conditions and actions have became very scope awere and scope specific to allow change on the fly.

![image](media://436f6bfb-411d-4f9a-8232-87174dc1011c)

 The main essence of the rule is 3 core elements - Trigger, Conditions and Actions. The following sections outline all 3 in details.

## Triggers 

We support a great variety of triggers.

![image](media://19218cbe-2c71-4209-86cd-be4838a5f2f2)

 If you are lacking something we are probably working on it. Just reach out to our support and help us prioritize remaining accordingly. 

The aim is to have any possible change to version and/or package as a trigger.

## Conditions

### by Standard fields

> 📝 At the moment we support only **Status** change for versions and properties. This is in backlog to add all other  applicable standard fields to conditions

To add condition to your rule click on Conditions drop down to check all the available options. Select the one that suits you most.

![image](media://28b67bd7-8a34-42ac-8288-788de3229a58)

Based on condition you will have a configuration dialog to specify other necessary details to be applied

![image](media://554351f0-b9f7-49f4-8224-ab626f4acd93)

e.g. In example below we what to apply condition for version status change and shortlist a subset of statuses we are interested.

### by Properties

You can also add conditions by [https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2464579589](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2464579589).

To do so select **Property condition** in Condition look-up

![image-20240131-093025.png](media://e0e6d061-436a-49c1-8b26-0c3e40dafef1)

This will allow you to choose from existing Custom properties list for version or package (depending on your automation scope)

![image-20240131-093233.png](media://b2a176c7-888c-4a5b-ad4c-c4f0beaad417)

Specify the rule and click **Add**.

### By JQL

You can also add conditions by JQL that will be applied to your scope (issues) of version/package (depending of automation scope).

Select **JQL condition** in Condition look-up

![image-20240131-093426.png](media://f47149d6-7230-4b2e-ad5a-0f8a36cacb06)

This will allow you to specify JQL and define the rule. You can also inject custom properties in your JQL if required.

![image-20240131-093552.png](media://cd331c4f-f874-4b86-8cf0-1210b4026c46)

Click **Add**.

### Combining conditions

Once you have multiple conditions defined you can switch between *OR/AND* options for the conditions to be executed.

![image](media://a9d808c0-e1ab-4c8b-b293-5e76f5936631)

## Actions

Below you will find a list of actions you can execute upon your Tigger and Condition met. But also you can pass on a great deal of version/package data and properties into those actions. Plus you can get a great benefit of some “helpers”, namely formatting capabilities and JS-like functions for data transformations.

### Injectable variables 

You are able to inject the following variables to the action/hook **URL & Request body**:

#### *Versions specific*

- version id
- version name
- version description
- version start date
- version release date
- link to version (deep link url to navigate to version details)
- project name (the version belongs to)
- project key
- project id
- user name (who is making a change causing the trigger to execute automation rule)
- user id (who is making a change causing the trigger to execute automation rule)
- status id (internal id of the column/status or version workflow)
- status name
- VERSION CUSTOM PROPERTIES

#### *Packages specific*

- package id
- package name
- package description
- package  start date
- package release date
- link to package (deep link url to navigate to package details)
- package version id’s (versions encompassing the package)
- package project id’s (projects of the versions encompassing the package)
- user name (who is making a change causing the trigger to execute automation rule)
- user id (who is making a change causing the trigger to execute automation rule)
- status id (internal id of the column/status or version workflow)
- status name
- PACKAGE CUSTOM PROPERTIES

#### *CHANGE related variables (for versions and packages)*

- change entity name (e.g. version | package | milestone | environment name)
- change entity type
- change entity description
- change property name (property of the entity changed - standard or custom)
- change property old value
- change property new value

#### *TIME functions (or datetime offsets)*

You can also insert the following time functions. The App will insert an appropriate Macro that is also editable. Datetime formatting functions are the same as listed in following section.

| **Name** | **Macro inserted** | **Other examples** |
| --- | --- | --- |
| Date Offset | {{date.**now**(<span style="color: #bf2600">**0**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - today | - {{date.now(<span style="color: #bf2600">**1**</span>)}} - tomorrow
- {{date.now(-<span style="color: #bf2600">**1**</span>)}} - yesterday
- {{date.now(-<span style="color: #bf2600">**7**</span>)}} - 7 days ago |
| Start of Week | {{date.**startOfWeek**(<span style="color: #bf2600">**0**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - start of the week | - {{date.startOfWeek(<span style="color: #bf2600">**-1**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - start of the previous week
- {{date.startOfWeek(<span style="color: #bf2600">**1**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - start of the next week |
| End of Week | {{date.**endOfWeek**(<span style="color: #bf2600">**0**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - end of the week | - {{date.endOfWeek(<span style="color: #bf2600">**-1**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - end of the previous week
- {{date.endOfWeek(<span style="color: #bf2600">**1**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - end of the next week |
| Start of Month | {{date.**startOfMonth**(<span style="color: #bf2600">**0**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - start of this month | - {{date.startOfMonth(<span style="color: #bf2600">**1**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - start of the next month |
| End of Month | {{date.**endOfMonth**(<span style="color: #bf2600">**0**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - end of month | - {{date.endOfMonth(-<span style="color: #bf2600">**1**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - end of the previous month |
| Start of Year | {{date.**startOfYear**(<span style="color: #bf2600">**0**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - start of the year | - {date.startOfYear(<span style="color: #bf2600">**1**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - start of the next year |
| End of Year | {{date.**endOfYear**(<span style="color: #bf2600">**0**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - end of the year | - {date.endOfYear(<span style="color: #bf2600">**-1**</span>,"dd/MM/yyyy”, ”GTM+1”)}} - end of the previous year |

#### *Previous WEBHOOK response*

You can also have access to previous WebHook response data, namely:

- prevWebhookData.headers
- prevWebhookData.body
- prevWebhookData.code

e.g. If your previous webhook returns a list of versions you can access it via

```
prevWebhookData.body.versions[0].id
```

### “Helpers“

#### Datetime formatting

> ⚠️ For the datetime fields we use machine readable format what could be recognized and processed by other systems/Apps.
> ⚠️ 
> ⚠️ e.g. 2023-04-22T11:00+0000
> ⚠️ 
> ⚠️ If you want to outline date/time in some Slack/Teams/Email messages you need to format it to something human readable.

Therefore, we support **.formatDate**(*param1*, *param2*) function where

- *param1 *is your date/time formatting pattern. Refer to the <u>[Java documentation](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)</u> for pattern syntax.
- *param2* is optional and represent the desirable time zone, otherwise GMT will be used

Examples:

- .**formatDate**(*'MMM dd, yyyy HH:mm:ss'*, *'GMT+3'*)
- .**formatDate**(*'yyyy/MM:dd HH:mm'*, *'GMT+4:30'*)
- .**formatDate**(*'yyyy/MM/dd'*)

#### Generic String functions

To finetune your web hooks even further you can use JS-like function for injectable variables in **URL & Request body **sections of the hook. Below is a list of functions that could be used:

*[concat()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat)** - concatenates the string arguments to the calling string and returns a new string*

```
{{entity.name.concat('-version')}}
```

*equals() - returns boolean true/false if a calling string matches (exactly) the argument*

```
{{entity.name.equals('version')}}
```

*isEmpty (not exist) - returns boolean true/false if a calling string is empty*

```
{{entity.name.isEmpty()}}
```

*[split (string regex)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split)** - divides a calling string into an ordered list of substrings by searching for the pattern, puts these substrings into an array, and returns the array. So, you can use .split(pattern)[index] to pickup the right element of the array. If used only .split(pattern) it will return a string of comma separated substrings.*

```
{{entity.name.split(',')[0]}}
{{entity.name.split('_')}}
```

*[slice (int beginIndex, int endIndex)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice)** - extracts a section of a string and returns it as a new string, without modifying the calling string*

```
{{entity.name.slice(1,5)}}
```

*[toLowerCase()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase)** - returns the calling string value converted to lower case*

```
{{entity.name.toLowerCase()}}
```

*[toUpperCase()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase)** - returns the calling string value converted to UPPER case*

```
{{entity.name.toUpperCase()}}
```

*[trim()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim)** - removes whitespace from both ends of a string and returns a new string, without modifying the original string*

```
{{entity.name.trim()}}
```

*[replaceAll (string regex, string replacement)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll)** - returns a new string with all matches of regex a replaced by a replacement*

```
{{entity.name.replaceAll(/\d/,'_')}}
```

> 📝 `entity.name` above variable is used for example only. Functions are applicable to any string variable from the list.

#### Trim HTML tags

Some standard or custom properties might include HTML tags so when used in outcoming hooks not properly received in final destination. e.g. Slack and Teams hooks.

*trimHTMLTags() - returns string with erased HTML tags*

```
{{changedProperty.newValue.trimHTMLTags()}}
```

![image](media://24ac2290-47f9-47d1-8560-72563c131b21)

#### Convert HTML to Wiki markdown

Instead of trimming HTML tags you might also convert HTML to Wiki markdown and use it elsewhere.

 *htmlToWiki() - returns string with converted HTML to Wiki markdown*

```
{{entity.description.htmlToWiki()}}
```

![image](media://46ca4577-4894-477d-b69a-b7b371abe943)

### <span style="color: #ffc400">Important (!): IPs whitelisting</span>

Webhooks are outcoming requests from our servers. If you want to receive these requests in your internal network (probably protected by Firewall) you need to while list IPs.

| **AWS IP** |
| --- |
| 3.134.160.237 |

### [Action] Execute Webhook

Once you select **Execute Webhook** in the actions list a dialog will popup to specify the details.

![image](media://13956668-f432-4578-9275-97506c031001)

![image](media://215a7c04-ffef-4d14-9cbc-4c5738b936a9)

#### Summary tab

This tab contains the main properties of the hook

  **Description **to outline the details of what the hook is doing/aiming.
- **Method**. HTTP method which will be used for the webhook. Available options are:
  - GET
  - POST
  - PUT
  - DELETE
- **URL**. The URL which will be called from the our server while the webhook execution.
- **Request body.** The request body which will be used while the webhook execution. For instance, it could contact XML or JSON.

#### Headers tab

On the headers tab, you can define headers for the webhook HTTP request.

The headers could be added in Key-Value format. Multiple headers are supported.

You can also use variables to define headers keys and values (e.g. use authorization ticket you received with previous request). 

To Secure your headers turn on **Hidden** so the App will hide it and encrypt it.

![image-20241010-144903.png](media://ad7b3795-04d6-46b3-920e-204e7e1527fd)

### [Action] Invoke Jira Automation 

> ⚠️ Effective **May 30, 2025**, Atlassian is updating the trigger process for **[incoming webhooks](https://support.atlassian.com/cloud-automation/docs/configure-the-incoming-webhook-trigger-in-atlassian-automation/)**. We are now fully compatible with these changes!

> ℹ️ We have a number of request to help setting up the bridge with Jira Automation as not necessarily all people are having fun with JSON. Therefore, In addition to [https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%A4%96-Action%3EExecute-Webhook](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%A4%96-Action%3EExecute-Webhook) where you do it manually and aimed to cover more generic use cases we decided to make a more user friendly Jira Automation bridge with predefined JSON that should cover majority of use cases for transferring data to Jira.
> ℹ️ 
> ℹ️ In the future, we will consider ways to create Jira Automation rule with pre-configured trigger directly for the App so you just need to add only required Actions in Jira. The below is a first step to get there.

#### Step 1: Create Jira Automation rule

Go to your project and click on **Automation** to create one.

![image](media://6deeb54a-7316-42e0-a915-318bd78fd767)

For the trigger select **Integrations** and **Incoming webhook**.

![image](media://6d92f22b-bd7c-4693-8e9a-081df47d7621)

> ✅ Copy “**Webhook URL**“ (this is your connector to Jira Automation. You would need to use it in the App)

Select “**No issues from the webhook**“

![image](media://19ae213b-4d6c-4013-9c6e-98414f6cc48a)

Click **Save**. 

#### Step 2: Propagate Jira Automation URL into the App

In the App select **Invoke Jira Automation** from list of Actions and paste the URL you got from Jira Automation of the previous step. Thi is how you create the bridge between Release Automation and Jira Automation. 

#### Step 3: Add Action in Jira Automation you need 

Keep creating your new rule in Jira or edit existing one to create the action you need.

![image](media://e35d405d-dcb8-427b-8a52-5bf711c65b2b)

#### Passing Data from Release Management to Jira Automation

> ✅ Together with webhook from Release Management we will send a standard JSON payload that will be a good fit for 99% of your use cases. For additional 1% please use [https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%A4%96-Action%3EExecute-Webhook](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%A4%96-Action%3EExecute-Webhook) and define JSON you need/like.

You can use the following standard parameters we are sending from Release Automation to Jira Automation:

- `webhookData.entityId` - version or package **ID**
- `webhookData.entityName` - version or package **Name**
- `webhookData.entityDescription` - version or package **Description**
  - `webhookData.entityDescriptionPlainText` - version or package **Description with ****[TrimHTML ](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#Trim-HTML-tags)**function applied
- `webhookData.startDate` - version or package **Start Date**
- `webhookData.releaseDate` - version or package **Release Date**
- `webhookData.entityLink` - version or package **Deep Link **so you can access it from any external system
- `webhookData.entityJQL` - version or package **JQL **that defines the scope of release (Jira Issues)
- `webhookData.projectName` - project **Name **for Fix Versions or Epics, comma separated project names for Cross-Project Versions, empty for Sprints and JQL versions
- `webhookData.projectKey` - project **Key **for Fix Versions or Epics, comma separated project keys for Cross-Project Versions, empty for Sprints and JQL versions
- `webhookData.projectId` - project **ID **for Fix Versions or Epics, comma separated project ids for Cross-Project Versions, empty for Sprints and JQL versions
- `webhookData.epicKey` - **Epic Key** for Epic-based Virtual Versions.
- `webhookData.statusId` - destination **ID of the Column** where entity sits post action
- `webhookData.statusName` - destination **Name of the Column** where entity sits post action
- `webhookData.userName` - **User Name** who triggered Release Automation rule led to executing a hook
- `webhookData.userId` - **User Name** who triggered Release Automation rule led to executing a hook
- `webhookData.environmentIds` - **Environment IDs** for version or package (all the versions in the package)
- `webhookData.environmentNames` - **Environment Names **for version or package (all the versions in the package)
- `webhookData.changedEntityName` - **Name **of the entity that changes triggering the rule. See EntityType.
- `webhookData.changedEntityType` - **Type **of the entity that changes triggering the rule. Could be: *Version, Epic, Sprint, JQL Version, Package, Milestone, Environment, Comment, Custom Property*
- `webhookData.changedEntityDesription` - **Description **of the entity that changes triggering the rule. See EntityType.
  - `webhookData.changedEntityDesriptionPlainText` - **Description with ****[TrimHTML ](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#Trim-HTML-tags)**function applied of the entity that changes triggering the rule. See EntityType.
- `webhookData.changedPropertyOldValue` - **Old Value** of the property that changed - standard or custom
  - `webhookData.changedPropertyOldValuePlainText` - **Old Value** **with ****[TrimHTML ](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#Trim-HTML-tags)**function applied of the property that changed - standard or custom
- `webhookData.changedPropertyNewValue` - **New Value **of the property that changed - standard or custom
  - `webhookData.changedPropertyNewValuePlainText` - **New Value with ****[TrimHTML ](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#Trim-HTML-tags)**function applied of the property that changed - standard or custom
- `webhookData.changedPropertyName` - **Name** of the property that changed - standard or custom
- **we are also sending a list of custom properties. you can access it via**
  - `webhookData.`"Custom Property Name“ - the way you define name in Properties configuration
  - *Important: in case of multi select property value comes as comma separated selections*
  - *Important: in case of multi user property value comes as comma separated user names*

#### Additional Datetime formatting

> ⚠️ For the datetime fields Jira (and Release Management) uses machine readable format what could be recognized and processed by other systems/Apps.
> ⚠️ 
> ⚠️ e.g. 2023-04-22T11:00+0000
> ⚠️ 
> ⚠️ You can use additional formatting options inside Jira Automation to make it human readable and further use.

The following functions are supported:

| **Format** | **Thursday, November 1, 1979 6:23:12 AM UT**C |
| --- | --- |
| *Default (none specified)* | 1979-11-01T11:23:12.0+0000 |
| jiraDate | 1979-11-01 |
| jiraDateTime | 1979-11-01T06:23:12.0-0500 |
| jqlDate | 1979-11-01 |
| jqlDateTime | 1979-11-01 06:23 |
| shortDate | 11/1/79 |
| shortTime | 6:23 AM |
| shortDateTime | 11/1/79 6:23 AM |
| mediumDate | Nov 1, 1979 |
| mediumTime | 6:23:12 AM |
| mediumDateTime | Nov 1, 1979 6:23:12 AM |
| longDate | November 1, 1979 |
| longTime | 6:23:12 AM EST |
| longDateTime | November 1, 1979, 6:23:12 AM UTC |
| fullDate | Thursday, November 1, 1979 |
| fullTime | 6:23:12 AM EST |
| fullDateTime | Thursday, November 1, 1979, 6:23:12 AM Coordinated Universal Time |
| format("<pattern>") e.g. format("dd/MM/yyyy")<br>Refer to the <u>[Java documentation](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)</u> for pattern syntax. | 01/11/1979 |

#### E.g. use case: Send Email notification

Navigate to [https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2514157660/Automation+Use+Cases+incl.+Integration+with+Jira+Automation#%E2%9E%A1%EF%B8%8F-Send-email-upon-Release-status-change](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2514157660/Automation+Use+Cases+incl.+Integration+with+Jira+Automation#%E2%9E%A1%EF%B8%8F-Send-email-upon-Release-status-change) section of this documentation.

### [Action] Update Version/Package

Another type of action you can define is updating your version/package (based on the rule definition - whether it’s for version or package).

![image](media://e1bca694-0418-4f9f-a5a6-97d8d54c5732)

#### Update Tags

Click on **Tags** toggle and specify Tags you want to add to version/package or replace with those tags

![image](media://333b38df-389f-4ce8-ae63-e43644686d04)

Click **Add**

#### Update Description

Click on **Description** toggle and specify Description you want to add to version/package or replace existing description with new one.

You can also decide if you want to use plain text vs HTML editor.

![image](media://821f8ecd-c899-4c5b-82b6-3d0535d670a8)

Click **Add**

#### Update Environments

Click on **Environments **toggle to append version environments with designated one. You can also replace the original list with new one.

![image](media://b514c24e-a867-429a-858a-982dbf60b4a2)

Click **Add**

#### Add Comment

Click on **Add comment **toggle to specify what comment you want to add upon executing the automation rule. Very good feature to keep audit trail on all the changes happening.

![image](media://23ecb7b7-5321-4975-846b-3e1c531be6d8)

Click **Add**

#### Update Properties

Click on **Properties **toggle and add version/package properties from the list you want to alter. Depending on the property type you can either replace with a new value or append new value

![image](media://976039bb-594f-4109-afcd-2aeeb8e7867a)

Click **Add**

#### *Update .. (more to come)*

Our backlog is full of stories for other actions to update most of version/package details. We take it according to the priority. If you want to us to prioritize smth please reach out to [our support](https://releasemanagement.atlassian.net/servicedesk/customer/portal/11/group/16/create/56).

### [Action]: Send Slack message

If you select Send Slack message action we will pre-populate webhook URL and Body so you can amend it with your org details.

![image](media://101eedd0-4fea-49ad-9faf-97bb25ccb19d)

#### How to get URL for Slack integration?

**Step 1. **Navigate to [https://api.slack.com/apps?new_app=1](https://api.slack.com/apps?new_app=1) to create an app “From scratch“

![image](media://652d1ddf-fae4-49ac-8ca9-b9e52013c524)

**Step 2. **Choose the name of the App (integration) and a space to send notifications

![image](media://abce854b-7c36-4014-b8bf-0d5736a71e85)

**Step 3. **Enable “Incoming Webhooks”

**Step 4. **Activate it and add new Webhook

![image](media://32d091ef-97ed-4c1f-88d5-89a0838b0356)

**Step 5. **Allow integration and choose the destination channel from the selected space

![image](media://d8b8236c-4007-4200-9d08-3fb637c870ce)

**Step 6. **Copy URL for Slack integration

![image](media://3530ae37-322e-4af8-933e-2c47a0f637f5)

#### Tips and Tricks on “How to construct Slack Message“

We are using [Slack Block Kit](https://api.slack.com/block-kit) to construct the messages.

> 📝 If you what to mention Slack user .. here’s the instructions on how to do so - [https://stackoverflow.com/questions/71300516/how-do-we-mention-or-tag-someone-in-using-slacks-block-kit-builder](https://stackoverflow.com/questions/71300516/how-do-we-mention-or-tag-someone-in-using-slacks-block-kit-builder)

#### Plan B: Use Jira Automation

If you have any difficulties with above or find it easier to configure in Jira because you already have such actions configured there .. feel free to configure Slack Notifications in Jira and use [https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%A4%96-Action%3EInvoke-Jira-Automation-(coming-soon)](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%A4%96-Action%3EInvoke-Jira-Automation-(coming-soon)) to setup a bridge.  

### [Action] Send Teams message

If you select Send MS Teams notification action we will pre-populate webhook URL and Body so you can amend it with your org details.

![image](media://c64dc1c6-a02f-48ff-a31f-94cf47cefb7f)

#### How to get URL for Teams integration?

**Step 1.** Go to the channel where you want to add the webhook and select ••• **More options** from the top navigation bar.

**Step 2. **Select **Connectors** from the dropdown menu:

![image](media://73ca56d8-5abe-43ab-bb6e-1da76e4b465a)

**Step 3. **Search for **Incoming Webhook** and select **Add**.

**Step 4.** Select **Configure**, provide a name, and upload an image for your webhook if required:

![image](media://11c9582c-5ec8-4eba-a79c-2e54a360ce90)

**Step 5.** The dialog window presents a unique URL that maps to the channel. Copy and save the Teams integration URL, to send information to Microsoft Teams and select **Done**:

![image](media://13889612-97f1-4ccc-a8a5-eb7ff944688f)

#### Plan B: Use Jira Automation

If you have any difficulties with above or find it easier to configure in Jira because you already have such actions configured there .. feel free to configure Teams Notifications in Jira and use [https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%A4%96-Action%3EInvoke-Jira-Automation-(coming-soon)](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%A4%96-Action%3EInvoke-Jira-Automation-(coming-soon)) to setup a bridge.  

### [Action] Create Jira Issue

Another action you can define is **Creating Jira issue**. There could be multiple use cases for it, but what we have heard from the clients the most is the following:

- Ticket for end-to-end regression
- Ticket for CAB approval (Change Management Board)
- Ticket for DevOps to deploy for lower or production environment
- Ticket for Marketing Team to start experiment
- etc.

To make one click on **Add action **pull up to choose **Create Issue**

![image](media://bd246a45-d045-409c-bb8d-76cc36bc7c34)

**Create issue** dialog will show up where you can specify

![image](media://65c592bd-e7b6-4ad0-bdb0-f536dd936f31)

- Project where you want to create issue (projects will be filtered by your permissions - actor permissions)
- Issue type
- Issue parent (for subt-tasks only)
- Issue summary
- Issue description
- Additional fields (see below)
- Actor upon which **Create issue** will run (permissions will be verified)

In all - summary, description & additional fields - you can inject variable of versions/packages and change related items.

#### Creating sub-tasks 

If you select sub-task issue type the App will automatically suggest you to select parent standard issue type from the selected project

![image](media://cd6aa3b2-f93f-4bb5-8b77-45ac0710b800)

#### Additional issue fields (multiple use cases)

There are certain limitations, namely

- we can't show you standard Issue Creation dialog to specify other standard and custom fields
- we do not know what are the mandatory fields you heave setup for your issue type

To overcome this we created a possibility to add additional fields in JSON format. Thus you can specify mandatory fields and/or any other fields you would like to setup upon issue creation.

![image](media://44a678dd-87c6-4ba7-ae34-e3cca5121b0d)

> 📝 **Additional fields JSON formatting details**:
> 📝 
> 📝 For JSON formatting we follow the same approach as Atlassian in their open API for issue create. Find out more details here: [https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-post](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-post)

#### Plan B: Use Jira Automation

If for some reason you are missing smth in the App and can’t create issues you need please [reach out to our support](https://releasemanagement.atlassian.net/servicedesk/customer/portal/11). Meanwhile you can do a work around via [Jira Automation bridge](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/2522284033/Release+Automation+for+Jira+Triggers+Conditions+Actions#%F0%9F%A4%96-Action%3EInvoke-Jira-Automation-(coming-soon)) - trigger a hook there, pass over the payload you need from the App and create/update issue via one of the Actions in Jira Automation. Read more details about our [https://releasemanagement.atlassian.net/wiki/spaces/RM4J/pages/2514485249](https://releasemanagement.atlassian.net/wiki/spaces/RM4J/pages/2514485249).

### More actions

> ✅ *Coming soon*

## Execution history

You can see the history of all the automation rules execution. To do so click on any of the rules and navigate to **History** tab.

![image](media://8d378fa7-8ceb-4959-883d-9527a7d0dd94)

Click **Show more** the execution you are interested it to receive the details about Trigger, Action (both Request and Response).

## 💡  FAQ

| **Question** | **Answer** |
| --- | --- |
| What is release automation? | Release automation handles the routine steps in a release lifecycle automatically - reacting to a status change, sending a notification, creating an approval ticket, calling an external system. It removes the manual chasing that fills a release manager’s week. |
| How is Release Automation different from Jira Automation? | Jira Automation reacts to changes on issues. Release Automation reacts to changes on versions and packages, which is where release-level work lives. The two connect: a Release Automation rule can invoke a Jira Automation rule through an incoming webhook, so a change at the release level can drive any action you already built in Jira. |
| Is release automation the same as CI/CD? | No. CI/CD pipelines build, test, and deploy code. Release automation sits above that, coordinating the release as a business unit: scope, approvals, stakeholder communication, and the hand-offs to and from the pipeline. They work together rather than replacing each other. |
| What about application release automation (ARA)? | Application release automation usually refers to deployment-focused tooling. Release Management for Jira covers the planning, tracking, approval, and notification side of the release, and connects to your deployment tools through webhooks and Jira Automation rather than executing the deployment itself. |

# 🆘 Troubleshooting Automation Rules

## Tips: How to troubleshoot?

> ℹ️ *coming soon*

## Typical failed cases

| **Use case** | **Troubleshooting guide** |
| --- | --- |
| Release Automation returns 200 but Jira Automation is not invoked | - Double check Release Automation history to see latest SUCESSFULL run to verify the request with all the proper parameters and 200 response
- Double check Jira Automation Audit Log to verify there are no records for execution
- In most cases this is a signal for **Missing IP Whitelisting.**
- Please contact your Jira Admin/DevOps to white list OUR IPs - [https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/edit-v2/2522284033#%F0%9F%94%90-Important-(!)%3A-IPs-whitelisting](https://releasemanagement.atlassian.net/wiki/spaces/RMC/pages/edit-v2/2522284033#%F0%9F%94%90-Important-(!)%3A-IPs-whitelisting) |

> Macro (include)