GitLab CI/CD

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

什么是 GitLab CI/CD?

GitLab CI/CD 是集成在 GitLab 中的持续集成与部署平台。用户可以在 YAML 文件中定义流水线,用于构建、测试、部署代码,或自动化由仓库事件触发的任务。

什么是 Lingo.dev CI/CD?

Lingo.dev CI/CD 是一款基于 AI 的 CI/CD 本地化工具,可确保翻译内容始终保持最新。它构建于 Lingo.dev CLI 之上,并可通过 ci 命令使用:

npx lingo.dev@latest ci --help

关于本指南

本指南介绍如何将 Lingo.dev CI/CD 与 GitLab CI/CD 及 Lingo.dev Engine 集成。

步骤 1. 配置 Lingo.dev CLI

首先,请参考 Lingo.dev CLI快速入门

完成后,您将获得:

  • 一个 Lingo.dev 的 API 密钥
  • 一个 i18n.json 文件,用于配置翻译流水线的行为
  • 使用 npx lingo.dev@latest run 进行内容翻译的能力

步骤 2. 获取访问令牌

在 GitLab CI/CD 中,某些流水线操作需要 访问令牌

访问令牌有两种类型:

两者均可使用,但只有个人访问令牌对 GitLab 免费用户开放。

个人访问令牌

  1. 在左侧边栏选择您的头像。

  2. 选择 编辑资料

  3. 在左侧边栏选择 访问令牌

  4. 选择 添加新令牌

  5. 令牌名称 中输入一个名称(如 "Lingo.dev")。

  6. 启用以下权限范围。

    • api
    • read_repository
    • write_repository
  7. 选择 Create personal access token

项目访问令牌

  1. 进入 GitLab 的某个项目。

  2. 选择 Settings > Access tokens

  3. 选择 Add new token

  4. Token name 中输入名称。

  5. 为该令牌选择一个角色。

  6. 启用以下权限范围。

    • api
    • read_repository
    • write_repository
  7. 选择 Create project access token

步骤 2. 配置 CI/CD 变量

在 GitLab 中,CI/CD 变量 允许流水线访问敏感值。要在 GitLab CI/CD 中使用 Lingo.dev,必须将 Lingo.dev API 密钥和 GitLab 访问令牌都作为变量提供。

警告: 默认情况下,CI/CD 变量仅在 受保护分支 上可用。如果你未使用受保护分支,请在创建变量时关闭 Protect variable 选项。

Lingo.dev API 密钥

  1. 进入 Settings > CI/CD
  2. 展开 Variables 部分。
  3. 点击 Add variable
  4. Key 字段中输入 LINGODOTDEV_API_KEY
  5. Value 字段中输入 Lingo.dev API 密钥。
  6. 选择 Visibility > Masked
  7. 点击 Add variable

GitLab 访问令牌

  1. 进入 Settings > CI/CD
  2. 展开 Variables 部分。
  3. 点击 Add variable
  4. Key 字段中输入 GL_TOKEN
  5. Value 字段中输入 GitLab 访问令牌。
  6. 选择 Visibility > Masked
  7. 点击 Add variable

步骤 3. 选择工作流

你可以通过不同方式设置 Lingo.dev CI/CD,以支持不同的工作流。以下是我们推荐(并提供示例)的一些工作流:

  • 当内容合并到 main 时,将翻译提交到 main
  • 当内容合并到 main 时,从 main 创建合并请求
  • 当内容合并到功能分支时,将翻译提交到该分支
  • 当内容合并到功能分支时,从该分支创建合并请求

但没有“最佳”工作流。每种方式都有其权衡。如果你不确定从哪里开始,我们建议先选择第一个选项。这是最简单、最无感的工作流。

步骤 4. 设置流水线

  1. 在仓库根目录下创建一个 .gitlab-ci.yml 文件:

    touch .gitlab-ci.yml
    
  2. 将其中一个示例流水线复制到该文件中。

  3. 将更改提交并推送到 main 分支:

    git add .gitlab-ci.yml
    git commit -m "feat: GitLab CI pipeline for Lingo.dev"
    git push
    

(可选)步骤 5. 自定义流水线

Lingo.dev CI/CD 提供了默认值,大多数情况下无需自定义。但你可以通过 ci 命令的 CLI 标志进行覆盖,

npx lingo.dev@latest ci --api-key "$LINGODOTDEV_API_KEY" --commit-message "My custom commit message!"

要查看所有可用选项,请参见 CLI 命令

流水线示例

提交到主分支

当内容合并到 main 时,将翻译提交到 main

image:
  name: lingodotdev/ci-action:latest
  entrypoint: [""]

stages: [translate]

translate:
  stage: translate
  script:
    - npx lingo.dev@latest ci --api-key "$LINGODOTDEV_API_KEY"
  only:
    - main

从主分支创建合并请求

当内容合并到 main 时,从 main 创建一个合并请求。

image:
  name: lingodotdev/ci-action:latest
  entrypoint: [""]

stages: [translate]

translate:
  stage: translate
  script:
    - npx lingo.dev@latest ci --pull-request --api-key "$LINGODOTDEV_API_KEY"
  only:
    - main

提交到功能分支

当内容合并到功能分支时,将翻译提交到该分支。

image:
  name: lingodotdev/ci-action:latest
  entrypoint: [""]

stages: [translate]

translate:
  stage: translate
  script:
    - npx lingo.dev@latest ci --api-key "$LINGODOTDEV_API_KEY"
  only:
    - branches
  except:
    - main

从功能分支创建合并请求

当内容合并到功能分支时,从该分支创建一个合并请求。

image:
  name: lingodotdev/ci-action:latest
  entrypoint: [""]

stages: [translate]

translate:
  stage: translate
  script:
    - npx lingo.dev@latest ci --pull-request --api-key "$LINGODOTDEV_API_KEY"
  except:
    - main