Bitbucket Pipelines

使用 Bitbucket Pipelines 和 Lingo.dev CI/CD 实现 AI 翻译

Lingo.dev Bitbucket Pipelines 集成 是一款安全的开源 CI/CD 集成工具,可自动本地化新内容,并防止未完成的翻译进入生产环境。它会根据团队的工作流需求,自动创建 Pull Request 或直接提交到您的分支。

它还通过 rebase 实现自动冲突解决,让您的翻译与代码保持同步,无需人工干预。

该集成支持多种工作流场景:

  1. 当内容变更被推送时,直接提交 到分支
  2. 针对翻译更新,创建目标分支的 Pull Request

完成本指南后,您将能够:

  1. 配置由代码推送触发的自动本地化;
  2. 使用仓库变量配置安全认证;
  3. 在直接提交和 Pull Request 工作流之间进行选择;
  4. 理解持续本地化如何融入现有流程。

让我们开始吧!

前置条件

仓库设置

您的仓库必须已配置 Lingo.dev CLI,并包含有效的 i18n.json 文件。如果尚未完成此设置,请先参考 CLI 快速入门

步骤 1. 认证设置

Lingo.dev Bitbucket 集成 需要访问您的翻译引擎和仓库。认证通过仓库变量完成,以确保您的凭证安全。

添加 API 密钥

进入您的仓库 Repository settingsRepository variables,然后添加翻译引擎凭证:

针对原始 LLM API 用户:

  • 变量名:OPENAI_API_KEYANTHROPIC_API_KEY
  • 变量值:来自相应服务商的 API 密钥

针对 Lingo.dev Engine 用户:

  • 变量名:LINGODOTDEV_API_KEY
  • 变量值:来自 lingo.dev/app 的项目 API 密钥

添加 Bitbucket 访问令牌(用于 Pull Request 模式)

如果您计划使用拉取请求模式,请创建一个访问令牌:

  1. 进入 Repository settingsAccess tokensCreate Repository Access Token
  2. 授予以下权限:
    • 读写仓库
    • 读写拉取请求
  3. 将令牌添加为存储库变量:
    • 变量名: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_KEYANTHROPIC_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_KEYBB_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 模式下必需)