SuperAPI AI 工具集

sn-sdk-setup

部署与运维

查看项目

更新于 10-15 09:48

技能介绍

ServiceNow SDK Setup

ServiceNow SDK(now-sdk)CLI 用于脚手架、构建和部署 Fluent DSL 应用。本技能适用于任何 SDK 安装、项目创建、认证或环境校验任务。

参考文件

只读取与当前任务相关的文件,不要在会话开始时预加载全部参考。

  • references/setup-workflows.md:脚手架新项目、配置认证、转换已有应用或诊断环境问题时阅读
  • references/auth-profiles.md:配置 Basic 或 OAuth 认证、管理命名别名或向命令传递 --auth 时阅读
  • references/init-templates.md:选择项目模板或传递非交互式 init 标志时阅读
  • references/convert-existing-app.md:从 XML 元数据或 Update Set 转换已有应用时阅读
  • references/third-party-libraries.md:向 SDK 项目添加 npm 包时阅读
  • references/js-modules-types.md:在 src/server/ 使用 JS 模块、在服务端模块使用 TypeScript,或使用 @servicenow/glide 类型定义时阅读
  • references/cli-reference.md:查找 auth、init、build、install、download 或 dependencies 命令的标志时阅读

脚本

  • scripts/check-environment.sh:在开始 SDK 工作前校验开发环境。在 CI 流水线中使用 --offline。

硬性规则

  • 先阅读再建议。给出设置说明前,始终阅读 references/setup-workflows.md。不要依赖记忆中的命令语法——SDK 命令会随版本变化。
  • 使用 now-sdk auth --add,而非 auth save 或 login。auth save 不存在,login 已弃用。正确命令是 now-sdk auth --add <url> --alias <name>。
  • 始终使用命名别名。用 now-sdk auth --add <url> --alias dev——别名允许管理多个实例。
  • 不理解用例时不要选择模板。遵循下方脚手架行为中的发现流程。只有在两次未获回答的提示后才回退到 typescript.basic。
  • 范围前缀来自 now.config.json。在完成设置后协助编写 Fluent DSL 代码时,提示用户激活 sn-sdk-fluent 技能。
  • 绝不在未成功构建前运行 install。now-sdk install 会部署 dist/ 中的内容。未先执行 now-sdk build 就运行,会静默推送过时或缺失的产物。部署前构建必须干净完成。
  • 部署前始终验证认证。OAuth 令牌会静默过期。每次部署前运行 now-sdk auth --list 并确认正确的别名为活动状态。部署中途的认证失败难以诊断。
  • sys_app.do 是应用记录,而非运行中的 UI。部署后,install 输出中的链接指向应用记录。实时 UI URL 是 .now.ts 源码中 UiPage() 调用定义的 endpoint 值,例如 https://<instance>.service-now.com/<endpoint>.do。

按任务类型的行为

新项目脚手架

先阅读 references/setup-workflows.md 和 references/init-templates.md,然后执行以下流程:

步骤 1 — 实例 URL 若尚未提供,询问:

"你的 ServiceNow 实例 URL 是什么?(例如 https://dev12345.service-now.com)"

步骤 2 — 认证

推荐 OAuth。询问:"OAuth(推荐)还是 Basic auth?"

重要:OAuth 需要交互式终端输入——Claude Code 无法处理。参见 references/cli-reference.md → auth --add(令牌刷新)中的终端变通方案。

用户确认认证成功后,用以下命令验证:now-sdk auth --list

步骤 3 — 要构建什么 用一个带示例的问题引导回答:

"你在构建什么?例如:

  • 业务规则、脚本包含、流程、Service Portal 组件 → typescript.basic
  • 带自定义 React UI 页面的应用 → typescript.react
  • 带自定义 Vue UI 页面的应用 → typescript.vue"

若用户回答 → 映射到正确模板,用一句话说明理由,与用户确认,然后执行脚手架。

若无回答 → 再问一次:"需要自定义 UI,还是仅服务端?"

若仍无回答 → 使用 typescript.basic 并说明:"采用 typescript.basic——适用于一切服务端场景。之后可用 partial.typescript.react 添加 React。"

步骤 4 — 脚手架

now-sdk init
--template <chosen-template>
--appName "<App Name>"
--packageName <package-name>
--scopeName <x_scope_name>
--auth dev

然后:npm install

步骤 5 — 交接

"项目已就绪。激活 sn-sdk-fluent 技能即可开始编写 .now.ts 文件。"

认证设置(独立)

阅读 references/setup-workflows.md 第 2 节(配置认证)

确定 Basic 还是 OAuth——推荐 OAuth

完整的标志参考和别名管理见 references/auth-profiles.md。

OAuth 需要交互式终端输入——Claude Code 无法处理。参见 references/cli-reference.md → auth --add(令牌刷新)中的终端变通方案。

验证命令:now-sdk auth --list

转换已有应用

阅读 references/setup-workflows.md 第 3 节(转换已有应用)

完整的 5 步工作流与注意事项见 references/convert-existing-app.md。

完整走过工作流:init --from → transform → build → install

构建与部署

部署前检查清单——务必先逐项完成:

  • now-sdk auth --list → 确认正确的别名被标记为默认
  • 确保源码变更已保存且完整
  • 运行 build——必须干净成功后才能继续

执行顺序——绝不跳过或重排:

npm run build # now-sdk build —— 类型检查 + 打包 npm run deploy # now-sdk install —— 推送产物到实例

部署后验证——始终确认正确版本已上线:

  • 打开 https://<instance>.service-now.com/sys_app.do?sys_id=<scopeId>(scopeId 在 now.config.json 中)
  • 确认版本与刚部署的一致
  • 确认状态为 Active
  • 若任一不符,在实例上检查 sys_app_install_log 中的错误

部署后查找实时 UI URL: install 输出显示的是 sys_app.do 链接——那是应用记录,不是运行中的 UI。获取实时 URL 的方法:

  • 打开 .now.ts 源文件中的 UiPage() 定义
  • 读取 endpoint 值(例如 x_snc_myapp_portal.do)
  • 实时 URL:https://<instance>.service-now.com/<endpoint>.do

指定目标实例:

now-sdk install --auth <alias> # 覆盖默认别名

常见故障与修复:

  • 症状:部署中途认证错误。原因:OAuth 令牌过期。修复:OAuth 令牌刷新需要交互式输入——参见 references/cli-reference.md → auth --add(令牌刷新)中的终端变通方案,然后重试部署。
  • 症状:"Could not determine app installation status"。原因:上传处理器未返回 tracker ID;SDK 的 sys_upgrade_history 轮询在 30 秒后超时。修复:使用 --reinstall:now-sdk install --auth <alias> --reinstall。该命令先卸载,再通过 tracker 路径干净重装。
  • 症状:安装成功但 UI 显示旧代码。原因:构建被跳过或产物过时。修复:重新运行 npm run build 然后 npm run deploy。
  • 症状:类型检查错误阻断构建。原因:源码中的 TypeScript 错误。修复:修复报告的错误——不要绕过。
  • 症状:安装时范围冲突。原因:另一应用占用了该范围。修复:检查 sys_app 中冲突的范围,解决后再重试。

环境校验

引导用户运行 scripts/check-environment.sh --offline(若在 CI 中)或不带标志(同时检查连接)。

解读 JSON 输出并解释任何失败的检查项。