实现基于 Azure DevOps 的数据库 CI/CD 最佳实践

Bytebase 3.5.0 - 手动发布功能调整至社区版 新安装 https://www.bytebase.com/docs/get-started/self-host/升级 https://www.bytebase.com/docs/get-started/upgrade/弃用慢查询、多租户功能;弃用原有的内置 GitOps 功能,并改进 GitOps 工作流。在工单创建之前可以查看到来自 SQL 检查结果的预估影响行数。扩展 API 以允许更新 Plan 的数据库分组部署。API 支持分页和过滤。,使其仅适用于现有表和。 阅读详情

数据库变更一直是整个应用发布过程中效率最低、流程最复杂、风险最高的环节,也是 DevOps 流程中最难以攻克的阵地。那我们是否能在具体的 CI/CD 流程中,像处理代码那样处理数据库变更呢?

file

DORA 调研报告

DORA(DevOps Research & Assessment)是一家专注于 DevOps 的研究机构, 在该领域以专业与客观著称。自 2014 年以来,DevOps 调研了全球范围内超过 32,000 名专业人员,并以年度报告的形式对外发布研究成果。DORA 明确指出,将数据库变更纳入应用发布流程将显著提升整体发布效率。

file

这一结论并不令人意外。问题是,该怎么做?

一个完整的基于 Azure DevOps 的数据库 CI/CD 工作流

file

通过 Bytebase,我们将实现一个完整的基于 Azure DevOps 的数据库 CI/CD 工作流:

  • 开发者将变更 SQL 脚本提交到代码分支;
  • 触发 Bytebase 提供的 SQL 审核 CI 进行自动化 SQL 审核,并给出修改建议;
  • 修改完成后的 SQL 脚本合并入主分支;
  • 自动触发发布流程,脚本将被推送到 Bytebase 中;
  • Bytebase 内置的自动审核将对变更语句进行二次确认,根据变更风险等级自动匹配审批流,根据审批流进行审批;
  • 审批后的语句可手动或自动触发在目标库中执行;
  • 变更完成后的数据库最新 schema 结构将被自动回写入代码仓库;
  • 确认变更完成后,触发下一阶段的应用发布流程。

通过 Bytebase 社区版实现

让我们一步一步看看这个过程怎样实现的。

第一步 通过 Docker 启动 Bytebase,并配置外部 URL

ngrok 是一个反向代理工具,我们需要它的公网地址,以便从 GitHub 接收 webhooks。这里使用 ngrok 是出于测试目的;对于生产使用,我们建议使用 Caddy。

file

  1. 登录 ngrok Dashboard,并按照 Getting Started 步骤进行安装和配置。
  2. 在 Docker 中运行 Bytebase:
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:2.10.0 \
  --data /var/opt/bytebase \
  --port 8080
  1. Bytebase 在 Docker 中成功启动,你可以通过 localhost:5678 来访问。注册一个管理员账号。
  2. 在命令行运行 ngrok http 5678,并获得公共 URL。

file

  1. 登录 Bytebase,点击右上角的齿轮,将公共 URL 填入到网络部分的外部 URL,点击更新。

第二步 在 Bytebase 种添加 Azure DevOps Service 作为 Git Provider

  1. 通过公共 URL 来访问 Bytebase,点击右上角的齿轮 > 集成 > GitOps,选择 Azure DevOps Service,点击下一步。你会进入到第二步,拷贝 Redirect URI。点击 直达链接 访问你的 Azure DevOps 账号。

file file

  1. 在 Azure DevOps 的应用注册页面,填写表格如下并保存:
  • Company name: 可以任取一个名字,比如 bb
  • Homepage URL: https://bytebase.com
  • Authorization callback URL: 从 Bytebase 步骤 2 复制的 Redirect URI
  • Authorizied scopes: 找到 Code (full), Identity (read), Project and team (read), Build (read and execute)
  • file
  1. 点击 show,复制 Application ID 和 Client Secret,然后粘贴到 Bytebase 的 GitOps 配置页面步骤 2 里。

file file

