用途 该技能用于把 ServiceNow Fluent(SDK 4.x,now-sdk CLI)项目接入版本控制与 CI:配置 GitHub Actions、处理流水线部署、以及在 Pull Request 中拦截 keys.ts 过期问题。官方参考可运行 snow_fluent_explain,topic 为 ci-integration(离线命令 now-sdk explain ci-integration)。
运行环境限制 snow_fluent_* 工具是本地工具,在开发者机器上执行 now-sdk,只有 MCP 服务器以 stdio 本地运行时才存在;通过托管 HTTP 传输(如网页聊天)不可用,此时应改用 git + CI:提交项目文件、触发构建/部署流水线、跟踪工作流运行。
仓库约定 snow_fluent_init 生成的 .gitignore 保持原样:.DS_Store、.now/、dist/、node_modules/、target/、*.tsbuildinfo、.jest_cache。dist/ 与 .now/ 是构建产物,不要提交。src/fluent/generated/keys.ts 必须提交,它是 Now.ID 到 sys_id 的注册表;若构建时缺少已提交的 keys,会生成新 sys_id 并在实例上产生重复记录。一个仓库一个应用是最简单布局;now.config.json 绑定项目 scope,不含实例连接信息,可安全提交。
PR 检查 每个 PR 运行:npm ci 然后 npx now-sdk build --frozenKeys。若构建会改变 keys.ts,构建失败,提示“Keys file is out-of-date”。修复在作者本地:now-sdk build 重新生成,然后 git add src/fluent/generated/keys.ts && git commit。本地等价门禁是 snow_fluent_build 加 frozen_keys=true;brownfield 项目可加 error_on_conflict=true。注意 --frozenKeys 不会检查 script: 字符串里的 ES6 语法,那部分需人工或用 code-review 技能审查。
无交互认证 now-sdk auth --add 是交互式的,无法在 CI 运行。改用环境变量:必须设 SN_SDK_NODE_ENV=SN_SDK_CI_INSTALL;基本认证需 SN_SDK_AUTH_TYPE=basic、SN_SDK_INSTANCE_URL、SN_SDK_USER、SN_SDK_USER_PWD;OAuth client_credentials(SDK 4.7.0+)需 SN_SDK_AUTH_TYPE=oauth 及 SN_SDK_OAUTH_CLIENT_ID、SN_SDK_OAUTH_CLIENT_SECRET。OAuth 需在实例侧配置:启用 glide.oauth.inbound.client.credential.grant_type.enabled、创建应用注册、映射具有安装角色且 Identity Type = Human 的应用用户,Machine 身份会在握手时失败。
最小 GitHub Actions 工作流 Fluent SDK 无官方 GitHub Action,官方指引是普通 now-sdk 步骤,需 Node 20+。资料给出了 verify(PR 时 npm ci + npx now-sdk build --frozenKeys)和 deploy-test(push 到 main 时注入 SN_SDK_* secrets,构建后 npx now-sdk install 安装到 TEST 实例)两个 job。install 参数:--demoData 默认 TRUE,--skip-flow-activation 关闭自动流程发布。
生产限制 官方明确:不要用 CI 的 now-sdk install 部署生产。生产推广走 git 加 Application Repository:从测试实例发布到 App Repo,再从那里安装到生产。原因:now-sdk install 不产生 update set 变更,也没有回滚上下文;SDK 侧唯一撤销手段是破坏性的 --reinstall。
退出码与输出 Fluent 编译错误返回 exit 1,可令 job 失败。package.json 找不到时输出错误日志但 exit code 0,可加 test -d dist/app 兜底。CLI 无 JSON 输出模式,输出为 [now-sdk] 前缀日志。本地可在推送前用 snow_fluent_status 确认 scope/SDK 固定/keys.ts 状态,用 snow_fluent_build(frozen_keys=true)镜像 PR 门禁,用 snow_fluent_install 部署测试实例。