从零开始基于TeamCity搭建项目的CI工作流
CI的介绍和意义
CI简单来说就是把一些流程化,重复性
的人力操作放在机器上去执行的过程,从而节省大量用户的时间,并且保证构建得出的产物一定是主干最新的。
所以CI对于工程项目来说意义重大,当然对于Unity,UE这种游戏研发项目更是如此,因为稍微大点的项目出一次版本可能要10-20分钟,此外还有一些工程特化的功能例如AB构建,Shader变体搜集,各种本地缓存构建,甚至是性能监测报告,GI烘焙,PCG生成,场景切割等重度流程,很难想象这些不放在流水线上让机器自动执行,会浪费大家多少时间
为什么是TeamCity
对比Jenkins和TeamCity的使用感受,TeamCity有几个非常明显的优势
- 环境搭建简单,不论是Server还是Client
- 界面友好,美观大方
- 流水线拓展支持更加丰富的语言类型
- 环境变量提示友好,更不容易出错
- Docker支持完善,方便做云服务器迁移
- 一些其他的基础设施比Jenkins更加完善(例如自动化单元测试),使用起来更加友好
综上,TeamCity相对于Jenkins是一个更加现代化的方案,所以我们也选择TeamCity作为CI方案
搭建教程
总览
目前CI环境的搭建有这样几种方式
- 纯本地方案:本地电脑同时做CI Server和CI Agent,最不推荐的方式,因为执行CI的时候电脑会卡顿,基本上做不了其他工作,失去了CI的意义
- 局域网方案:一台电脑做CI Server,其余电脑注册到CI Server上作为CI Agent,个人项目推荐
- 云端方案:云端服务器作为CI Server,其余电脑注册到CI Server作为CI Agent,工作室,公司项目推荐
其中云端方案提供了最大的操作自由度,因为云端部署的方式可以让我们对版本控制模块做Commit Hook从而自动触发流水线,更加快速的发现问题
本教程将使用Github作为版本管理库,Windows作为CI Server,MAC作为CI Agent搭建一套局域网的CI方案,云端搭建与此类似,只是需要将本地IP改为云端IP即可
TeamCity官方文档:https://www.jetbrains.com/help/teamcity/2022.04/teamcity-documentation.html
下载安装TeamCity
前往TeamCity下载:https://www.jetbrains.com/teamcity/download/ 注意选择自己需要的环境,在这里下载的TeamCity默认包含Server + Agent内容
需要注意的是,TeamCity要求Java8,请确保自己已经安装Java8并配置了环境变量
- Java下载地址 https://www.oracle.com/java/technologies/downloads/ 拉到最下面下载 Java SE Development Kit 8u341
- Java环境变量配置
- Win10 https://zhuanlan.zhihu.com/p/340402458
- MAC https://www.zhihu.com/question/29114464/answer/332272237
- 需要额外注意的是,MAC的JAVA_HOME一定要指向*/Library/Java/JavaVirtualMachines*,并且这个文件夹中一定有相应地Java包
由于我们Windows作为CI Server,所以不需要安装Agent相关模块
端口号我们填写一个不会与其他程序占用冲突的即可
随后一路Next,等待安装完成后会打开一个网页,表示TeamCity已安装完成并正常运行,这里选定一个文件夹,TeamCity所有的数据都会保存在这里
数据库按需求选一个
随后有一长串谁也不会看的协议声明,直接同意,然后创建管理员账号,至此,我们Windows CI Server环境的搭建部署已经完成了,随后即可创建项目了
TeamCity的管理架构
在正式开始创建工程之前,还是有必要把TeamCity的架构讲清楚
其中Root Project为TeamCity初始化时就创建的一个Project,可以当成系统自带的一个项目管理容器,可以配置一些全局设置
具体的项目则对应我们生产开发中的一个项目,例如一个项目是连连看,另一个项目是蜘蛛纸牌
而Build Configurations则对应具体项目中一个个具体的流水线,比如连连看项目中有一个构建AB流水线,一个构建EXE流水线,一个打包图集流水线等
创建通用构建流水线Template
在正式开始创建Project之前,我们最好先创建一个通用模板Project,这个通用模板Project里的配置可以在各个不同的Project
的不同流水线
中进行复用,从而便于管理,节约成本
当然了,我们也可以在每个具体的Project里创建模板,来进行差异化管理,这里我就直接在Root Project下创建了
通过点击右上角Administration-Projects-Root Project-Create Template来创建一个模板,这里假如我们创建了一个名为SharedBuildPipline的模板,选择其Parameters进行如下配置
这样我们就得到了可以复用在各个流水线上的几个变量,其他的例如Build Steps,Trigger也是同理
创建Project
这里的Project代表TeamCity的一个项目,其中可以包含多个构建流水线(Build Configurations)配置
这里我们填入项目地址,创建工程,如果目标工程是私有的,则需要前往 http://localhost:8866/admin/editProject.html?projectId=_Root&tab=oauthConnections 配置相应的鉴权信息(其实就是仓库访问权限所需要的账号密码验证啦)
当然了,其实TeamCity本身的Project并不是和我们具体的项目仓库强相关的,这里通过这种方式创建是因为它可以自动帮我们配置好VCS,你也可以选择直接创建一个空项目
鉴权完成后会来到项目配置界面(需要点击Show advanced options来让他显示所有选项)
配置Project
配置Proejct主体
通用配置
可以看到Default template已经为我们默认从Root Project继承了SharedBuildPipline了
VCS配置
VCS的配置其实就是用来为不同的Build Agent实时同步更新云端仓库的,其中的参数也是一目了然,顾名思义,这里因为我们在配置局域网CI,所以其实并没有什么卵用,毕竟我们局域网IP对于Github来说是隐藏的,所以Webhook是没用的
其他配置
大家可以根据自己的需求去官方文档查看使用说明
配置Project的构建流水线
刚才我们在创建Project的时候已经顺带创建了名为MAC_Build_AB流水线,选中即可进行配置
通用配置
VCS配置
创建流水线节点
选中Build Steps-Add build step,可以看到TeamCity提供了非常多的脚本支持,这里我们直接选择最常用的命令行脚本
这里以执行Unity SVC收集工作为例
1 | echo "开始收集SVC" |
我们还可以在面板上配置流水线节点执行的其他选项,例如执行条件
ps:我们可以通过输入 %
来呼出所有环境变量选择界面,非常贴心的功能
配置环境变量具体内容
还记得我们前面从SharedBuildPipline继承的那几个参数吗,我们想在这个MAC_Build_AB流水线里进行自定义的话,需要来到 Parameters ,勾选Show inherited parameter,即可进行编辑
增加CI Build Agent
现在我们项目也创建好了,流水线也搭建好了,就要开始执行构建了,想要执行构建就必须要有具体的构建机器,也就是CI Build Agent,这里我们选择同一个局域网下的MAC电脑作为CI Build Agent
选中Toolbar的Agent,然后点击下载Agent包
将下载的zip包传给MAC电脑,进行解压,解压好之后其实就算是安装完毕了,由于我们要将MAC作为Build Agent连接到Server,我们还需要进行一些配置操作
Server IP确认
回到我们的Windows上面,运行cmd,输入ipconfig查看自己的局域网ip地址,这里假设为192.168.1.2
配置修改
来到MAC上打开解压后的文件夹,将 conf/buildAgent.dist.properties 文件重命名为 conf/buildAgent.properties
然后用文本编辑器打开文件,将 serverUrl=http://localhost:8866/
修改为 serverUrl=http://192.168.1.2:8866/
,当然也可以对这个配置文件中的其他内容进行修改,例如修改Agent名字之类的
随后cd到解压文件夹,执行如下命令:
1 | sh bin/agent.sh start |
运行结果应当如下,如果出现任何错误,说明Java环境配置不正确,请按照文章开头环境配置指引进行操作
1 | % sh bin/agent.sh start |
CI Server授权认证
随后我们回到Window这边,发现Unauthorized多了一个设备,需要对他进行授权
进行授权后,这台MAC就会注册到我们的AgentPool中,可以执行构建流水线了
执行构建流水线
通过Administration-Projects-Root project-ProjectS-MAC_Build_AB来到我们的MAC_Build_AB流水线,点击Run,选择我们刚刚注册的MAC Agent,最后点击Run Build即可
我们可以通过BuildLog界面查看流水线执行情况
在流水线执行完毕后,也可以直接查看构件列表
后记
本文只是介绍TeamCity最基础的一些功能,权当抛砖引玉,还有很多实用功能大家可以按需使用,官方文档也非常的详细友好
最后还是要说一句,做好CI真的很重要,不论是个人独立游戏,还是工作室还是公司,都是如此