教程:使用源代码控制创建环境#
功能可用性
- 仅在 Enterprise 版本中提供。
- 您必须是 n8n 实例的所有者(instance owner)或实例管理员(instance admin),才能启用和配置源代码控制。
- 实例所有者和实例管理员可以向连接的仓库推送更改,也可以从仓库拉取更改。
- 项目管理员(project admins)可以向连接的仓库推送更改,但不能从仓库拉取更改。
本教程将逐步介绍端到端设置环境的完整流程。您将创建两个环境:开发(development)和生产(production)。本教程使用 GitHub 作为 Git 托管服务提供商,其他提供商的操作流程类似。 n8n 的环境功能基于 Git 构建,Git 是一种版本控制系统。您可以将一个 n8n 实例关联到某个 Git 分支,并通过“推送-拉取”模式在不同环境之间迁移工作内容。您应具备一定的环境和 Git 基础知识。如需了解更多相关内容,请参考:
- n8n 中的环境:了解环境的作用及其在 n8n 中的工作原理。
- Git 与 n8n:了解 Git 概念以及 n8n 中的源代码控制机制。
选择您的源代码控制模式#
在设置源代码控制和环境之前,您需要规划好环境结构以及它们与 Git 分支之间的对应关系。n8n 支持多种 分支模式。对于环境管理,您需要在两种模式之间做出选择:多实例多分支(multi-instance, multi-branch)或多实例单分支(multi-instance, single-branch)。本教程将涵盖这两种模式。
建议:不要对同一个 n8n 实例同时进行推送和拉取操作 您可以从一个实例向某个分支推送变更,再从同一实例拉取变更。但 n8n 不推荐这样做。为了降低合并冲突和覆盖工作的风险,建议建立单向工作流:即数据流动方向只能是从 n8n 到 Git,或从 Git 到 n8n,而不是双向同时进行。
多实例多分支(Multiple instances, multiple branches)#
该模式的优势包括:
- 提供额外的安全层,防止意外将变更直接引入生产环境。要在环境间复制工作内容,必须通过 GitHub 的 Pull Request 流程。
- 支持两个以上的实例。
缺点是在不同环境之间复制工作需要更多手动步骤。
多实例,单分支#
示意图 这种模式的优点是,当你从一个实例推送更改时,其他环境可以立即获得这些变更。 缺点包括:
- 如果误操作进行了推送,可能会导致未完成的工作进入生产环境(production instance)。如果你使用 GitHub Action 自动化拉取 到生产环境,则必须采用“多实例多分支”模式,或者确保绝不推送不希望出现在生产环境中的内容。
- 向同一实例进行推送和拉取操作可能导致数据丢失,因为执行这些操作时变更会被覆盖。你应该建立流程以确保内容只沿一个方向流动。
设置你的代码仓库#
选择好部署模式后,你需要设置 GitHub 仓库。 多分支单分支
- 创建一个新的仓库。
- 确保该仓库为私有(private),除非你愿意将工作流(workflows)、标签(tags)以及变量和凭据存根(variable and credential stubs)暴露在互联网上。
- 创建新仓库时包含 README 文件,以便你可以立即创建分支。
- 创建两个分支:一个命名为
production,另一个命名为development。具体操作可参考 在仓库中创建和删除分支。
创建一个新的仓库。
- 确保该仓库为私有(private),除非你愿意将工作流、标签以及变量和凭据存根暴露在互联网上。
- 创建新仓库时包含 README 文件,这会自动创建
main分支,后续你将连接到该分支。
将你的 n8n 实例连接到代码仓库#
创建两个 n8n 实例,一个用于开发环境(development),一个用于生产环境(production)。
在 n8n 中配置 Git#
- 进入 设置(Settings) > 环境(Environments)。
- 选择你的连接方式:
- SSH:在 Git 仓库 URL(Git repository URL) 中输入仓库的 SSH 地址(例如:
git@github.com:username/repo.git)。 - HTTPS:在 Git 仓库 URL(Git repository URL) 中输入仓库的 HTTPS 地址(例如:
https://github.com/username/repo.git)。
- SSH:在 Git 仓库 URL(Git repository URL) 中输入仓库的 SSH 地址(例如:
- 根据所选连接方式配置认证信息:
- 使用 SSH 时:n8n 支持 ED25519 和 RSA 公钥算法。ED25519 是默认算法。如果你的 Git 主机要求使用 RSA,请在 SSH Key(SSH 密钥) 下选择 RSA,然后复制生成的 SSH 密钥。
- 使用 HTTPS 时:输入你的凭据:
- 用户名(Username):你的 Git 服务提供商的用户名。
- 令牌(Token):你在 Git 服务提供商处生成的个人访问令牌(Personal Access Token, PAT)。
配置部署密钥(Deploy Key)#
使用 n8n 生成的 SSH 密钥为仓库创建一个部署密钥,以启用 SSH 访问权限。该密钥必须具有写入权限。具体操作可参考 GitHub | 管理部署密钥。
连接 n8n 并配置实例#
多分支模式单分支模式
多分支模式
- 在 n8n 的 设置(Settings) > 环境(Environments) 中,点击 连接(Connect)。n8n 将连接到你的 Git 仓库。
- 在 实例设置(Instance settings) 下,选择当前 n8n 实例要使用的分支。将生产分支连接到生产实例,开发分支连接到开发实例。
- 仅生产实例:勾选 受保护的实例(Protected instance),以防止用户在此实例中编辑工作流。
- 点击 保存设置(Save settings)。
单分支模式
- 在 n8n 的 设置(Settings) > 环境(Environments) 中,点击 连接(Connect)。
- 在 实例设置(Instance settings) 下,选择主分支(main branch)。
- 仅生产实例:勾选 受保护的实例(Protected instance),以防止用户在此实例中编辑工作流。
- 点击 保存设置(Save settings)。
从开发环境推送工作#
在你的开发实例中,创建一些工作流(workflows)、标签(tags)、变量(variables)和凭据(credentials)。 要将工作推送到 Git:
-
在主菜单中选择 Push(推送) !Push icon。 查看截图 菜单关闭时的 Pull 和 Push 按钮 菜单关闭时的 Pull 和 Push 按钮 菜单打开时的 Pull 和 Push 按钮 菜单打开时的 Pull 和 Push 按钮
-
在弹出的 Commit and push changes(提交并推送更改) 对话框中,选择你想要推送的工作流。你可以根据状态(新建、已修改、已删除)进行筛选,并搜索特定工作流。n8n 会自动推送标签(tags),以及变量和凭据的存根(stubs)。
-
输入提交信息(commit message)。这应是一句简要描述你所做更改的内容。
-
点击 Commit and Push(提交并推送)。n8n 将把内容发送到 Git,并在完成后显示成功提示。
将工作拉取到生产环境#
你现在的工作已存在于 GitHub 中。如果你使用的是多分支(multi-branch)设置,代码位于开发分支;如果选择的是单分支(single-branch)设置,则位于 main 分支。
多分支单分支
- 在 GitHub 中,创建一个 Pull Request,将开发分支合并到生产分支。
- 合并该 Pull Request。
- 在你的生产实例中,点击主菜单中的 Pull(拉取) !Pull icon。
在您的生产实例中,从主菜单选择 Pull !Pull icon。 查看截图 菜单关闭时的 Pull 和 Push 按钮 菜单关闭时的 Pull 和 Push 按钮 菜单打开时的 Pull 和 Push 按钮 菜单打开时的 Pull 和 Push 按钮
可选:使用 GitHub Action 自动执行 Pull 操作
如果您希望避免手动登录生产实例来执行 Pull 操作,可以使用 GitHub Action 结合 n8n API,在每次向 production 或 main 分支推送新内容时自动触发 Pull。
GitHub Action 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16| ``` name: CI on:
在向 "production" 分支推送或发起 Pull Request 时触发工作流
push: branches: ["production"]
允许您从 Actions 标签页手动运行此工作流
workflow_dispatch: jobs: run-pull: runs-on: ubuntu-latest steps: - name: PULL # 使用 GitHub Secrets 来保护敏感信息 run: > curl --location '${{ secrets.INSTANCE_URL }}/version-control/pull' --header 'Content-Type: application/json' --header 'X-N8N-API-KEY: ${{ secrets.INSTANCE_API_KEY }}'
---|---
## 下一步 #
了解更多:
* n8n 中的环境(Environments) 和 Git 与 n8n
* 源代码控制模式(Source control patterns)