willning 发表于 2023-7-28 17:38:00

TeamCity持续集成:如何实现数据库和应用的自动化发布与升级

本帖最后由 willning 于 2023-10-17 17:21 编辑

特别提示:CI/CD的具体配置方法需充分考虑项目特性和团队的管理方式,本方案中的配置策略仅供参考。
随着敏捷开发理念的普及,越来越多的开发团队开始在项目中引入持续集成、持续发布(CI/CD)工具和方法论,构建自动化发布机制。自动化发布应用在开发环境中,可以及时更新开发用环境(主要是数据库),提升自测的效率;用在测试环境可以减少手工发布的工作量,提升测试效率;用在生产环境则可以降低手工发布带来的误操作风险和密码泄露风险,筑牢安全性。



如果您的团队在使用Java、C#等编码开发的方式有成熟的CI/CD工具和方法论,可以参照本帖中的做法,将活字格的应用和数据库迁移上去;如果之前没有做过,也跟随本帖,快速完成最简单的CI/CD搭建。

Step 1:安装TeamCity服务器和发布用Agent
本帖采用免费版CI/CD工具中成熟度较高的TeamCity作为示例。事实上,Jekins等开源版工具在概念、架构和操作方式上与TeamCity类似,如果您用的是Jekins也可以参照本帖来完成配置。
您可以在JetBrians官网免费下载TeamCity Professional版本。安装包中包含有TeamCity服务和TeamCity Agent。前者以Web的形式提供了持续集成的发布和操作界面;后者则真正负责执行您配置好的持续集成的全部动作。最简单的方案是在同一台Windows电脑上安装TeamCity服务和Agent。考虑到TeamCity本身的性能开销和编译发布活字格应用所需的资源,推荐您为这台电脑分配不低于4C8G的资源,推荐采用8C16G或更高配置。
在安装过程中,您需要选择TeamCity Agent的用户身份,请选择当前正在执行安装的用户,输入正确的用户名和密码,不要选择System身份,后者缺少活字格设计器必要的权限,在发布过程中会出现类似于“无法解析URI”等错误。如果您在安装时没有留意这一点,也可以在安装完成后手动修改。具体的做法是按Win+R,输入services.msc。在弹出的服务管理器中,找到“TeamCity Build Agent”,双击进入详情,修改登录身份。


TeamCity默认端口号是8111,您需要在防火墙上允许该端口的访问。

Step 2:配置TeamCity Agent
活字格应用的发布需要用到活字格设计器和工具集中的ziptool.exe;数据库更新需要用到工具集中的MySQLExecute.exe/SQLServerExecute.exe以及数据库客户端工具。
您需要在Agent上做以下配置工作:
1. 拷贝工具集
将下面的工具集中的三个exe程序解压缩并拷贝到C盘根目录。

2. 安装数据库客户端
根据数据库的不同,您需要安装对应的数据库客户端,如果用的是MySQL,需要使用mysqlsh,可直接安装MySQLWorkbench;Microsoft SQL Server使用sqlcmd,可直接安装SQL Management Studio。
按Win+R,输入cmd后回车,在命令行中输入mysqlsh,可检查mysql客户端是否安装成功。

在命令行中输入sqlcmd,可检查sql server客户端是否安装成功。

如果提示没有sqlcmd命令,可以单独下载安装这个程序:SqlCmdLn安装包

3. 安装和配置活字格设计器
从活字格官网获取并安装与开发团队版本一致的活字格设计器。打开设计器,完成在线激活。

4. 安装插件
在活字格V9.0 Update 1之前,您需要在Agent的活字格设计器中安装需要发布的应用使用到的所有插件。最简单的做法是在开发机上,从Git上获取最新版的工程,将其另存为一个fgcc工程文件。之后将该文件拷贝到Agent机器上,用设计器打开,按照界面提示完成插件安装。如果后续有插件的替换或追加,都需要在Agent机器上执行对应的操作,以确保Agent机器的插件与开发机一致。

Step 3:配置TeamCity工程
TeamCity采用工程(Project)+配置(Configuration)的两层结构来管理持续集成的对象,其中您可以针对Project设置用户权限。所以,我们推荐您为每个应用创建两个工程,其中一个覆盖开发环境、测试环境和验证环境,另一个专门用来处理到生产环境的发布工作。您可以通过http://机器名:8111来访问TeamCity服务器,在其中点击左上方Projects就可以创建工程和配置了。一个典型的活字格应用对应的工程配置与git代码分支的关系如下:
-- demo_project
    |-- db_dev_env :dev分支
    |-- app_test_env:dev分支
    |-- db_test_env:dev分支
    |-- app_stage_env:master分支
    |-- db_stage_env:master分支
-- demo_project_production
    |-- app:master分支
    |-- db:master分支

这些配置可以分为两种,发布应用和更新数据库:

1. 发布应用的项目配置
测试环境的应用发布策略通常是定时执行,验证环境和生产环境通常是手动执行。
具体而言,应用发布的本质是通过活字格设计器的命令行(ForguncyConsole.exe),从Git获取工程,并将其打包发布到服务器。请参考帮助文件:

[*]配置TeamCity(V9.0 Update1)
[*]命令行参数说明与示例(V9.0 Update1)


2. 更新数据库的项目配置
开发环境的数据库发布策略是签入时执行(Git Push时自动执行),测试环境、验证环境和生产环境的执行策略与应用一致。

2.1 VCS设置为数据库差分脚本的git repo地址。通常来说,差分脚本按开发的版本分文件夹管理,在文件夹内,数据库差分脚本按照“先结构后数据”的方式命名,如果项目中有多个开发者有权限修改数据库,脚本可按照开发者或系统模块进行细分,如为每个参与设计的开发者创建一个差分脚本文件。


2.2 Build Step只有一步,即调用MySQLExecute.exe / SQLServerExecute.exe按照文件名顺序执行当前版本的所有差分脚本

带参数的可执行文件 c:\MySQLExecute.exe 参数:%mysql_server% %mysql_user% %mysql_pwd% %mysql_db% %teamcity.build.workingDir%\v2
>> 该工具执行出错时,返回码不是0,会触发TeamCity的内置失败条件,无需专门设置。

2.3 配置项目参数,您需要指定数据库的访问信息。


Step 4:设置TeamCity工程权限
为了让开发管理更有序,保护生产环境的数据安全。您可以利用TeamCity的权限机制,确保每个团队成员有且只有必要的项目权限。这一点在发布生产环境的项目中非常重要。

4.1 启用“项目别权限管理”
点击TeamCity站点右上角的Administration,进入设置页面。在左侧Server Administration分组中找到Authentication菜单,点击进入后勾选Enable Per-project permission。


4.2 在Roles页面中创建runner角色,添加permission “Run Build”和“View projects and parent...”这个权限仅可以执行,无法查看和修改参数与执行步骤。


4.3 在Group页面中创建Member组,添加Role时,选择runner角色,范围设置为demo_project项目。不要勾选该角色无权操作的demo_project_production项目


4.4 在Users页面中为成员创建用户,并将其加入Memer组即可。这个用户登录后,就只能看到demo_project项目,并执行持续集成、发布了。


-------
好的持续集成方案配合高生产率的活字格,一定能让您的开发效率再上一层楼!
现在开始行动吧~




页: [1]
查看完整版本: TeamCity持续集成:如何实现数据库和应用的自动化发布与升级