第三步 在 Bytebase 中配置一个 GitOps 工作流

  1. 访问 Azure DevOps,并建立一个新项目 bytebase-gitops。
  2. 访问 Bytebase,进入项目 Sample Project。点击 GitOps 标签,选择 GitOps 工作流。点击 配置 GitOps。
  3. 选择 Azure DevOps(就是你在上一步配置的),然后选择 bytebase-gitops 这个项目。你会来到步骤三,保持其它参数不变,滑动到页面底部,勾选 基于 Azure DevOps Pipeline 开启 SQL 审核。点击完成。

file

  1. 系统会自动在 Azure DevOps 中建立实现 CI 的 PR,点击 Complete 手动合并。回到目录,可以看到 pipeline 自动生成。

file

  1. 回到 Bytebase,你会见到 GitOps 工作流已设置成功。

第四步 建立一个 PR(合并请求)去触发 SQL 审核 CI

  1. 点击界面顶端环境,你可以看到在 Prod 最下方有了一个 SQL 审核策略,点击编辑,你会看到有 3 条开启的规则。它们将通过 CI 应用。我们将非空的等级调为错误。

file

  1. 为了测试 SQL 审核 CI,我们将创建一个合并请求来更改 Prod 数据库 schema。不过,我们会让它先违反下 SQL 审核策略。Azure DevOps 上的 bytebase-gitops-az。单击新建分支,命名为 add-nickname-table-employee,点击创建分支。
  2. 在新分支上创建子目录 bytebase,并创建子子目录 prod。在 prod 目录中创建文件 employee##202310201700##ddl##add_nickname_table_employee.sql。将以下 SQL 脚本复制到文件中,并提交更改。

ALTER TABLE "public"."employee" ADD COLUMN "nick_name" text;

  1. 创建包含上述提交的合并请求。SQL 审核 CI 将自动运行并显示失败消息。点击 Tests 可以看到具体的违反规则。

file file

  1. 更新 SQL 脚本并提交到当前分支。SQL 审核 CI 将再次运行并显示通过信息。单击 Complete。

ALTER TABLE "public"."employee" ADD COLUMN "nick_name" text NOT NULL DEFAULT '';

file

  1. 返回 Bytebase 中的 Sample Project,你会看到推送事件开启了一个工单。

file

  1. 到问题详情页面。因为没有配置审批流或手动发布,此工单会自动发布。你可以点击查看变更来查看差异。

file

通过 Bytebase 企业版解锁更多功能

你可以升级到企业版,解锁更多功能。点击页面左下角的开始免费试用并升级到企业版,点击顶部实例,为现有的两个实例分配证书。

手动发布

在环境 > 2.Prod,找到发布策略,然后选择 人工发布 > 需要 DBA 或者 Bytebase 实例所有者发布。

file

自定义审批

  1. 访问设置 > 安全性 & 策略 > 自定义审批。将项目 Project Owner -> DBA 设置为DDL > 高风险的审批流。

file

  1. 访问设置 > 安全性 & 策略 > 风险中心。点击添加规则,然后点击加载第一个模板,点击添加。

file

最新 schema 写回

Schema 变更完成后,Bytebase 会将最新 schema 写回 Git 代码库。这样,团队在 Git 中就始终有一个数据库 schema 的标准真实源。

  1. 返回 Azure DevOps,新建一个分支 add-country-table-employee。在 bytebase/prod 目录下创建文件 employee##202310201700##ddl##add_country_table_employee.sql。将以下 SQL 脚本复制到文件中并提交更改。 ALTER TABLE "public"."employee" ADD COLUMN "country" text NOT NULL DEFAULT '';
  2. 返回 Bytebase,转到新创建的工单,它符合 Project Owner -> DBA 的审批流程。

file

  1. 按照审批流程点击批准后,横幅将显示等待发布。然后,负责人就可以点击发布了。
  2. 回到 GitLab,你会发现在 bytebase/prod/ 下有一个新的文件 .employee##LATEST.sql,包含了 Bytebase 写回的最新 schema。(这里需要开启推送到 main 的权限)

file

Schema 漂移

