IBM Cloud Docs
与ServiceNow集成

与ServiceNow集成

作为应用程序所有者,您可以通过添加与 App Configuration的 ServiceNow® 集成的其他工作流程来管理功能标志启用。

您可以在环境级别将任何配置更改的核准流程流与 App Configuration 相关联。 当您启用核准工作流程时,仅在核准并将变更请求状态移动到实现之后才会反映这些变更。 一旦变更请求处于实现状态,那么将自动反映这些变更。

确保您具有具有管理特权的 ServiceNow 实例以更新配置。

外部 ServiceNow 名称遵循标准 https://xxx.service-now.com,其中 xxx 是您的实例名称。 可以从 ServiceNow 控制台访存 ServiceNow 实例名称,用户名和密码。 浏览到 ServiceNow 概要文件,然后转至 管理实例密码 以获取详细信息。

要与 ServiceNow 工作流程集成,请执行以下步骤:

  1. 从 App Configuration 服务实例仪表板中,选择 当前环境 字段的值。 此值应该是要为其启用 ServiceNow 工作流过程的环境。

  2. 单击 功能标志

  3. 单击 管理工作流程。 这样会显示 管理工作流程 侧面板。

    管理外部工作流程
    流程* 管理外部工作流程* 管理外部工作

  4. 对于外部工作流程,以下是要执行的步骤。

    1. 输入 URLServiceNow 实例的

    2. 输入用于连接 ServiceNow 实例的用户名

    3. 输入要用于认证先前提及的 用户名 以在 ServiceNow 实例中进行认证的 密码

    4. 输入检索 OAuth 访问令牌所需的客户 ID

      需要 客户机标识客户机密钥 才能访问 ServiceNow 实例。 要创建 客户机标识客户机密钥,请查看服务现在的文档,以了解如何 为外部客户机创建 OAuth API 端点

    5. 输入认证先前提供的 客户机标识 所需的 客户机密钥

    6. 输入 ServiceNow 中定义的审批组名称。 核准组名将包含一组有权核准在 ServiceNow 工作流程中创建的变更请求的人员。

    7. 设置变更请求到期时间 (以小时计)。 最小 1 到最大 999 小时。

    8. 已启用 切换开关设置为 ON 以针对所选环境启用工作流程。

  5. 单击“创建”创建并应用工作流程。

在环境中创建工作流程时,在该环境中将功能标志切换为 开启 状态或 关闭 状态将启动变更请求,并且需要完成工作流程核准过程。

如果在应用工作流核准流程之前已启用某些功能标志,那么这些功能标志将照常工作,但进一步切换将通过核准流程。

如果禁用现有功能部件标志并应用工作流程,然后启用该功能部件标志,那么其状态将更改为 工作流程已启动,并且将启动变更请求工作流程。

如何向外部 ServiceNow 工作流程变更请求添加必需标记?

执行以下步骤以将必需标记添加到外部 ServiceNow 工作流程集成的变更请求中:

  1. 以管理员身份登录到 ServiceNow 实例。

  2. 打开现有变更请求。

    ServiceNow change request
    ServiceNow change request

  3. 单击“其他操作”图标以打开其他选项。

    ServiceNow additional actions
    ServiceNow additional actions

  4. 单击 配置,然后选择 表单布局

    表单布局
    附加配置选项 - 表单布局

  5. 在“表单视图和部分”下的 表单布局 中,选择 变更请求,并创建一个新字段,名称Appconfiguration 标记完全相同,类型字符串字段长度中等 (100)

    确保输入与 Appconfiguration 标记 完全相同的字段名称 (区分大小写)。

    创建新字段
    附加配置选项--表单布局--创建新字
    *

  6. 单击添加。 添加后,新字段将显示在 可用 部分中。

    创建新字段,显示在可用部分*
    附加配置选项 - 表单布局 - 新字段显示在可用部分*ServiceNow 附加配置选项 - 表单布局 - 新字段显示在可用
    *ServiceNow 附加配置选项 - 表单布局 - 新字段显示在可用部分

  7. 可用 部分中选择 Appconfiguration 标记,并将其添加到 选定 部分。

    ![从 "可用 "部分到 "选定 "部分选择新字段](images/ac-sn-13.png "从 "可用 "部分到 "选定 "部分选择新字段*"){: caption="附加配置选项--表单布局--从 "可用 "部分到 "选定 "" caption-side="bottom"}选择新字段

  8. 您可以看到新字段显示在变更请求中。

    更改请求中显示的新字段
    段* 更改
    中显示的新字段

    字段值由 App Configuration 服务在创建新的变更请求时添加。 因此,请勿修改该值或向 Appconfiguration 标记 字段添加任何其他值。 修改或向字段添加任何其他值可能会导致忽略变更请求事件。

