与ServiceNow集成
作为应用程序所有者,您可以通过添加与 App Configuration的 ServiceNow® 集成的其他工作流程来管理功能标志启用。
您可以在环境级别将任何配置更改的核准流程流与 App Configuration 相关联。 当您启用核准工作流程时,仅在核准并将变更请求状态移动到实现之后才会反映这些变更。 一旦变更请求处于实现状态,那么将自动反映这些变更。
确保您具有具有管理特权的 ServiceNow 实例以更新配置。
外部 ServiceNow 名称遵循标准 https://xxx.service-now.com
,其中 xxx
是您的实例名称。 可以从 ServiceNow 控制台访存 ServiceNow 实例名称,用户名和密码。 浏览到 ServiceNow 概要文件,然后转至 管理实例密码 以获取详细信息。
要与 ServiceNow 工作流程集成,请执行以下步骤:
-
从 App Configuration 服务实例仪表板中,选择 当前环境 字段的值。 此值应该是要为其启用 ServiceNow 工作流过程的环境。
-
单击 功能标志。
-
单击 管理工作流程。 这样会显示 管理工作流程 侧面板。
流程* 管理外部工作流程* 管理外部工作 -
对于外部工作流程,以下是要执行的步骤。
-
输入 URLServiceNow 实例的
-
输入用于连接 ServiceNow 实例的用户名。
-
输入要用于认证先前提及的 用户名 以在 ServiceNow 实例中进行认证的 密码。
-
输入检索 OAuth 访问令牌所需的客户 ID。
需要 客户机标识 和 客户机密钥 才能访问 ServiceNow 实例。 要创建 客户机标识 和 客户机密钥,请查看服务现在的文档,以了解如何 为外部客户机创建 OAuth API 端点。
-
输入认证先前提供的 客户机标识 所需的 客户机密钥。
-
输入 ServiceNow 中定义的审批组名称。 核准组名将包含一组有权核准在 ServiceNow 工作流程中创建的变更请求的人员。
-
设置变更请求到期时间 (以小时计)。 最小 1 到最大 999 小时。
-
将 已启用 切换开关设置为 ON 以针对所选环境启用工作流程。
-
-
单击“创建”创建并应用工作流程。
在环境中创建工作流程时,在该环境中将功能标志切换为 开启 状态或 关闭 状态将启动变更请求,并且需要完成工作流程核准过程。
如果在应用工作流核准流程之前已启用某些功能标志,那么这些功能标志将照常工作,但进一步切换将通过核准流程。
如果禁用现有功能部件标志并应用工作流程,然后启用该功能部件标志,那么其状态将更改为 工作流程已启动,并且将启动变更请求工作流程。
如何向外部 ServiceNow 工作流程变更请求添加必需标记?
执行以下步骤以将必需标记添加到外部 ServiceNow 工作流程集成的变更请求中:
-
以管理员身份登录到 ServiceNow 实例。
-
打开现有变更请求。
ServiceNow change request -
单击“其他操作”图标以打开其他选项。
ServiceNow additional actions -
单击 配置,然后选择 表单布局。
附加配置选项 - 表单布局 -
在“表单视图和部分”下的 表单布局 中,选择 变更请求,并创建一个新字段,名称 与 Appconfiguration 标记完全相同,类型 为 字符串,字段长度 为 中等 (100)。
确保输入与 Appconfiguration 标记 完全相同的字段名称 (区分大小写)。
附加配置选项--表单布局--创建新字 -
单击添加。 添加后,新字段将显示在 可用 部分中。
附加配置选项 - 表单布局 - 新字段显示在可用部分*ServiceNow 附加配置选项 - 表单布局 - 新字段显示在可用 -
从 可用 部分中选择 Appconfiguration 标记,并将其添加到 选定 部分。
{: caption="附加配置选项--表单布局--从 "可用 "部分到 "选定 "" caption-side="bottom"}选择新字段
-
您可以看到新字段显示在变更请求中。
段* 更改 字段值由 App Configuration 服务在创建新的变更请求时添加。 因此,请勿修改该值或向 Appconfiguration 标记 字段添加任何其他值。 修改或向字段添加任何其他值可能会导致忽略变更请求事件。
如何向外部 ServiceNow 实例注册或添加 Webhook 脚本?
遵循以下步骤向 ServiceNow 实例注册或添加 Webhook 脚本:
-
以管理员身份登录到 ServiceNow 实例。
-
单击 全部 选项卡并搜索 Business Rules 列示在“系统定义”下。
ServiceNow - Business Rules listed under System Definitions -
在 Business Rules 页面中,单击 新建 按钮。
- 创建新业务规则* 新业务 -
在新记录中,添加 名称,选择要为 变更请求的表。 选中 高级 复选框以查看高级选项卡。
添加网络钩子脚本的高级选项* 添加网络钩子 -
在 高级 选项卡中,添加 Webhook 脚本。
(function executeRule(current, previous /*null when async*/) { try { if (current.u_appconfiguration_tag == "appconfig-workflow" && (current.state == -1 || current.state == -5 || current.state == 4)) { //creating the glider Encrypt object var glideEncrypt = new GlideEncrypter(); //fetching the sys_property that contains the IAM key var encryptedIbmIAMKey = gs.getProperty('<Add System property name which holds the IBM IAM key (Case Sensitive)>'); //example: var encryptedKey = gs.getProperty('WorkflowAppConfigIamKey'); //Decrypting the key var decryptedIAMKey = glideEncrypt.decrypt(encryptedIbmIAMKey); gs.addInfoMessage("IBM KEY DECRYPTION COMPLETED"); if (Object.keys(decryptedIAMKey).length !== 0) { gs.addInfoMessage("CHANGE REQUEST IDENTIFIED AS WORKFLOW RELATED"); //Adding the decrypted key to the IAM token generation body var bodyContent = "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=" + decryptedIAMKey; //Making POST call to IBM IAM to generate token var ibmIamTokenRequest = new sn_ws.RESTMessageV2(); ibmIamTokenRequest.setHttpMethod('POST'); ibmIamTokenRequest.setEndpoint('https://iam.cloud.ibm.com/identity/token'); ibmIamTokenRequest.setRequestBody(bodyContent); ibmIamTokenResponse = ibmIamTokenRequest.execute(); var ibmIamTokenResponseCode = ibmIamTokenResponse.getStatusCode(); gs.addInfoMessage("IBM IAM TOKEN CREATION HTTP RESPONSE CODE: " + ibmIamTokenResponseCode); if (ibmIamTokenResponseCode == 200) { //parsing json response to extract the access_token var ibmIamTokenResponseData = JSON.parse(ibmIamTokenResponse.getBody()); //extracting the access_token var access_token = ibmIamTokenResponseData.access_token; var encryptedInstanceId = gs.getProperty('<Add System property name which holds the AppConfig InstanceId (Case Sensitive)>'); //example: var encryptedInstanceId = gs.getProperty('WorkflowIbmAppConfigInstanceId'); var decryptedInstanceId = glideEncrypt.decrypt(encryptedInstanceId); gs.addInfoMessage("IBM APP CONFIG INSTANCE ID DECRYPTION COMPLETED"); //preparing webhook request to forward var webHookRequest = new sn_ws.RESTMessageV2(); //Refer link https://cloud.ibm.com/apidocs/app-configuration#endpoints-urls for more info on base URL //Choose the base url from below based on your AppConfig instance region //Dallas: https://us-south.apprapp.cloud.ibm.com //Washington DC: https://us-east.apprapp.cloud.ibm.com //London: https://eu-gb.apprapp.cloud.ibm.com //Sydney: https://au-syd.apprapp.cloud.ibm.com //Frankfurt: https://eu-de.apprapp.cloud.ibm.com //Madrid: https://eu-es.apprapp.cloud.ibm.com webHookRequest.setEndpoint('{{AppConfigRegionBaseURL}}/apprapp/workflow/v1/instances/' + decryptedInstanceId + '/crevents'); webHookRequest.setRequestHeader('Authorization', 'Bearer ' + access_token); webHookRequest.setHttpMethod('POST'); webHookRequest.setRequestHeader("Accept", "application/json"); webHookRequest.setRequestHeader("Content-Type", "application/json"); //preparing the data for the webhook request var webHookReqDataObject = new Object(); //BELOW ARE THE DATA THAT IS NEEDED TO PROCESS THE REQUEST, MODIFYING OR ALTERING THE DATA OR THE ATTRIBUTE WILL RESULT IN WEBHOOK REQUEST FAILURE. webHookReqDataObject.operation = String(current.operation()); webHookReqDataObject.short_description = String(current.short_description); webHookReqDataObject.change_request_id = String(current.number); webHookReqDataObject.description = String(current.description); webHookReqDataObject.cr_state = String(current.state); webHookReqDataObject.cr_approval_assignment_group = String(current.assignment_group); webHookReqDataObject.appconfiguration_tag = String(current.u_appconfiguration_tag); webHookReqDataObject.implementation_time = String(current.work_start); var webHookJsonStringData = JSON.stringify(webHookReqDataObject); gs.addInfoMessage(webHookJsonStringData); webHookRequest.setRequestBody(webHookJsonStringData); //checking the change request has the tag, we only accept the CR with the below mentioned tag id gs.addInfoMessage("SENDING REQUEST TO APP CONFIGURATION WEBHOOK HANDLER"); var webHookResponse = webHookRequest.execute(); httpResponseStatus = webHookResponse.getStatusCode(); gs.addInfoMessage("APP CONFIGURATION WEBHOOK HANDLER RESPONSE CODE: " + httpResponseStatus); if (httpResponseStatus == 200) { gs.addInfoMessage("SUCCESSFULLY EXECUTED THE WEBHOOK CALL"); } else { //try once more webHookResponse = webHookRequest.execute(); httpResponseStatus = webHookResponse.getStatusCode(); gs.addInfoMessage("WEBHOOK CALL RETRY STATUS CODE: " + httpResponseStatus); gs.addInfoMessage(webHookResponse.getBody()); } } else { gs.addInfoMessage("IBM IAM TOKEN GENERATION FAILED"); } } else { gs.addInfoMessage("DECRYPTED IAM KEY IS EMPTY OR NOT FOUND"); } } else { gs.addInfoMessage("CR STATE : " + current.state + " CR APPCONFIGURATION TAG VALUE : " + current.u_appconfiguration_tag); gs.addInfoMessage("CHANGE REQUEST DOES NOT BELONG TO WORKFLOW INTEGRATION OR STATE OF THE CR IS NOT VALID"); } } catch (ex) { var message = ex.getMessage(); gs.info(message); } })(current, previous);
-
使用 IBM IAM 令牌或 App Configuration 服务凭证的 API 密钥和 App Configuration 实例标识来修改复制的脚本。
-
浏览至 何时运行 选项卡,然后选中 更新 复选框。
ServiceNow - When to run tab -
单击“**提交 **”保存详细信息。
如何为 Webhook 脚本添加 IBM IAM 令牌或 App Configuration 服务凭证的 API 密钥?
Webhook 脚本需要 IBM IAM 令牌用于 Webhook 调用或 App Configuration 服务凭证的 API 密钥,您可以在其中存储 API 密钥以生成令牌。
执行以下步骤:
-
以管理员身份登录到 ServiceNow 实例。
-
单击 全部 选项卡并搜索 sys_properties.LIST,然后按 Enter 键。 或者,您可以转至 https://{{instanceid}}.service-now.com/sys_properties_list.do,其中 instanceid 是 ServiceNow 实例标识。
ServiceNow - All tab -
将显示 系统属性 详细信息。
- 系统属性*系统 -
单击“新建”创建新的系统属性。
- 新的系统 -
添加以下详细信息以添加令牌。 使用 password2 类型来存储密钥。 此类型将对数据进行加密,并且只能使用 ServiceNow 实例进行解密。
- 系统属性*系统 -
单击 提交 以将密钥保存在 ServiceNow 实例中。 保存后,您可以看到数据已加密。
如何将 App Configuration 实例标识添加到 Webhook 脚本的 ServiceNow 系统属性?
执行以下步骤:
-
以管理员身份登录到 ServiceNow 实例。
-
单击 全部 选项卡并搜索 sys_properties.LIST,然后按 Enter 键。 或者,您可以转至 https://{{instanceid}}.service-now.com/sys_properties_list.do,其中 instanceid 是 ServiceNow 实例标识。
ServiceNow - All tab -
将显示 系统属性 详细信息。
- 系统属性*系统 -
单击“新建”创建新的系统属性。
- 新的系统 -
添加 App Configuration 实例标识。 使用 password2 类型来存储密钥。 此类型将对数据进行加密,并且只能使用 ServiceNow 实例进行解密。
- 系统属性*系统 -
单击 提交 以将密钥保存在 ServiceNow 实例中。 保存后,您可以看到数据已加密。