在团队中使用TeamCity+Gitlab实现持续交付工作流
在团队中使用TeamCity+Gitlab实现持续交付工作流
先决条件:
- 安装 Gitlab
- 安装 TeamCity
创建TeamCity项目
- 登陆到 TeamCity 主页
- 点击顶部导航栏的
Administration - 在右侧的导航栏里选择
Projects - 点击
Create project按钮 - 在新的窗口依次键入 GitLab 项目 Url , GitLab 用户名密码 , 然后点击
Proceed
默认情况下,应该将 GitLab 用户名密码设置为 root 账号的用户名密码,同时你也可以设置 Parent project 字段为其他,你应该使用默认配置
创建TeamCity配置
- 点击顶部导航栏的
Administration - 在右侧的导航栏里选择
Projects - 点击你创建的项目,在右侧导航栏里点击
General Settings - 点击
Create build configuration按钮 - 选择
Manually,Name填写为Deploy-Production, 然后点击Create按钮 - 并以相同的方式创建名称为
Deploy-Test,Deploy-UAT,Test-E2E,Test-Load,Test-Security的配置
创建持续集成工作流
配置分支
- 点击导航栏的
Administration - 在右侧的导航栏里选择
Projects - 点击你创建的项目
- 在右侧导航栏里点击
VCS Roots - 在右侧的列表中应该只有一个项 , 点击 Edit 进入设置页
- 设置
VCS root name字段为 Application_GitLab ,点击Regenerate ID,在最下方点击Show advanced options,Branch specification字段设置为以下值:
+:refs/merge-requests/*/head
+:refs/tags/*
+:refs/heads/(master)
- 勾选
Enable to use tags in the branch specification,将Username style设置为Author Name and Email, 点击Save按钮
配置持续集成流程
-
在
Prjects主页里找到你项目下的Build配置,点击进去的页面的右上角点击Edit Configuration Sttings. -
打开
Build的配置页面,进入Trigger,如果没有任何Trigger则按照下述操作创建新的Trigger,否则点击Edit按钮:
Add new trigger=>VCS Trigger
- 之后在
Branch filter富文本框里填入以下内容
+:*
-:<default>
-
在右侧导航栏点击
Build Features -
点击
Add build feature -
选择
Commit status publihser -
在
VCS Root中选择Application_GitLab,Publisher选择GitLab,然后填写GitLab 地址+/api/v4,填写账号的 Private Token
默认情况下,应该使用 GitLab root 账号所创建的 Private Token
- 在右侧导航栏点击
General Settings Build number format设置为%build.vcs.number%- 在右侧导航栏里点击
Build Steps - Add build step
以 .NET Core 项目为例 Runner type 选择 .NET CLI(dotnet),step name 设置为 Restore App Packages ,command 设置为
restore,以相同的方式添加新的 .NET CLI(dotnet) 的 Step ,command 为 test
- 然后添加Runner type 为 Docker 的step,command选中为 build,指定 Dockerfile的位置,将Image name:tag 字段设置为
<镜像名称>:%teamcity.build.branch%,同时删除内容 --pull . - 以相同的方式添加新的 Docker Step 并选中 command 为 push,相同的方式指定push的镜像名称和tag
创建部署工作流
给 Deploy-Production,Deploy-Test,Deploy-UAT 分别配置不同环境的部署工作流
- 点击导航栏的
Administration - 在右侧的导航栏里选择
Projects - 点击你创建的项目
- 在右侧导航栏里点击
VCS Roots - 点击
Create VCS root Type of VCS选择Git- 设置
VCS root name字段为 DeployYamls_GitLab - 在最下方点击
Show advanced options Branch specification字段设置为以下值
+:refs/heads/*
Fetch URL设置为运维所管理的部署YAML所在的GIT仓库,如kubernetes/docker-compose等描述文件Authentication method设置为 Password 并键入用户名和密码,然后丢点击Save
配置部署流程
- 进入对应环境的配置的配置页面
- 点击右侧导航栏的
Dependencies Add new snapshot dependency- 勾选对应当前Teamcity项目的
Build,其他选项保持默认值 - 点击右侧导航栏的
Triggers Add new triggerFinish Build Trigger- 选中
Build并勾选Trigger after successful build only,同时Branch filter下键入以下值
对于生产环境 Deploy-Production 配置为:
+:*PROD
对于测试环境 Deploy-Test 配置为:
+:*
-:*UAT
-:*PROD
对于灰度/预发布环境 Deploy-UAT 配置为:
+:*UAT
- 继续点击
Add new trigger,选择VCS Trigger并设置branch filter中按下述设置
对于生产环境 Deploy-Production 配置为:
+:<default>
对于测试环境 Deploy-Test 配置为:
+:test
对于灰度/预发布环境 Deploy-UAT 配置为:
+:uat
- 点击右侧导航栏中的
Build Steps设置部署工作流
以容器化应用为例,持续集成会构建好镜像并推送到远程仓库,添加
Runner type为SSH Exec,输入对应环境的IP地址,设置认证方式和执行命令,你可以在配置中点击右侧的小文本图标来获取可用的配置,如镜像tag,找到 dep开头的配置,通常格式如%dep.<projectname>_Build.teamcity.build.branch%"
- 然后点击右侧导航栏的
General Settings设置Build configuration type为Deployment,然后 Save
推荐做法是,将服务器的ip地址或发布后的host作为参数传递给下一个工作流,如在配置中设置服务器用于运维的主ip和该服务部署后所在的host地址
创建测试工作流
- 继续配置
Test-E2E,Test-Load,Test-Security的三个配置,并设置其Dependencies设置为多个,分别为Deploy-Production,Deploy-Test,Deploy-UAT - 继续配置
Test-E2E,Test-Load,Test-Security的三个配置,并设置其 Trigger 设置为多个,分别为Deploy-Production,Deploy-Test,Deploy-UAT,VCS Trigger
注意:往往不需要对生产环境中的服务进行负载测试,请在Test-Load取消对应对应的
Dependencies和Trigger
尝试在现有工作流进行开发
- 需求确定,开发者在 issue 创建新的议题
- 在议题创建 merge-request,并指定功能分支
- 开发者在功能分支开发代码
- 持续提交,每次提交触发CI
- 由于开发需要增加新的环境变量配置,如新需求需要连接消息队列
- 对于环境变更,由运维在自身的GIT Yaml项目中提交配置变更的代码到test分支
- 运维的变更会触发测试环境的部署工作流
- 部署工作流完成,能正确部署,手动/自动合并代码到uat分支仿真环境
- 由于是新增配置,不会影响现有环境,仿真执行完成后合并代码到master生产环境
- 配置增加完成
- 测试需要测试开发者的代码,如果开发修改了功能,可能会影响到现有测试用例的失败,需要开发修改代码,保证不能影响到现有用例,即破坏性更新开发需要以版本号形式迭代api接口
- 如果开发新增了功能,测试在git上提交新的测试用例,触发对应的测试工作流
- 所有测试完成后,项目经理点击merge-request的合并按钮
- 项目经理创建tag 如 20190101-UAT
- 创建tag触发CI工作流,CI工作流完成后触发部署工作流,部署工作流完成后触发测试工作流
- 测试将测试脚本变更合并到测试项目中的uat分支,再次运行新的测试工作流
- 所有测试完成,创建 tag 如 20190101-PROD,完成生产环境的部署
- 测试合并测试脚本变更到master

浙公网安备 33010602011771号