Bytebase 内置了 schema 漂移检测功能,可以检测到意外的 schema 变更。让我们使用 SQL 编辑器管理员模式来模拟一下。

  1. 点击右上角的终端图标(SQL 编辑器)。你将跳转到 SQL 编辑器。点击管理员模式。在此模式下所做的一切与直接连接服务器相同,Bytebase 不会记录。

  2. 选择左侧的 (Prod) Employee,粘贴并运行以下脚本:

ALTER TABLE "public"."employee" ADD COLUMN "city" text NOT NULL DEFAULT '';

  1. 返回 Bytebase 主页,点击顶部的数据库, 选择 Prod 下的 employee。点击现在同步。看到成功消息后,刷新页面。你将看到 schema 漂移。你可以在实例详情页配置自动扫描,以避免手动同步。

file

  1. 访问异常中心,也会看到 schema 漂移。

总结

有了 Bytebase,你就有了一套完整的 Azure DevOps 数据库 CI/CD 工作流程。你可以将此工作流程应用到自己的项目中,并根据自己的需要进行定制。 Bytebase 也支持 GitLab,GitHub,以及 Bitbucket。具体的配置步骤可以查看 Bytebase 官网文档。


💡 更多资讯,请关注 Bytebase 公号:Bytebase

用 Bytebase 实现批量、多环境、多租户数据库的丝滑变更 现在,你已学会如何使用部署配置和数据库分组在 Bytebase 中运行批量更改。动手试试吧!💡 更多资讯,请关注 Bytebase 公号:Bytebase。 阅读详情

相关推荐

在 AKS 中运行 Azure DevOps 私有代理-1

本文介绍了在Azure Kubernetes服务(AKS)中部署Azure DevOps私有代理的两种方法,重点推荐使用Helm Charts方案。相比传统虚拟机部署,AKS方案具有显著优势:降低成本、提高资源利用率、实现自动扩展和简化管理。文章详细说明了实施步骤,包括创建代理池、生成访问令牌、注册代理等操作流程。通过AKS部署私有代理,组织能够构建更高效、经济且安全的CI/CD流水线,特别适合需要访问私有网络资源的安全敏感场景。

介绍AWS Azure GCP devops Terraform 等技术 8568

Bytebase 3.4.0 - 更多功能开放给社区版

新安装 https://www.bytebase.com/docs/get-started/self-host/升级 https://www.bytebase.com/docs/get-started/upgrade/升级前请备份元数据库,升级后无法回退版本。

Bytebase的博客 451

Azure DevOps 中的代理

在选择 Azure DevOps 中使用的代理类型时,用户应考虑项目需求及环境限制。若项目可以通过互联网访问,则 MS 托管代理更为合适,便于管理和使用。若需要访问位于私有网络中的资源,或有特定的安全标准,自托管代理将是更好的选择。通过 Azure DevOps 平台,用户可以轻松导航并配置所需的代理池,查看和管理代理列表,以支持其 CI/CD 流程。

介绍AWS Azure GCP devops Terraform 等技术 890

Bytebase社区版:开源功能与企业版对比

Bytebase社区版:开源功能与企业版对比 【免费下载链接】bytebase World's most advanced database DevOps and CI/CD for Developer, DBA and Platform Engineering teams. The GitLab for databas...

gitblog_00162的博客 858

Azure Functions Serverless DevOps:CI/CD 实践案例

Azure Functions 是一种事件驱动的无服务器计算服务,允许开发人员运行代码以响应各种事件,而无需管理基础架构。结合DevOps实践,可以实现高效的持续集成和持续部署(CI/CD)。本文将通过实际案例,详细介绍如何利用Azure Functions实现Serverless DevOps的CI/CD流程。本文通过一个Azure Functions Serverless DevOps的CI/CD实践案例,详细介绍了如何利用Azure Functions实现DevOps的CI/CD流程。

matt78916的博客 491

深入解析Dataloader中shuffle机制与随机种子对模型训练的影响

本文深入探讨了Dataloader中shuffle机制与随机种子对机器学习模型训练的影响。通过实际案例分析,详细解释了数据打乱顺序的必要性、随机种子的正确设置方法以及两者协同工作的原理,帮助开发者避免常见陷阱并提升模型训练效果。

weixin_29166013的博客 142

