自定义流程的版本控制¶
Openflow 支持注册表客户端,包括 GitHub 注册表客户端,它允许您使用 Git 存储库来存储自定义流程定义并对其进行版本控制。这实现了标准的软件开发生命周期 (SDLC) 实践,例如分支、拉取请求、代码审查和环境提升。
常见的工作流程是:
维护一个代表生产流程定义的
main分支。为新的开发创建功能分支。
在 Openflow 画布上进行开发和提交更改。
开启拉取请求,使用 Flow Diff 进行审查,然后合并。
先决条件¶
一个用于存储流程定义的 GitHub 存储库。
一个具有
repository访问权限的 GitHub 个人访问令牌。一个有权访问 Openflow 画布的 Openflow 运行时。
在运行时集成对象上具有适当的 Snowflake 角色权限。
第 1 步:创建 GitHub 注册表客户端¶
在 GitHub 中创建一个存储库来存储您的流程定义。
在 GitHub 中生成一个具有存储库访问权限的个人访问令牌 (PAT)。
在 Openflow 画布上,导航到 Controller Settings 并创建一个新的注册表客户端。
选择 GitHub Registry Client 作为类型。
使用以下信息配置注册表客户端:
您的 GitHub 存储库 URL。
GitHub 存储库所有者。
用于身份验证的个人访问令牌。
第 2 步:创建新流程并对其进行版本控制¶
在 Openflow 画布上,为您的流程创建一个新的流程组。
构建您的流程:添加处理器、配置连接并设置您的数据管道。
右键点击流程组并选择 Start Version Control。
选择您在 步骤 1 中配置的 GitHub 注册表客户端。
提供流程名称和初始提交消息。
保存后,流程定义将提交到您的 GitHub 存储库。您可以通过检查 GitHub 中的存储库来进行验证。
第 3 步:使用分支管理变更¶
创建开发分支¶
在您的 GitHub 存储库中,创建一个新分支(例如 dev 或类似 feature/add-new-table 的功能分支)。
在分支上导入和开发¶
在 Openflow 画布上,通过将 Import from Registry 图标从工具栏拖拽到画布上,将流程从 GitHub 注册表导入到新的流程组中。
导入时,选择要基于其进行工作的目标分支(例如
dev)。在流程组内对流程进行变更。
在 Openflow 中提交变更。这会将更新后的流程定义推送到 GitHub 中的所选分支。
通过拉取请求进行审查和合并¶
在 GitHub 中,从您的开发分支向
main开启一个拉取请求。查看更改内容。使用 Snowflake Flow Diff GitHub Action(请参阅 步骤 4)获取人类可读的差异比较。
在拉取请求获得批准后将其合并。
回到 Openflow 画布,更新
main流程组以从main分支拉取最新版本。
第 4 步:设置 Snowflake Flow Diff(GitHub 操作)¶
Snowflake Flow Diff 是一个 GitHub 操作,它通过直接在拉取请求对话中呈现管道更改的可视化差异,使流程更改变得人类可读。
设置工作流程文件¶
在您的 GitHub 存储库中,创建
.github/workflows/flowdiff.yml文件。从 Snowflake Flow Diff 存储库 (https://github.com/Snowflake-Labs/snowflake-flow-diff) 复制工作流配置(请参阅 README 中的“使用情况”部分)。
提交并推送工作流程文件。
查看流程变更¶
当拉取请求被开启时,Flow Diff 操作会自动运行。
导航到拉取请求上的 Conversations 选项卡,等待 Flow Diff 分析出现。
该分析会显示流程更改的可视化、人类可读的比较,而不是原始的 JSON 差异。
跨环境管理参数¶
Openflow 使用参数来管理不同运行时中特定于环境的值(例如连接字符串、凭据、表名)。
请记住以下概念:
参数被分组到参数上下文中,参数上下文与流程组是一对一的映射关系。
参数上下文继承允许您在父上下文中定义共享参数,并在子上下文中覆盖特定的值。这对于在开发、暂存和生产环境之间提升流程非常有用。
参数上下文可以与密钥管理器集成,以安全地处理敏感凭据,而无需将其存储在流程定义中。
推荐的 SDLC 工作流程¶
开发环境:开发者创建功能分支,构建或修改流程,并在 Openflow 画布上针对其功能分支提交更改。
代码审查:在 GitHub 中开启拉取请求。使用 Snowflake Flow Diff 进行可读审查。
合并到 main:批准后,将拉取请求合并到
main分支。提升到生产环境:在您的生产运行时中,更新流程组以从
main拉取最新版本。参数化:使用参数上下文来处理特定于环境的配置,而无需修改流程定义本身。