与雪花和github的数据库更改管理
#github #database #cicd #snowflake

这是一系列有关使用雪花的数据库更改管理的文章


概述

在上一篇文章Database Change Management with Snowflake中,您尝试了 ui工作流程 bytebase中的

本教程将通过引入 gitops workflow 将您的雪花架构更改为新的水平,在其中您将架构更改为GitHub存储库,这反过来又会触发模式部署管道的部署管道。 bytebase。

您可以使用字节键免费版本来完成教程。

先决条件

在启动本教程之前,请确保:

  • 您遵循了我们以前基于UI的更改教程Database Change Management with Snowflake
  • 您有一个雪花帐户,带有ACCOUNTADMIN的角色。
  • 您有一个github帐户。
  • 您有一个公共GitHub存储库。
  • 您在本地安装了Docker
  • 您有一个ngrok帐户。 Ngrok是一条反向代理隧道,在我们的情况下,我们需要一个公共网络地址才能从Github.com接收Webhooks。我们在这里使用Ngrok进行演示。供生产使用,我们建议使用Caddy。

ngrok

步骤1-由Ngrok生成的URL在Docker中运行biettebase

为了使github可见局部运行的字节基础,我们将ngrok产生的URL传递给--external-url。如果您在没有此参数的情况下在Docker中运行字节键(如上一个教程中所述),则可以首先停止运行的字节键。上一个教程中创建的数据默认情况下存储在~/.bytebase/data下,如果字节键重新启动,将恢复。

  1. 登录到ngrok Dashboard并按照其Getting Started步骤安装和配置。

  2. runngrok http 5678并获取公共网址:
    terminal-ngrok

  3. 确保您的docker守护程序正在运行,然后通过在终端中键入以下命令来启动字节基础码头容器。请注意由Ngrok生成的最后一个参数--external-url https://d19c-103-102-7-52.ngrok.io

docker run --init \
--name bytebase \
--restart always \
--publish 5678:8080 \
--health-cmd "curl --fail http://localhost:5678/healthz || exit 1" \
--health-interval 5m \
--health-timeout 60s \
--volume ~/.bytebase/data:/var/opt/bytebase \
bytebase/bytebase:1.9.1 \
--data /var/opt/bytebase \
--port 8080 \
--external-url https://d19c-103-102-7-52.ngrok.io


  1. BYTEBASE在Docker成功运行,您可以通过https://d19c-103-102-7-52.ngrok.io访问它 docker

步骤2-在Bytebase中找到您的雪花帐户

  1. 访问您的浏览器中的https://d19c-103-102-7-52.ngrok.io,并使用从上一篇文章创建的Workspace Owner帐户登录。
    bytebase-login

  2. 如果您遵循了最后一篇文章,则应该有一个项目TestSnowflake和一个数据库DB_DEMO_BB
    home-article1

步骤3-与github.com连接bytebase

  1. 单击设置在顶部栏上,然后单击 workspace > 版本控制
    sts-vs-step1-github

  2. 选择github.com,然后单击下一个

  3. 遵循步骤2 中的说明,在本教程中,我们将使用一个个人帐户而不是组织帐户。配置相似。
    sts-vs-step2

  4. 转到您的GitHub帐户。单击设置在下拉菜单上。
    github-settings

  5. 单击开发人员设置在左侧栏的底部。单击 oauth应用,然后单击新的oauth应用
    github-oauth-3png

  6. 填写应用程序名称,然后在字节基础中复制主页和授权回调URL并填写。单击注册应用程序。
    sts-vs-step2-unfilled
    github-new-oauth

  7. 成功创建了OAuth应用程序之后。单击生成新的客户秘密。复制客户ID 和该新生成的客户秘密,然后将它们粘贴到字节键。
    github-ds-client-id
    sts-vs-step2-filled

  8. 单击下一个。您将被重定向到确认页面。单击确认并添加,并成功添加了git提供商。
    sts-vs-github-auth
    sts-vs-step3

步骤4-启用Gitops Workflow与雪花

  1. 转到项目TestSnowflake,单击版本控制,然后选择Gitops Workflow。单击配置版本控制prj-vs-gitops
  2. 选择github.com-您刚刚添加的提供商。它将显示您可以操纵的所有存储库。选择snowflake-test-bb-localprj-vs-step1 prj-vs-step1-github-prj
  3. 保持默认设置,然后单击完成prj-vs-step3 prj-vs-enabled

步骤5-通过将SQL模式更改为github来更改雪花架构

  1. 在您的github存储库snowflake-test-bb-local中,创建一个文件夹bytebase,然后创建一个子文件夹test,然后按照模式创建一个SQL文件 {{ENV_NAME}}/{{DB_NAME}}##{{VERSION}}##{{TYPE}}##{{DESCRIPTION}}.sql 。它是以前配置项目版本控件时的文件路径模板设置的默认配置。
  • DB_DEMO_BB##202212152000#ddl#create_hello_world.sql
  • Test对应于{{env_name}}
  • DB_DEMO_BB对应于{{db_name}}
  • 202212152000对应{{version}}
  • ddl对应{{type}}
  • create_hello_world corresponds to {{description}}

在其中粘贴sql脚本。

`

CREATE SCHEMA DEMO;
CREATE TABLE HELLO_WORLD
(
FIRST_NAME VARCHAR
,LAST_NAME VARCHAR
);


<
vscode-create-table

  1. 提交并推开此文件。
  2. 转到字节键,然后进入项目TestSnowflake。您会发现有一个新的推动事件和新的第102期完成。 prj-push-event02
  3. 单击“问题/102”,然后进入问题页,您将参见:
  4. 问题是通过github.com创建的。
  5. 该问题未经手动批准完成,因为它将模式更改应用于测试环境的数据库。并且我们的测试环境不需要手动批准。
  6. SQL正是我们致力于GitHub存储库的SQL。
  7. 受让人是字节基础,因为它是自动的。如果您用于提交更改的github用户具有与字节键成员列表中相同的电子邮件地址,我们将使用该成员作为受让人。 is-create-table-done
  8. 转到GitHub存储库,除了承诺的SQL外,您还会看到一个.db_demo_bb ##最新的.sql文件。因为您以前已经配置了Schema path template,所以BYTEBASE在完成模式更改后会将最新的模式写回指定路径。因此,您可以随时访问更新的完整模式。 github-LATEST-list github-LATEST-create-table
  9. 让我们创建另一个SQL文件DB_DEMO_BB##202212152040#ddl#add_age.sql,以查看应用新模式更改后如何更新该最新架构文件。在其中粘贴SQL脚本。

`

USE SCHEMA DEMO;
ALTER TABLE HELLO_WORLD ADD COLUMN AGE NUMBER;


<
vscode-add-age

  1. 推出新的SQL文件后,请返回字节键,您应该找到生成的问题。 is-add-age-done
  2. 单击查看迁移并比较差异。 db-view-migration
  3. 转到GitHub存储库,您会发现最新的SQL已更新以反映最新的模式。 github-LATEST-add-age

摘要和下一个

现在您已经尝试了 gitops workflow ,它将您的雪花架构存储在github中,并在将更改提交到存储库后触发更改,以使您的雪花更改工作流程将工作流程提升到新的数据库。 DevOps -Database as Code

您可以查看我们的GitOps docs以了解更多配置详细信息。

在现实世界的情况下,您可能拥有与开发和生产环境相对应的单独功能和主分支,您可以检查GitOps with Feature Branch Workflow以学习设置。尝试一下,期待您的反馈!