Change Management System instance has configuration details necessary to connect to specific Change Management System. This is used to query Change Tickets, and optionally create Change Ticket or Incidents. This is used during project deployment executions. Each instance is defined with unique name and code, and in addition has underlying system specific properties for connection.
To create a Change Management instance, select the Change Management tab, and click the + button. To edit an existing instance, click on an Instance row from the list.
...
Enter values for the fields as described in the table below.
...
Field Name | Required | Description |
---|---|---|
Instance Code | Yes | Short name for the instance. As the code is available as Groovy and Shell variables it must not contain spaces or other special characters, aside from underscores. |
Instance Name | Yes | Display name for the instance. |
Change Management | Yes | The change management system. |
Description | No | A meaningful description of the instance. |
Active | Yes | Whether or not the instance is active in the system. Defaults to "Yes" when creating a new instance. |
If the selected Change Management System has any properties defined, enter the values for those properties.
Click the Test button to test the connection and verify that the url, port, username, and password are correct. Click the Save button to save the changes. Optionally click the the Apply button to save the changes, but remain on the current screen until the the Cancel button is clicked.
ServiceNow Properties
...
Property
...
Type
...
Description
...
ServiceNow URL
...
String
...
The URL for accessing ServiceNow.
...
ServiceNow User Name
...
String
...
A local ServiceNow service account user with a non-expiring password.
...
ServiceNow Password
...
String
...
The password for the ServiceNow User Name above.
Note that encrypted properties are stored in Credential Store (Local or External) and can be configured using Edit button next to credential name drop down. Alternatively, you can reuse single credential for multiple properties also, in which case you should name that credential appropriately.
...
The URL to get the change request details as json response. @Since 5.4.0.1
- Default URL is /api/now/table/change_request?sysparm_query=number%3D{SN_CHANGE_NUMBER}
- If needed, you can change and use your custom GET url for ServiceNow REST endpoint. The URL should include {SN_CHANGE_NUMBER} string as the execution system will replace it with the actual change number during execution.
- e.g. /api/xyz/mycompanty_servicenow_generic_api/readChangeRequest?number%3{SN_CHANGE_NUMBER}
...
The URL to open ServiceNow and navigate to the Change ticket associated to the project workflow execution @Since 5.4.0.3
- Default URL is /nav_to.do?uri=change_request.do?sysparm_query=number={SN_CHANGE_NUMBER}
- The URL should include {SN_CHANGE_NUMBER} string as the execution system will replace it with the actual change number during execution.
- e.g. https://<instance name>.service-now.com/nav_to.do?uri=change_request.do?sysparm_query%3Dnumber%3DCHG0080007
- e.g., if you want to use Service Catalog, url will be like
...
The URL to create a change request. @Since 5.4.0.3
- Default URL is /api/now/table/change_request
- If needed, you can change and use your custom url to create a new change using the POST operation
- if you want to use Service Catalog, then change the url to /api/now/table/sc_request
...
Approved Check Script
...
String
A Groovy expressions which determines whether a task for the change ticket is approved or not. The expression must return a boolean, and has access to the following variables:
- TICKET - an object with fields (JSON) contained in the change ticket, as returned by the ServiceNow REST API. Fields are referenced as TICKET.<field name>.<sub-field name>
- FD_ENVIRONMENT_CODE - The environment for a particular deployment request or associated pipeline stage.
Info |
---|
If the Approved Check Script is left blank, the default implementation is to return true if the "approval" field of the ticket is set to "approved". |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
TICKET.approval == 'approved'
|
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
(TICKET.myfield == 'UATApproved' && FD_ENVIRONMENT_CODE='UAT') || (TICKET.myfield == 'PRODApproved' && FD_ENVIRONMENT_CODE='PROD')
|
Tip |
---|
If you want to see values that can be used, enable |
Following example is to check if current date time is between start_date and end_date defined on Ticket. Let's assume format for the date string returned and TimeZone as GMT.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
import java.util.Date;
import java.util.TimeZone;
import flexagon.ff.common.core.utils.FlexDateTimeUtils;
if(TICKET.approval == 'approved' && TICKET.start_date != null && TICKET.end_date != null)
{
Date start = FlexDateTimeUtils.stringToDate(TICKET.start_date, "yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT"));
Date end = FlexDateTimeUtils.stringToDate(TICKET.end_date, "yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT"));
Date now = new Date();
if(now.after(start) && now.before(end))
{
return true;
}
}
return false; |
...
A Groovy expressions which determines whether a task for a change ticket is rejected or not. The expression must return a boolean, and as has access to the following variables:
- TICKET - an object with fields (JSON) contained in the change ticket, as returned by the ServiceNow REST API. Fields are referenced as TICKET.<field name>.<sub-field name>
- FD_ENVIRONMENT_CODE - The environment for a particular deployment request or associated pipeline stage.
Info |
---|
If the Rejected Check Script is left blank, the default implementation is to return true if the "approval" field of the ticket is set to "rejected". |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
TICKET.approval == 'rejected'
|
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
(TICKET.myfield == 'UATRejected' && FD_ENVIRONMENT_CODE='UAT') || (TICKET.myfield == 'PRODRejected' && FD_ENVIRONMENT_CODE='PROD')
|
...
@since 5.5.0.2
A Groovy expression which determines additional information to add to an external approval when it is approved or rejected. The expression must return a Map<String, String> and have an entry with the key of "notes" for the value to get adeed to external approval as a task note. Script has access to the following variables:
- TICKET - an object with fields (JSON) contained in the change ticket, as returned by the ServiceNow REST API. Fields are referenced as TICKET.<field name>.<sub-field name>
- FD_ENVIRONMENT_CODE - The environment for a particular deployment request or associated pipeline stage.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
import flexagon.ff.common.core.rest.FlexRESTClient;
import flexagon.ff.common.core.rest.FlexRESTClientResponse;
import flexagon.ff.common.core.utils.FlexJsonUtils;
import flexagon.fd.model.integration.util.ApiException;
import org.json.JSONObject;
import org.json.JSONArray;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
def returnMap = [:]
def approvalUrl = '{SN_URL}'
def user = '{SN_USER_NAME}'
def password = '{SN_PASSWORD}'
def resourcePath = '/api/now/table/sysapproval_approver?sysparm_display_value=all&sysparm_query=state%3Dapproved%5Edocument_id%3D' + TICKET.sys_id
FlexRESTClient restService = new FlexRESTClient();
FlexRESTClientResponse response = restService.url(approvalUrl).path(resourcePath).basicauth(user, password).mediatype(MediaType.APPLICATION_JSON).setValidateResponse(true).get();
JSONObject jsonResponse;
try
{
jsonResponse = FlexJsonUtils.getJSON(response.getResponseString());
}
catch(Exception ex)
{
throw new ApiException("No Json found in response. Response Code: " + response.getResponseCode() + " Error Message: " + ex.getMessage());
}
def listOfApprovers = jsonResponse.getJSONArray('result');
for (int i = 0; i < listOfApprovers.length(); i++)
{
def approver = listOfApprovers.get(i);
def linkRequestUrl = approver.getJSONObject('approver').getString('link')
restService = new FlexRESTClient();
response = restService.url(linkRequestUrl).basicauth(user, password).mediatype(MediaType.APPLICATION_JSON).setValidateResponse(true).get();
try
{
jsonResponse = FlexJsonUtils.getJSON(response.getResponseString());
jsonResponse = jsonResponse.getJSONObject('result')
if (returnMap.isEmpty())
{
returnMap['notes'] = 'Approvers: ' + System.getProperty("line.separator")
}
else
{
returnMap['notes'] = returnMap['notes'] + System.getProperty("line.separator")
}
returnMap['notes'] = returnMap['notes'] + jsonResponse.getString('name') + ' (' + approver.getJSONObject('sys_updated_on').getString('display_value') + ')'
}
catch(Exception ex)
{
throw new ApiException("No Json found in response. Response Code: " + response.getResponseCode() + " Error Message: " + ex.getMessage());
}
}
return returnMap
|
...
Tip | ||
---|---|---|
| ||
Most common usage for ServiceNow is using the change request module, but other objects like service catalog request can be used by modifying the default GET, POST, and Nav URLs. If you plan to use a different module, for POST operation, use the tickets tab in the CMS configuration screen to add any additional fields required to create the object. |
BMC Remedyforce Properties
...
...
...
...
BMC Helix Remedyforce Password
Note that encrypted properties are stored in Credential Store (Local or External) and can be configured using Edit button next to credential name drop down. Alternatively, you can reuse single credential for multiple properties also, in which case you should name that credential appropriately.
...
A Groovy expressions which determines whether a task for the change ticket is approved or not. The expression must return a boolean, and has access to the following variables:
...
FD_ENVIRONMENT_CODE - The environment for a particular deployment request or associated pipeline stage.
Tip |
---|
If you want to see values that can be used, enable |
...
A Groovy expressions which determines whether a task for a change ticket is rejected or not. The expression must return a boolean, and as has access to the following variables:
- TICKET - an object with fields (JSON) contained in the change ticket, as returned by the BMC Remedyforce REST API. Fields are referenced as TICKET.<field name>.<sub-field name>
- FD_ENVIRONMENT_CODE - The environment for a particular deployment request or associated pipeline stage.
...
Freshworks Freshservice Properties
...
...
...
...
API key for Freshservice
Note that encrypted properties are stored in Credential Store (Local or External) and can be configured using Edit button next to credential name drop down. Alternatively, you can reuse single credential for multiple properties also, in which case you should name that credential appropriately.
...
A Groovy expressions which determines whether a task for the change ticket is approved or not. The expression must return a boolean, and has access to the following variables:
...
FD_ENVIRONMENT_CODE - The environment for a particular deployment request or associated pipeline stage.
Tip |
---|
If you want to see values that can be used, enable |
...
A Groovy expressions which determines whether a task for a change ticket is rejected or not. The expression must return a boolean, and as has access to the following variables:
- TICKET - an object with fields (JSON) contained in the change ticket, as returned by the Freshservice REST API. Fields are referenced as TICKET.<field name>.<sub-field name>
- FD_ENVIRONMENT_CODE - The environment for a particular deployment request or associated pipeline stage.
...
Jira ITSM Properties
...
...
...
...
API token for Jira
Note that encrypted properties are stored in Credential Store (Local or External) and can be configured using Edit button next to credential name drop down. Alternatively, you can reuse single credential for multiple properties also, in which case you should name that credential appropriately.
...
The URL to open Jira ITSM and navigate to the change ticket associated to the project workflow execution
- Default URL pattern is /browse/{JIRA_CHANGE_NUMBER}
- The URL should include {JIRA_CHANGE_NUMBER} string as the execution system will replace it with the actual change number during execution
...
Jira Rest API URL Pattern for a GET request
- Default URL is /rest/api/2/issue/{JIRA_CHANGE_NUMBER}
- If needed, you can change and use your custom GET URL pattern for Jira ITSM REST endpoint. The URL should include {JIRA_CHANGE_NUMBER} string as the execution system will replace it with the actual change number during execution.
...
Jira Rest API URL pattern for creating a change ticket
- Default URL pattern is /rest/api/2/issue
- If needed, you can change and use your custom URL to create a new change using the POST operation
...
A Groovy expressions which determines whether a task for the change ticket is approved or not. The expression must return a boolean, and has access to the following variables:
- TICKET - an object with fields (JSON) contained in the change ticket, as returned by the Jira ITSM REST API. Fields are referenced as TICKET.<field name>.<sub-field name>
- FD_ENVIRONMENT_CODE - The environment for a particular deployment request or associated pipeline stage.
Info |
---|
If the Approved Check Script is left blank, the default implementation checks the status of the ticket to determine if it's approved. Statuses of awaiting implementation, implementing, and completed are considered approved and return true. |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
TICKET.fields.status.name == 'Awaiting implementation' || TICKET.fields.status.name == 'Implementing' || TICKET.fields.status.name == 'Completed'
|
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
(TICKET.fields.customfield_10107.status == 'UATApproved' && FD_ENVIRONMENT_CODE='UAT') || (TICKET.fields.customfield_10107.status == 'PRODApproved' && FD_ENVIRONMENT_CODE='PROD')
|
Tip |
---|
If you want to see values that can be used, enable |
...
A Groovy expressions which determines whether a task for a change ticket is rejected or not. The expression must return a boolean, and as has access to the following variables:
- TICKET - an object with fields (JSON) contained in the change ticket, as returned by the Jira ITSM REST API. Fields are referenced as TICKET.<field name>.<sub-field name>
- FD_ENVIRONMENT_CODE - The environment for a particular deployment request or associated pipeline stage.
Info |
---|
If the Rejected Check Script is left blank, the default implementation checks the status of the ticket to determine if it's rejected. Statuses of declined, canceled, and failed are considered rejected and return true. |
...
button is clicked.