Activepieces Vercel 集成 Piece 实战指南:部署管理与环境变量自动化
【免费下载链接】activepiecesAI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents项目地址: https://gitcode.com/GitHub_Trending/ac/activepieces
本篇技术指南围绕 Activepieces 社区 Piece@activepieces/piece-vercel展开,讲解如何将 Vercel 的部署管理与环境变量操作接入 Activepieces 工作流。读完本文,你将掌握该 Piece 的认证配置方式、五个内置动作(列出项目、创建部署、查询部署状态、列出/写入环境变量)的参数含义与调用细节,并了解其底层 API 调用链与构建方法,可直接用于构建"代码推送后自动部署、部署完成后自动通知、批量同步环境变量"等自动化场景。
Piece 概览:一个面向部署与配置管理的 Vercel 集成
@activepieces/piece-vercel是 Activepieces 社区贡献的一个"有界 MVP(Bounded MVP)"版本 Vercel 集成,定位明确:只覆盖部署与环境变量这两条核心链路,不追求穷尽 Vercel 全部 API。其入口定义位于 packages/pieces/community/vercel/src/index.ts:
export const vercel = createPiece({ displayName: 'Vercel', auth: vercelAuth, minimumSupportedRelease: '0.36.1', description: 'Deploy projects and manage environment variables on Vercel.', categories: [PieceCategory.DEVELOPER_TOOLS], authors: ['atlas-hunter'], actions: [ listProjects, createDeployment, getDeploymentStatus, listEnvironmentVariables, upsertEnvironmentVariable, createCustomApiCallAction({ ... }), ], triggers: [], });从源码结构可以推断出几个关键事实:
- 最低支持版本:
minimumSupportedRelease: '0.36.1',意味着需要 Activepieces 0.36.1 及以上版本才能加载该 Piece; - 分类与作者:归入
PieceCategory.DEVELOPER_TOOLS(开发者工具),作者为atlas-hunter; - 额外能力:除五个固定动作外,还通过
createCustomApiCallAction提供了一个自定义 API 调用动作,base URL 固定为https://api.vercel.com,并自动注入Authorization: Bearer <token>请求头,允许用户按需调用 Vercel 其他 REST 端点; - 无触发器:该 Piece 目前只提供动作(actions),
triggers为空数组,适合作为流程中的执行节点而非事件源。
内置动作清单
| 动作名 | 显示名称 | 底层 Vercel API |
|---|---|---|
list_projects | List Projects | GET /v10/projects(带分页遍历) |
create_deployment | Create Deployment | POST /v13/deployments |
get_deployment_status | Get Deployment Status | GET /v13/deployments/{id} |
list_environment_variables | List Environment Variables | GET /v10/projects/{projectId}/env |
upsert_environment_variable | Upsert Environment Variable | POST /v10/projects/{projectId}/env?upsert=true |
认证配置:Personal Access Token 与团队作用域
连接 Vercel 需要先配置认证信息,其定义位于 packages/pieces/community/vercel/src/lib/common/auth.ts。该 Piece 使用PieceAuth.CustomAuth自定义认证,共三个字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
token | SecretText(密文) | 是 | Vercel Personal Access Token,在 Vercel 控制台 Settings → Tokens 中创建 |
teamId | ShortText | 否 | Vercel Team ID,用于操作团队(Team)拥有的资源 |
slug | ShortText | 否 | Vercel Team Slug,当未提供 Team ID 时生效 |
值得注意的两个细节:
- Token 以密文存储:
token使用PieceAuth.SecretText,在 Activepieces 中会作为机密保存,不会在流程编辑界面明文回显; - Team ID 优先级高于 Slug:源码中
validate逻辑与请求构造逻辑一致——若同时填写了teamId与slug,只使用teamId;仅当teamId为空时才回退到slug。
连接校验机制
配置连接时,Piece 会发起一次真实的 API 探测来验证凭证有效性(见 auth.ts):
validate: async ({ auth }) => { const queryParams: Record<string, string> = { limit: '1' }; if (auth.teamId) { queryParams['teamId'] = auth.teamId; } else if (auth.slug) { queryParams['slug'] = auth.slug; } await httpClient.sendRequest({ method: HttpMethod.GET, url: 'https://api.vercel.com/v10/projects', authentication: { type: AuthenticationType.BEARER_TOKEN, token: auth.token }, queryParams, }); return { valid: true }; }即:连接保存时调用GET https://api.vercel.com/v10/projects?limit=1(附带teamId或slug),请求成功则连接有效,否则返回校验错误信息。因此Token 必须至少拥有读取项目列表的权限,否则无法建立连接。
团队作用域的自动注入
认证信息中的teamId/slug会在每次 API 调用时自动作为查询参数注入,其实现位于 packages/pieces/community/vercel/src/lib/common/client.ts:
if (auth.props.teamId) { queryParams['teamId'] = auth.props.teamId; } else if (auth.props.slug) { queryParams['slug'] = auth.props.slug; }这意味着:只要在连接里配置了团队信息,所有动作(列表、部署、环境变量)都会自动作用于该团队,无需在每个动作里重复填写。对于"自定义 API 调用"动作,官方描述也提示:团队级请求仍需在 URL 或查询参数中手动补充teamId或slug。
动作一:List Projects(列出项目)
定义于 packages/pieces/community/vercel/src/lib/actions/list-projects.ts,用于获取当前账号或团队下的全部 Vercel 项目。
- 参数:
search(可选文本),按项目名称过滤; - 行为:调用
GET /v10/projects,内部使用游标分页自动遍历所有结果,单页limit: 100,最多翻 10 页(见 client.ts 中的MAX_PAGES = 10),因此最多返回约 1000 个项目; - 幂等性:只读操作,
aiMetadata.idempotent: true,可安全重试。
该动作的典型用途是"发现项目 ID / 名称"——在部署或管理环境变量之前,先用它枚举目标项目。返回的项目结构(VercelProject)包含id、name、framework、latestDeployments、link(关联 Git 仓库信息)、updatedAt、createdAt等字段。
此外,项目下拉组件(props.ts 中的vercelProjectDropdown)也复用了同一个listAllProjects函数:它支持搜索(refreshOnSearch: true),且未连接账号时会给出Connect your Vercel account first的禁用提示。
动作二:Create Deployment(创建部署)
定义于 packages/pieces/community/vercel/src/lib/actions/create-deployment.ts,这是本 Piece 最复杂的动作,支持两种部署来源模式,通过deployment_source下拉切换:
模式一:Redeploy(重新部署已有部署)
选择历史部署记录,基于它重新触发部署。动态字段(Property.DynamicProperties按需渲染):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
deployment_id | Dropdown | 是 | 从GET /v6/deployments?projectId=xxx&limit=100拉取该项目的部署历史,下拉标签格式为url (state · target) |
with_latest_commit | Checkbox | 否 | 勾选后使用最新提交而非原部署文件重新部署(对应withLatestCommit: true) |
请求体构造为:
{ "name": "<projectId>", "project": "<projectId>", "deploymentId": "<deployment_id>", "withLatestCommit": true }模式二:Git Source(从 Git 仓库部署)
直接指定 Git 来源触发部署。公共字段:
target:目标环境,默认preview,可选production(deploymentTargetProperty);git_type:Git 提供商,可选github、github-limited、gitlab、bitbucket,默认github;git_branch:要部署的分支/ref(必填);git_sha:可选提交 SHA;git_repo_org/git_repo_name:仓库归属与仓库名(GitHub 用 org/owner + repo;Bitbucket slug 模式用 owner + slug);git_repo_id:GitHub repoId 或 GitLab projectId 模式;git_repo_uuid/git_workspace_uuid:Bitbucket UUID 模式专用。
不同提供商对参数的校验规则(源码中均有显式错误提示):
- GitHub:提供
git_repo_id,或同时提供git_repo_org+git_repo_name,二选一;否则抛错For GitHub deployments, provide either Repository ID or both Repository Organization and Repository Name.; - GitLab:必须提供
git_repo_id(作为 projectId); - Bitbucket:提供
git_repo_uuid(可附加git_workspace_uuid),或提供git_repo_org+git_repo_name(作为 owner + slug),二选一。
顶层通用选项
force_new:Checkbox,默认关闭。勾选后在请求查询参数中追加forceNew=1,即使存在相似的旧部署也强制新建;skip_auto_detection_confirmation:Checkbox,默认开启,对应skipAutoDetectionConfirmation=1,自动确认框架检测而不弹出确认。
最终请求为POST /v13/deployments,name与project均取所选项目的 ID。该方法非幂等(aiMetadata.idempotent: false),每次调用都会启动一次独立部署,不适合无谓重试。
动作三:Get Deployment Status(获取部署状态)
定义于 packages/pieces/community/vercel/src/lib/actions/get-deployment-status.ts,用于拉取单个部署并检查其当前状态(如building、ready、error)。
- 参数:
project:项目下拉,必填;deployment:部署下拉,基于所选项目从GET /v6/deployments动态加载,必填;with_git_repo_info:Checkbox,默认开启,请求时附带withGitRepoInfo=true以包含 Git 仓库信息;
- 底层调用:
GET /v13/deployments/{deploymentId},部署 ID 会经过encodeURIComponent处理; - 幂等性:只读,
idempotent: true。
典型用法是配合 Create Deployment 使用:创建部署后取出返回的uid,在轮询循环或定时流程中反复调用本动作,直到状态变为ready或error,再触发后续通知(如 Slack 消息、邮件)。
动作四:List Environment Variables(列出环境变量)
定义于 packages/pieces/community/vercel/src/lib/actions/list-environment-variables.ts,读取指定项目已配置的环境变量。
- 参数:
project:项目下拉,必填;decrypt:Checkbox,默认关闭。注意源码注释明确指出该参数已被 Vercel 官方标记为 deprecated——若开启,Vercel 在允许的情况下会尝试返回解密后的值;git_branch:可选分支过滤,仅对 preview 作用域的环境变量有效;
- 底层调用:
GET /v10/projects/{projectId}/env,查询参数decrypt=true(可选)与gitBranch(可选); - 幂等性:只读,
idempotent: true。
动作五:Upsert Environment Variable(创建/更新环境变量)
定义于 packages/pieces/community/vercel/src/lib/actions/upsert-environment-variable.ts,通过 Vercel 的 upsert API 以变量名(key)为键执行"存在则更新、不存在则创建"。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
project | Dropdown | 是 | 目标项目 |
key | ShortText | 是 | 环境变量键名 |
value | LongText | 是 | 环境变量值 |
type | StaticDropdown | 是 | 变量类型:plain(默认)/sensitive/encrypted |
target | MultiSelect | 是 | 作用环境:production、preview、development,默认三者全选 |
git_branch | ShortText | 否 | 可选分支,仅当 target 中包含preview时允许 |
comment | ShortText | 否 | 变量用途备注 |
关键行为与校验:
- 请求地址:
POST /v10/projects/{projectId}/env?upsert=true,通过upsert=true查询参数启用覆盖语义; - 分支校验:若填写了
git_branch但 target 列表不含preview,源码会直接抛错:Git Branch can only be used when Preview is included in Target Environments.; - 请求体示例:
{ "key": "API_KEY", "value": "sk-xxx", "type": "sensitive", "target": ["production", "preview", "development"], "gitBranch": "main", "comment": "injected by Activepieces" }- 幂等性:
idempotent: true——相同 key 与值重复执行,最终存储结果一致,适合在流程中安全重试。
底层调用链与通用客户端
所有动作都通过统一的vercelApiCall客户端函数(client.ts)发起请求,其行为归纳如下:
- Base URL:
https://api.vercel.com; - 认证:统一使用
AuthenticationType.BEARER_TOKEN,请求头为Authorization: Bearer <token>与Content-Type: application/json; - 团队注入:自动追加
teamId(优先)或slug查询参数; - 空值清理:
query对象中undefined、null、空字符串会被剔除,不会进入最终查询参数; - 返回结构:直接返回响应体
response.body,动作层无需再解析。
该统一封装保证了五个动作(以及自定义 API 调用动作)的认证行为完全一致,任何 Token 或团队配置的变更都会在全局生效。
构建与包信息
该 Piece 是独立的 npm 包,包名为@activepieces/piece-vercel,版本0.1.0,依赖@activepieces/pieces-common、@activepieces/pieces-framework、@activepieces/core-piece-types、@activepieces/core-utils(均为 workspace 引用)。其 package.json 位于 packages/pieces/community/vercel/package.json。
原文档给出的构建命令为:
turbo run build --filter=@activepieces/piece-vercel包内还定义了其他脚本:build(tsc -p tsconfig.lib.json && cp package.json dist/)、bundle(调用 CLI 的 pieces bundle)、lint(ESLint 检查src/**/*.ts)。
目录结构与国际化
Piece 源码采用清晰的分层组织:
packages/pieces/community/vercel/ ├── src/ │ ├── index.ts # Piece 入口(createPiece 注册) │ ├── lib/ │ │ ├── actions/ # 五个动作 + 导出入口 │ │ │ ├── create-deployment.ts │ │ │ ├── get-deployment-status.ts │ │ │ ├── index.ts │ │ │ ├── list-environment-variables.ts │ │ │ ├── list-projects.ts │ │ │ └── upsert-environment-variable.ts │ │ └── common/ │ │ ├── auth.ts # 认证定义与连接校验 │ │ ├── client.ts # 统一 API 客户端与分页逻辑 │ │ └── props.ts # 共享属性(项目下拉、target 下拉等) │ └── i18n/ # 多语言翻译(de/es/fr/ja/nl/pt/zh 等) ├── README.md └── package.jsoni18n/目录提供了包括德语、西班牙语、法语、日语、荷兰语、葡萄牙语、中文在内的多语言翻译文件,说明该 Piece 遵循 Activepieces 的国际化规范,界面文案可随平台语言切换。
典型自动化场景示例
基于上述动作,可以在 Activepieces 中搭建以下工作流:
- CI/CD 后置处理:Webhook 触发(如 Git 推送)→ Create Deployment(Git Source 模式,指定分支与 GitHub 仓库)→ Get Deployment Status(轮询直至
ready/error)→ 分支判断后发送通知; - 环境变量同步:从配置源(如数据库或表格)读取键值 → Upsert Environment Variable(批量写入多个项目)→ List Environment Variables 校验结果;
- 项目巡检:定时触发 List Projects → 遍历每个项目的部署状态与环境变量清单 → 汇总报告。
需要注意的是:部署创建动作非幂等,涉及敏感值的value字段建议使用 Activepieces 的变量或连接机制管理,避免明文硬编码在流程中。
小结
@activepieces/piece-vercel以最小但完整的形态覆盖了 Vercel 最常用的部署与环境变量管理能力:统一的 Bearer Token 认证、可选的团队作用域注入、带分页的项目/部署枚举、双模式部署创建(redeploy 与 Git Source)、以及幂等的环境变量 upsert。配合自定义 API 调用动作,它既能完成高频的标准化操作,也能在需要时透传访问 Vercel 的其他端点,是 Activepieces 中接入 Vercel 工作流的基础组件。
【免费下载链接】activepiecesAI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents项目地址: https://gitcode.com/GitHub_Trending/ac/activepieces
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考