跳到主要内容

教程:使用源代码管理创建环境

信息

功能可用范围

  • 适用于 Business 和 Enterprise 方案。
  • 必须是 n8n 实例所有者或实例管理员,才能启用和配置源代码管理。
  • 实例所有者和实例管理员可以向已连接的仓库推送更改,也可以从仓库拉取更改。
  • 项目管理员可以向已连接的仓库推送更改,但不能从仓库拉取更改。

本教程完整介绍设置环境的过程,你将创建开发和生产两个环境。教程使用 GitHub 作为 Git 托管平台,其他平台的流程类似。

n8n 在版本控制软件 Git 的基础上构建了环境功能。将 n8n 实例连接到 Git 分支后,通过推送和拉取在环境间迁移工作。你应对环境和 Git 有一定了解,如需更多信息,请参阅:

选择源代码管理模式 ​

设置源代码管理与环境前,需要规划环境及其与 Git 分支的关系。n8n 支持不同的分支模式。对于环境,需要在“多实例、多分支”和“多实例、单分支”两种模式中选择,本教程会介绍这两种模式。

信息

建议:不要对同一个 n8n 实例既推送又拉取

可以从实例向分支推送工作,再拉取到同一实例,但 n8n 不推荐这样做。为降低合并冲突和覆盖工作的风险,请尽量建立单向流程:要么将工作推送到 Git,要么从 Git 拉取,避免在同一实例中双向操作。

多实例、多分支 ​

开发 n8n 实例连接开发分支,生产实例连接生产分支

此模式的优点:

  • 额外增加一层保护,防止更改误入生产环境。必须通过 GitHub 中的拉取请求,才能在环境间复制工作。
  • 支持两个以上的实例。

缺点是在环境间复制工作需要更多手动步骤。

多实例、单分支 ​

开发和生产 n8n 实例都连接到同一 Git 分支

此模式的优点是:从一个实例推送后,其他环境可以立即获取这些工作。

缺点如下:

  • 如果误推送,工作可能进入生产实例。如果使用 GitHub Action 自动拉取到生产环境,必须改用多实例、多分支模式,或严格避免推送不希望进入生产环境的工作。
  • 对同一实例既推送又拉取,可能因操作覆盖更改而造成数据丢失。应建立流程,确保内容单向流动。

设置仓库 ​

选定模式后,需要设置 GitHub 仓库。

多分支
  1. 创建新仓库。
    • 请确保仓库为私有,除非希望将工作流、标签,以及变量和凭据存根公开到互联网上。
    • 创建仓库时添加 README,以便立即创建分支。
  2. 创建一个名为 production 的分支,另一个名为 development。操作方法请参阅在仓库中创建和删除分支。
单分支

创建新仓库。

  • 请确保仓库为私有,除非希望将工作流、标签,以及变量和凭据存根公开到互联网上。
  • 创建仓库时添加 README,这会创建 main 分支,之后将连接到该分支。

将 n8n 实例连接到仓库 ​

创建两个 n8n 实例,一个用于开发,另一个用于生产。

在 n8n 中配置 Git ​

  1. 前往 Settings(设置)> Environments(环境)。
  2. 选择连接方式:
    • SSH:在 Git repository URL(Git 仓库 URL)中填写仓库的 SSH URL(例如 git@github.com:username/repo.git)。
    • HTTPS:在 Git repository URL(Git 仓库 URL)中填写仓库的 HTTPS URL(例如 https://github.com/username/repo.git)。
  3. 根据连接方式配置身份验证:
    • SSH:n8n 支持 ED25519 和 RSA 公钥算法,默认为 ED25519。如果 Git 主机要求 RSA,请在 SSH Key(SSH 密钥)下选择 RSA。复制 SSH 密钥。
    • HTTPS:填写凭据:
      • Username(用户名):Git 托管平台的用户名。
      • Token(令牌):Git 托管平台的个人访问令牌(PAT)。

设置部署密钥 ​

使用 n8n 提供的 SSH 密钥,为仓库创建部署密钥,以设置 SSH 访问。密钥必须具有写入权限。操作方法请参阅 GitHub | 管理部署密钥。

连接 n8n 并配置实例 ​

多分支
  1. 在 n8n 的 Settings(设置)> Environments(环境)中,选择 Connect(连接)。n8n 会连接到 Git 仓库。
  2. 在 Instance settings(实例设置)下,选择当前 n8n 实例要使用的分支。将生产分支连接到生产实例,开发分支连接到开发实例。
  3. 仅生产实例:选择 Protected instance(受保护实例),阻止用户编辑该实例中的工作流。
  4. 选择 Save settings(保存设置)。
单分支
  1. 在 n8n 的 Settings(设置)> Environments(环境)中,选择 Connect(连接)。
  2. 在 Instance settings(实例设置)下,选择主分支。
  3. 仅生产实例:选择 Protected instance(受保护实例),阻止用户编辑该实例中的工作流。
  4. 选择 Save settings(保存设置)。

从开发环境推送工作 ​

在开发实例中创建一些工作流、标签、变量和凭据。

将工作推送到 Git:

  1. 在主菜单中选择 Push(推送)推送图标。

  2. 在 Commit and push changes(提交并推送更改)弹窗中,选择要推送的工作流和数据表。可以按状态(新增、修改、删除)筛选并搜索项目。n8n 会自动推送标签,以及变量和凭据存根。

    n8n 推送的是工作流当前保存的版本,而非已发布版本。之后还需要在远程服务器上单独发布版本。

  3. 输入提交说明,用一句话描述本次更改。

  4. 选择 Commit and Push(提交并推送)。n8n 会将工作发送到 Git,完成后显示成功消息。

将工作拉取到生产环境 ​

工作现在已保存在 GitHub 中。如果采用多分支配置,工作位于开发分支;如果采用单分支配置,则位于 main。

多分支
  1. 在 GitHub 中创建拉取请求,将 development 合并到 production。
  2. 合并拉取请求。
  3. 在生产实例的主菜单中,选择 Pull(拉取)拉取图标。
单分支

在生产实例的主菜单中,选择 Pull(拉取)拉取图标。

查看截图
菜单关闭时的拉取和推送按钮
菜单打开时的拉取和推送按钮

可选:使用 GitHub Action 自动拉取 ​

如果希望无需登录生产实例就能拉取,可以使用 GitHub Action 和 n8n API,在每次向 production 或 main 分支推送新工作时自动拉取。

GitHub Action 示例:

译注:原示例仍请求 /version-control/pull,且没有显式指定 POST;同一版本的“在环境间复制工作”和公共 API 指南示例使用 POST /api/v1/source-control/pull。此处保留原始代码以便对照,请以对应实例的 API 端点、方法和鉴权要求核对后再使用。

name: CI
on:
# Trigger the workflow on push or pull request events for the "production" branch
push:
branches: [ "production" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
run-pull:
runs-on: ubuntu-latest
steps:
- name: PULL
# Use GitHub secrets to protect sensitive information
run: >
curl --location '${{ secrets.INSTANCE_URL }}/version-control/pull' --header
'Content-Type: application/json' --header 'X-N8N-API-KEY: ${{ secrets.INSTANCE_API_KEY }}'

后续步骤 ​

了解更多:

相关资源 ​

本文为社区中文翻译。查看对应英文原文