用 Bytebase 做数据库 schema 迁移

如果你希望审核流程更加定制化,比如基于 SQL 语句类型,变更影响的行数等,可以在「自定义审批」中配置(友情提醒:请先在「实例」页面为需要使用自定义审批的实例分配证书。否则自定义审批将无法启用)。前往设置⚙️ > 自定义审批。DDL 高风险的审批流设置为 Project Owner -> DBA。前往设置⚙️ > 风险中心。添加一条「生产环境的 DDL 语句,默认为高风险」的规则。前往设置⚙️ > 成员,添加一个 DBA 角色,因为稍后需要 DBA 批准发布。

Bytebase的博客 1504

安装matlab_Matlab+yalmip+cplex安装教程及算例

数学建模/科研学习推荐学习软件:Matlab+yalmip+cplex安装教程及算例其实绝大多数本科生都是在用Matlab和LINGO求解优化问题,Matlab可以求解一般优化问题,但是当优化问题规模比较大或者在应对一些非线性问题时候,Matlab会出现求解时间长,求解效率低,甚至难以求解等问题。Matlab+yalmip+cplex是Matlab通过调用商业软件cplex求解,求解时间短,这里简...

weixin_28939637的博客 5008

Azure DevOps 详解(一)

DevOps 在近年来已经成为一个热门词汇。DevOps 是一种结合了文化理念、实践和工具的模式,能够提高组织以高速度和高质量交付应用程序和服务的能力。Azure DevOps 是微软提供的软件即服务SaaS)平台,提供一整套工具,用于通过应用 DevOps 技术开发和部署软件。本书首先概述了 Azure DevOps 平台,然后深入探讨了各种工具和功能,如项目管理的看板、源代码管理的代码库、构建和发布管道、测试计划、工件等。

龙哥盟 2039

MobaXterm SSH连接失败:深入解析密钥格式错误导致的Software caused connection abort

本文深入解析了MobaXterm SSH连接失败问题,特别是因密钥格式错误导致的'Software caused connection abort'错误。通过分析系统日志和密钥损坏原因,提供了重建SSH主机密钥的详细步骤,包括备份、生成新密钥及权限设置,帮助用户彻底解决连接中断问题。

weixin_29306011的博客 477

高速PCB设计中的一些常用规则

目前,高速PCB产品设计中,高速接口的应用日益普及,对于复杂的设计而言,高速走线就如同“蜘蛛网”一样密布在PCB各处,因此,在进行PCB检查及评审时,必要的高速PCB设计经验法则及规则是工程师开展工作必不可少的知识储备。

一只豌豆象的博客 3416

Azure Devops

以上的任务一般是Devops团队或者Leader用来创建,作为开发只需要关注,Work Items下分配给自己的任务类型工具用途CI编译、测试、发布 ArtifactCD多环境部署静态分析SonarQubeC# / JS 代码规范和复杂度分析安全扫描检测依赖和代码漏洞Secret 管理安全存储数据库连接字符串等基础设施 IaC管理 Redis、Cosmos、App Service测试单测、集成测试、E2E审批生产前手动批准发布。

weixin_42067536的博客 1139

【25届数字IC秋招总结】面试经验15——比特大陆-算能

25届数字ic面试记录——比特大陆-算能

lalala0635的博客 557

【亲测免费】 Azure-DevOps 开源项目教程

Azure-DevOps 是一个开源项目,旨在帮助开发者更好地理解和使用 Azure DevOps 服务。该项目提供了丰富的资源和示例代码,帮助用户快速上手 Azure DevOps,并实现自动化软件交付。Azure DevOps 集成了人员、流程和技术,通过自动化软件交付,为用户提供持续的价值。 ## 项目快速启动 ### 环境准备 在开始之前,请确保你已经安装了以下工具: - Git -...

gitblog_00844的博客 1003

双重分组进位跳跃进位链

跳跃进位链

qq_62260432的博客 941

ROS机器人未知环境自主探索功能包explore_lite最全源码详细解析(五)

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_client.cpp等源码实现文件中全部函数的详细介绍,第六篇文章进行概括总结,包含自主探索功能包explore_lite的简介,实现未知环境自主探索功能的原理及流程总结,效果演示,使用功能包exp