如何向外部 ServiceNow 实例注册或添加 Webhook 脚本?

遵循以下步骤向 ServiceNow 实例注册或添加 Webhook 脚本:

  1. 以管理员身份登录到 ServiceNow 实例。

  2. 单击 全部 选项卡并搜索 Business Rules 列示在“系统定义”下

    ServiceNow All tab
    ServiceNow - Business Rules listed under System Definitions

  3. Business Rules 页面中,单击 新建 按钮。

    新业务规则
    - 创建新业务规则* 新业务

  4. 在新记录中,添加 名称,选择要为 变更请求的表。 选中 高级 复选框以查看高级选项卡。

    添加网络钩子脚本的高级选项
    添加网络钩子脚本的高级选项* 添加网络钩子
    的高级选项

  5. 高级 选项卡中,添加 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);
    
  6. 使用 IBM IAM 令牌或 App Configuration 服务凭证的 API 密钥和 App Configuration 实例标识来修改复制的脚本。

  7. 浏览至 何时运行 选项卡,然后选中 更新 复选框。

    ServiceNow- When to run tab
    ServiceNow - When to run tab

  8. 单击“**提交 **”保存详细信息。

如何为 Webhook 脚本添加 IBM IAM 令牌或 App Configuration 服务凭证的 API 密钥?

Webhook 脚本需要 IBM IAM 令牌用于 Webhook 调用或 App Configuration 服务凭证的 API 密钥,您可以在其中存储 API 密钥以生成令牌。

执行以下步骤:

  1. 以管理员身份登录到 ServiceNow 实例。

  2. 单击 全部 选项卡并搜索 sys_properties.LIST,然后按 Enter 键。 或者,您可以转至 https://{{instanceid}}.service-now.com/sys_properties_list.do,其中 instanceid 是 ServiceNow 实例标识。

    ServiceNow All tab
    ServiceNow - All tab

  3. 将显示 系统属性 详细信息。

    系统属性
    - 系统属性*系统

  4. 单击“新建”创建新的系统属性。

    新的系统属性
    - 新的系统
    *服务现在

  5. 添加以下详细信息以添加令牌。 使用 password2 类型来存储密钥。 此类型将对数据进行加密,并且只能使用 ServiceNow 实例进行解密。

    系统属性
    - 系统属性*系统

  6. 单击 提交 以将密钥保存在 ServiceNow 实例中。 保存后,您可以看到数据已加密。

如何将 App Configuration 实例标识添加到 Webhook 脚本的 ServiceNow 系统属性?

执行以下步骤:

  1. 以管理员身份登录到 ServiceNow 实例。

  2. 单击 全部 选项卡并搜索 sys_properties.LIST,然后按 Enter 键。 或者,您可以转至 https://{{instanceid}}.service-now.com/sys_properties_list.do,其中 instanceid 是 ServiceNow 实例标识。

    ServiceNow All tab
    ServiceNow - All tab

  3. 将显示 系统属性 详细信息。

    系统属性
    - 系统属性*系统

  4. 单击“新建”创建新的系统属性。

    新的系统属性
    - 新的系统
    *服务现在

  5. 添加 App Configuration 实例标识。 使用 password2 类型来存储密钥。 此类型将对数据进行加密,并且只能使用 ServiceNow 实例进行解密。

    系统属性
    - 系统属性*系统

  6. 单击 提交 以将密钥保存在 ServiceNow 实例中。 保存后,您可以看到数据已加密。