使用 TeamCity 实现持续集成(CI)
原文同步至 https://waylau.com/continuous-integration-with-teamcity/
持续集成(Continuous Integration),也就是我们经常说的 CI,是现代软件开发技术的基础。本文论述了如何使用 TeamCity 持续集成工具来实现项目的持续集成。
为我们什么需要 CI
目前,CI 已在当前业界被许多软件开发团队所采用,是一种在整个软件开发生命周期内保证代码质量的常见做法。它是一种开发实践,旨在帮助开发团队应对软件开发过程中的如下挑战:
- 自动检查 :当软件开发团队在周期性的新增或修改后的代码后,CI 服务器能持续地获取新增或修改后签入的源代码,并可以对这些变更的代码进行质量或者编码规范的检查。常用的工具有 PMD、SonarQube、CheckStyle、FindBugs等。
- 自动构建 :CI 系统会依照预先制定的配置计划,或某一特定事件,自动检出代码,并对目标软件进行构建。这里的计划,可以是周期性的时间点,比如10分钟或者1小时构建一次,也可以根据特定事件来触发构建,比如用户主动发出构建命令,或者根据代码的变更来触发构建。构建工具可以选择 Maven 或者 Ant 等。
- 自动测试 :构建检查完成后,可以执行预先制定的一套测试规则,也可以在执行构建的过程中进行测试用例的测试,前提是项目团队采用了测试驱动开发(Test-Driven Development,TDD)。常用的测试工具,有 JUnit、JWebUnit、Selenium 等。
- 自动部署 :当自动化检查和测试成功完成,将打包软件、构件部署到一个运行环境或者软件仓库。这样,构件才能更迅速地提供给用户使用。
- 及时提醒:当上面定义的任何一个阶段进行过程中发现出错或者预设事件得到触发,都能够及时通知给相应的项目干系人来进行处理。比如,在构建过程发生了错误,CI 服务器可以邮件通知开发人员来进行修复;自动化部署完成了,CI 服务器通知会测试人员可以进行测试了,等待。除了邮件,提醒的方式可以是短信、桌面通知器,也可以是音响大喇叭。
简言之,CI 是在敏捷开发过程中,实现速度、效率、质量的软件开发实践,可以持续为用户交付可用的软件产品。更多详情可以参考《为什么我们迫切需要持续集成(Continuous Integration)》。
TeamCity 简介
正如 TeamCity 官网的自我介绍的那样,TeamCity 是一款强大的开箱机用 CI 工具(“Powerful Continuous Integration out of the box”)。其特性包括:
- Technology Awareness
- Key Integrations
- Cloud Integrations
- Continuous Integration
- Configuration
- Build History
- Build Infrastructure
- Code Quality Tracking
- VCS Interoperability
- Extensibility and Customization
- System Maintenance
- User Management
- Pre-Tested Commit
TeamCity 分免费专业版授权(Professional Server License)和收费企业版授权(Enterprise Server License)。两者在功能上完全一致,只是在使用的数量上会有限制,其中,免费版授权包含20 个 build configuration 以及 3 个 build agent。可以单独购买构建代理授权( Build Agent License),含1个 build agent以及10个build configuration,费用是 299美元。企业版授权在build configuration 上是无限的,可以购买3 到 100 不等的 build agent,费用大概在1999至21999美元之间。
对于试用用户或者小团队而言,Professional Server License 足够了。
使用 TeamCity 实现 CI
下面介绍下 TeamCity 的常见用法。本例使用版本为 TeamCity Professional 10.0.4。
创建项目,关联源码
在创建一个项目(Project)后,可以将项目与相应的源码进行关联。源码管理工具支持 Git、CVS、Subversion 等。本例使用的项目是 necc_country,使用的源码管理工具为 Subversion。
在 VCS Roots 下,添加一个源码关联的地址: svn://10.30.22.18:32881/unengli/biz/gov/necc/branches/country
。
创建构建配置
构建配置(Build Configurations),是指项目构建过程中,一些列的步骤计划。比如,可以是代码质量检查、Maven 构建、发布等等步骤。
我们选择点击“Edit”按钮,在“Build Steps”中来设置一些构建计划。
1. 代码质量检查
使用 SonarQube 来进行代码质量检查。
其中,
- SonarQube Runner Parameters:是 SonarQube 的一些配置参数,包括 SonarQube 服务器的IP等。
- Sources location:项目源码的位置。
- Modules:需要检查的模块。
2. Maven 构建项目
使用 Maven 来项目的构建。可以自定义 Maven 的 Goals,比如:
clean install -Dmaven.test.skip=true
或者
clean package
等。如果是采用 TDD 的开发方式,建议不要使用-Dmaven.test.skip=true
来过滤掉测试步骤。
3. 部署项目
可以使用 FTP Upload 或者 SSH Upload 等方式将发布包发布到部署环境中。在本例,由于 CI 和部署的环境是在同一台主机上,使用 FTP Upload 即可。
其中,
- Deployment Credentials:部署主机的用户名和密码。
- Target host:是目标部署环境的位置,这里的位置是指 用户的相对路径位置,比如设置位置为
10.30.22.18:/necc_simulation/gov-tomcat-necc/webapps/gov
,使用的用户为dev
,那么,最终部署到主机的绝对路径为/home/dev/necc_simulation/gov-tomcat-necc/webapps/gov
。 - Paths to sources:待部署发布包的位置,这里
%teamcity.build.workingDir%/web/gov/target/gov
中的%teamcity.build.workingDir%
是 TeamCity 构建的工作区间。
4. 重启 Web 容器
在本例中,我们将项目部署到了 Tomcat 容器中,部署完之后,需要重启 Tomcat。这里,我们使用 SSH Exec 来执行一段重启服 Tomcat 的脚本。
其中,
- Deployment Target:Tomcat 容器所在的主机。
- Deployment Credentials:部署主机的用户名和密码。
- SSH Commands:在主机上执行的脚本。
# 切换到 Tomcat 安装目录的 bin 目录下
cd /home/dev/necc_simulation/gov-tomcat-necc/bin
# 是打印当前的工作目录
pwd
# 杀掉使用特定端口的 Tomcat 进程,即关闭当前程序
/sbin/fuser -k -n tcp 6060
# 给脚本赋予可以执行的权限
chmod 775 startup.sh
# 删除旧的日志
rm -rf ../logs/*
# 查看 Java 版本
java -version
# 启动
./startup.sh
触发构建
可以采用自动触发,或者手动触发来执行构建。
点击右上角的“Run”即可手动触发来执行构建。
在将项目与相应的源码进行关联后,默认会生成一个“VCS Trigger”,即,只要有变更提交到代码管理服务器上,就会自动触发构建。当然,也可以自行添加多种触发器。
报告
可以查看整个构建过程的情况,包括构建花费的时间等。
[11:50:33]Finalize build settings
[11:50:38]The build is removed from the queue to be prepared for the start
[11:50:38]Collecting changes in 1 VCS root
[11:50:38]Starting the build on the agent Default Agent
[11:50:38]Clearing temporary directory: /home/unengli/TeamCity/buildAgent/temp/buildTmp
[11:50:38]Publishing internal artifacts
[11:50:38]Using vcs information from agent file: a774be4779f9ea86.xml
[11:50:38]Clean build enabled: removing old files from /home/unengli/TeamCity/buildAgent/work/a774be4779f9ea86
[11:50:38]Checkout directory: /home/unengli/TeamCity/buildAgent/work/a774be4779f9ea86
[11:50:38]Updating sources: server side checkout (3m:08s)
[11:53:47]Step 1/5: maven build (Maven) (3m:33s)
[11:57:21]Step 2/5: deploy gov、ent to 18 test server (SSH Upload)
[11:57:21]Step 3/5: deploy ent to 40 (SSH Upload)
[11:57:21]Step 4/5: deploy to tomcat 7 gov (FTP Upload) (39s)
[11:58:00]Step 5/5: restart tomcat (SSH Exec)
[11:58:00]Publishing internal artifacts
[11:58:01]Build finished
参考资料
- https://www.jetbrains.com/teamcity/
- https://waylau.com/why-we-need-continuous-integration/
使用 TeamCity 实现持续集成(CI)相关推荐
- centos7下Gitlab+Jenkins部署持续集成CI环境
1.基本环境 主机:win10,IP:192.168.0.111:部署机器centos7,IP:192.168.0.65: 内存推荐到8G,实测需要6G以上,以免出现内存不够用而报错. 2.安装git ...
- ci持续集成工程师前景_不要忽视持续集成(CI)/持续交付(CD)的13个优势
原标题:不要忽视持续集成(CI)/持续交付(CD)的13个优势 持续集成(CI)/持续交付(CD)是现代软件开发周期的基础,人们需要了解持续集成(CI)/持续交付(CD)和其管道实施的所有好处. 在传 ...
- 在持续集成 (CI) 环境中使用 Android 模拟器 | AndroidDevSummit 中文字幕视频
在本次演讲中,Hoi Lam 和 Lingfeng Yang 将为大家讲解如何在持续集成 (CI) 环境中使用 Android 模拟器.包括近期发布的功能: 模拟器的 Docker 镜像,以及如何部署 ...
- 使用GitLab来实现IOS项目的持续集成CI
作为程序员,代码是一定要写的,而且要天天写.在好多地方见过这样一种说法: 只会写程序的程序员不是好程序员 当然,我不赞同这种观点,因为有的人他天生就是为程序而生的.但是掌握一些代码之外的理论知识也是一 ...
- 持续集成(CI)工具-----jenkins
1.jenkins 1.1. 什么是jenkins Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续.自动的构建/测试软件项 ...
- 持续集成(CI)简单介绍
Continuous integration,简称CI 是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的 ...
- 持续集成 ci/cd_CI / CD即服务:在云中进行持续集成和交付的10种工具
持续集成 ci/cd 云和持续集成 (CI)是天生的匹配. 尽管云使我们摆脱了安装和维护物理服务器的痛苦,但持续集成可以自动消除构建,测试和部署代码的痛苦. 如果两家公司都希望把工作从开发团队的肩膀上 ...
- Jenkins Gitee 实现持续集成CI/CD工具【免费、推荐】
文章目录 1. Jenkins & Gitee持续集成流程 2. Jenkins安装Gitee插件 3. 插件配置 4. 安装NodeJS 5. 新建构建任务 5.1 General 5.2 ...
- Gitlab+Docker实现持续集成(CI)与持续部署(CD)
作者:愤怒的小猿猿 blog.csdn.net/qq_27520051/article/details/80552220 GitLab CI/CD介绍 首先使用一张图说明GitLab CI的工作流程: ...
最新文章
- 反应机理_过敏反应的发生机理及表现
- jira 8.2.1 安装 及一些常见的坑
- 计算机软件ds,[计算机软件及应用]dsjs.ppt
- 于计算机交朋友教案,三年级上册信息技术教案-2与计算机交朋友|人教版 (2)
- 【开源项目】一个GitHub项目,囊括人脸图像要读的重要论文
- MVC中的统一验证机制~续
- python脚本运行一段时间后就停止了_CMD运行python程序自动暂停问题解决
- 来自褪墨:个人回顾与展望/2011年的回顾和对2012年的计划
- LeetCode 367. 有效的完全平方数(二分查找)
- CI 里去掉index.php 并 识别css js 文件 技巧
- knx智能照明控制系统电路图_KNX智能控制系统(20100928)解析
- java 舆情分析_基于Java实现网络舆情分析系统研究与实现.doc
- f1c100s 源码_F1C100S 简易 boot 原理
- selenium 区域截图
- 人人都是架构师?哪有那么容易
- html简单特效代码,html特效代码大全
- 2021-02-07 - GraphQL - 学习/实践
- 娄底职业技术学院计算机老师,2019年娄底职业技术学院公开招聘教师员工拟聘人员公示...
- 蛮力法 第5关:白帽子红帽子问题
- php qq远程桌面共享,新手学堂:用VNC实现远程桌面共享的方法
热门文章
- SQL Server 2005 安装后,没有Management Studio管理工具的解决办法
- 设置Discuz 7论坛游客可以查看图片,但不能下载附件.
- WinAPI: waveOutPause - 暂停播放
- javascript动态改变窗口大小
- Qomo OpenProject Field Test 1发布!
- Linux查找(find)指令的使用
- beautifulsoup 搜索第二个标签_自定义网站搜索教程
- Spring MVC拦截器实现用户登录权限验证案例
- MySQL 数据库入门
- mapview | 如何快速使用交互式地图展示空间数据信息