Bitbucket Pipelines
使用 Bitbucket Pipelines 和 Lingo.dev CI/CD 实现 AI 翻译
Lingo.dev Bitbucket Pipelines 集成 是一款安全的开源 CI/CD 集成工具,可自动本地化新内容,并防止未完成的翻译进入生产环境。它会根据团队的工作流需求,自动创建 Pull Request 或直接提交到您的分支。
它还通过 rebase 实现自动冲突解决,让您的翻译与代码保持同步,无需人工干预。
该集成支持多种工作流场景:
- 当内容变更被推送时,直接提交 到分支
- 针对翻译更新,创建目标分支的 Pull Request
完成本指南后,您将能够:
- 配置由代码推送触发的自动本地化;
- 使用仓库变量配置安全认证;
- 在直接提交和 Pull Request 工作流之间进行选择;
- 理解持续本地化如何融入现有流程。
让我们开始吧!
前置条件
仓库设置
您的仓库必须已配置 Lingo.dev CLI,并包含有效的 i18n.json 文件。如果尚未完成此设置,请先参考 CLI 快速入门。
步骤 1. 认证设置
Lingo.dev Bitbucket 集成 需要访问您的翻译引擎和仓库。认证通过仓库变量完成,以确保您的凭证安全。
添加 API 密钥
进入您的仓库 Repository settings → Repository variables,然后添加翻译引擎凭证:
针对原始 LLM API 用户:
- 变量名:
OPENAI_API_KEY或ANTHROPIC_API_KEY - 变量值:来自相应服务商的 API 密钥
针对 Lingo.dev Engine 用户:
- 变量名:
LINGODOTDEV_API_KEY - 变量值:来自 lingo.dev/app 的项目 API 密钥
添加 Bitbucket 访问令牌(用于 Pull Request 模式)
如果您计划使用拉取请求模式,请创建一个访问令牌:
- 进入 Repository settings → Access tokens → Create Repository Access Token
- 授予以下权限:
- 读写仓库
- 读写拉取请求
- 将令牌添加为存储库变量:
- 变量名:
BB_TOKEN - 变量值:您的 Bitbucket 访问令牌
- 变量名:
步骤 2. 创建工作流
使用以下基础配置创建或更新您的 bitbucket-pipelines.yml 文件:
script:
- pipe: lingodotdev/lingo.dev:main
此配置使用 Lingo.dev pipe 并自动运行翻译引擎。
所需权限
Bitbucket Pipelines 需要访问存储库变量和 git 操作权限:
存储库变量:
LINGODOTDEV_API_KEY— Lingo.dev Engine 用户必需OPENAI_API_KEY或ANTHROPIC_API_KEY— 原始 LLM API 用户必需
针对拉取请求模式:
BB_TOKEN— 创建和管理拉取请求时必需
访问令牌权限范围(使用拉取请求模式时):
- 读写仓库 — 访问和修改仓库内容
- 读写拉取请求 — 创建和管理拉取请求
这些权限允许集成读取您的内容、生成翻译并用本地化内容更新您的仓库。
步骤 3. 选择您的工作流模式
Lingo.dev Bitbucket 集成 根据团队的代码审核需求支持两种操作模式。
直接提交模式(默认)
集成会将翻译内容直接提交到您的分支:
script:
- pipe: lingodotdev/lingo.dev:main
此模式最适合:
- 独立开发者或小型团队
- 合并前会审核的功能分支
- 不需要单独审核翻译更新的项目
拉取请求模式
该集成会为翻译更新创建拉取请求:
script:
- pipe: lingodotdev/lingo.dev:main
variables:
LINGODOTDEV_PULL_REQUEST: "true"
拉取请求模式所需设置
存储库变量:
LINGODOTDEV_API_KEY 和 BB_TOKEN 都必须配置为存储库变量。
访问令牌要求:
您的 BB_TOKEN 必须包含对存储库和拉取请求的读写权限。
注意: 使用拉取请求模式时,必须配置 BB_TOKEN 变量。
此模式最适合:
- 需要严格代码审查的团队
- 需要对翻译变更单独审批的项目
- 需要对所有变更进行明确审查的工作流
步骤 4. 工作流场景
Lingo.dev Bitbucket 集成 可适配不同的开发工作流。了解这些场景有助于为您的团队选择合适的配置。
场景 1:功能分支更新(直接提交)
触发条件: 推送到功能分支 操作: 直接将翻译更新提交到功能分支
image:
name: atlassian/default-image:2
pipelines:
branches:
feat/*:
- step:
name: Run i18n
script:
- pipe: lingodotdev/lingo.dev:main
流程: 内容变更推送到功能分支 → 集成将翻译提交到同一分支
这样可以将翻译更新保留在功能分支内,确保翻译与原始变更一同审查。
场景 2:更新拉取请求(拉取请求模式)
触发条件: 推送到任意已配置分支 操作: 创建包含翻译更新的拉取请求
image:
name: atlassian/default-image:2
pipelines:
branches:
feat/*:
- step:
name: Run i18n
script:
- pipe: lingodotdev/lingo.dev:main
variables:
LINGODOTDEV_API_KEY: "${MY_LINGODOTDEV_API_KEY}" # or OPENAI_API_KEY/ANTHROPIC_API_KEY
BB_TOKEN: "${MY_ACCESS_TOKEN}"
LINGODOTDEV_PULL_REQUEST: "true"
LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations"
LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
LINGODOTDEV_PROCESS_OWN_COMMITS: "true"
流程: 内容变更推送到分支 → 集成创建包含翻译的拉取请求
这样可以对翻译更新进行单独审查。
高级配置
可通过额外变量自定义集成行为:
Lingo.dev Engine 示例:
image:
name: atlassian/default-image:2
pipelines:
branches:
feat/*:
- step:
name: Run i18n
script:
- pipe: lingodotdev/lingo.dev:main
variables:
LINGODOTDEV_API_KEY: "${MY_LINGODOTDEV_API_KEY}"
BB_TOKEN: "${MY_ACCESS_TOKEN}"
LINGODOTDEV_PULL_REQUEST: "true"
LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations"
LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
LINGODOTDEV_PROCESS_OWN_COMMITS: "true"
原始 LLM API 示例:
image:
name: atlassian/default-image:2
pipelines:
branches:
feat/*:
- step:
name: Run i18n
script:
- pipe: lingodotdev/lingo.dev:main
variables:
OPENAI_API_KEY: "${MY_OPENAI_API_KEY}" # or ANTHROPIC_API_KEY
BB_TOKEN: "${MY_ACCESS_TOKEN}"
LINGODOTDEV_PULL_REQUEST: "true"
LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations"
LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
LINGODOTDEV_PROCESS_OWN_COMMITS: "true"
配置选项:
LINGODOTDEV_API_KEY— 如果你使用 Lingo.dev Engine,这是你的 Lingo.dev Engine API 密钥OPENAI_API_KEY— 如果你使用原始 LLM API,这是你的 OpenAI API 密钥ANTHROPIC_API_KEY— 如果你使用原始 LLM API,这是你的 Anthropic API 密钥LINGODOTDEV_PULL_REQUEST— 创建 pull request 而不是直接提交(默认值:false)LINGODOTDEV_PULL_REQUEST_TITLE— 自定义 pull request 标题(默认值:feat: update translations via @lingodotdev)LINGODOTDEV_COMMIT_MESSAGE— 自定义提交信息(默认值:feat: update translations via @lingodotdev)LINGODOTDEV_WORKING_DIRECTORY— 在子目录中运行集成(默认值:.)LINGODOTDEV_PROCESS_OWN_COMMITS— 处理由此集成创建的提交(默认值:false)BB_TOKEN— Bitbucket 访问令牌(pull request 模式下必需)