慕羽★的博客 1513

Microsoft Azure 概念与 Azure CLI 命令实战指南(DevOps-Guide)

> 本指南以 [Cloud_providers/Azure/azure.md](https://link.gitcode.com/i/ae4dd69f55133c2850fdaaa7f46382c9) 为骨架,系统梳理 Microsoft Azure 的核心概念(Region/Availability Zone、VM、Storage、Azure AD、ARM、Functions、负载均衡、SQL

gitblog_01092的博客 750

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Azure Functions Serverless DevOps:CI/CD 实践

Azure Functions 是一种无服务器计算服务,允许用户以事件驱动的无服务器方式运行代码。结合 DevOps 的 CI/CD(持续集成和持续部署)流程,可以极大地提高开发效率、优化资源利用,并确保代码质量。以下将从多个方面展开讨论。Azure Functions Serverless DevOps 的 CI/CD 实践,为企业带来了高度可扩展、灵活且成本效益高的开发与运维模式。

maohoubaji的博客 386

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Clean Architecture with Azure Cosmos DB 项目教程

Clean Architecture with Azure Cosmos DB 项目教程 项目介绍 Clean Architecture with Azure Cosmos DB 是一个基于 Clean Architecture 原则构建的项目,旨在展示如何将 Azure Cosmos DB 集成到现代应用程序中。该项目提供了一个清晰的架构模板,帮助开发者理解和实现分层架构,同时利用 Azure ...

gitblog_00178的博客 703

DevOps革命:3步实现Archery数据库审核与Azure流水线无缝集成

Archery是一款强大的MySQL数据库管理和开发Web工具,提供查询构建、数据库结构管理、数据导入导出等多种功能。本文将介绍如何通过3个简单步骤,将Archery的数据库审核能力与Azure DevOps流水线无缝集成,实现数据库变更的自动化审核与部署,为DevOps流程注入强大动力。 ## 一、准备工作:快速部署Archery环境 在开始集成之前,我们需要先搭建好Archery环境。Ar

gitblog_01036的博客 1085

手工修复Azure DevOps无法连接到Azure的问题

点击上方蓝字关注“汪宇杰博客”今天我在为一个从TFVC迁移到Git的老项目重新配置发布到Azure App Service的CI/CD管线的时候,Azure DevOps...

dotNET跨平台 2843

Azure vs TikLab,DevOps工具链一文全面对比分析

DevOps其核心目标是提高软件交付效率并提升系统可靠性‌,Azure 和 TikLab都是一站式DevOps平台,两款工具各有特点。本文将从安装配置、功能、系统集成、用户体验等几个方面对两个平台进行详细对比。

tiklab2021的博客 1175

Azure DevOps与Golang的CI/CD实践指南

持续集成与持续部署(CI/CD)是现代软件开发的核心实践,通过自动化构建、测试和部署流程显著提升交付效率。Azure DevOps作为微软推出的DevOps平台,提供完整的工具链支持。Golang凭借其静态编译、高效并发等特性,特别适合云原生场景。两者的结合能实现高效的云主机部署方案,其中关键点包括:利用Golang的交叉编译能力实现多平台部署,通过Azure Pipelines的YAML配置管理构建流程,结合系统服务管理确保应用稳定性。典型应用场景包括微服务部署、云基础设施自动化等,这种技术组合尤其适合需

351

Azure SQL数据库CI/CD流程:modern-data-warehouse-dataops实现指南

modern-data-warehouse-dataops项目为Microsoft数据平台技术提供了全面的DataOps解决方案,其中Azure SQL数据库的CI/CD流程实现尤为关键。本文将详细介绍如何利用该项目快速构建安全高效的Azure SQL数据库持续集成和持续部署管道,帮助团队实现数据库变更的自动化管理。 ## 为什么需要Azure SQL数据库CI/CD? 在传统的数据库管理模式

gitblog_00269的博客 219
上一篇: Star History 九月开源精选 |开源 GitHub Copilot 替代
下一篇: MySQL 数据脱敏方式盘点
Bytebase
博客等级 码龄5年 1349粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值