持续集成之配置TeamCity

  离开上个东家差不多有一年半的时间了,这一年半更多的还是在学习,或者说更多的是在收拾前辈们写的代码,其中的酸甜苦辣只有经历过的人才知道,想想还是上个东家好,软件研发的流程很规范,各种配套的工具都是现成的,有专门的配置管理团队维护,现在的东家呢,我来公司之前公司的代码是没有纳入版本管理的,老板应该也没用过这东东,大家都是统一将代码放到一样的路径下,隔段时间交流下最新代码,这样的生产效率在人不多情况下还行,但是还是很不方便,在这历史性的关键时刻,本人就充当了配置管理员,建立我们现在使用的版本库(大家都觉得好用)。再往后老板不怎么写代码了,但是经常会让我给他出个最新的包,或者给别人一个最新的包,每次呢我就吭哧吭哧的先备份下我手头的代码然后恢复到库中的最新代码,进行长达半个小时的编译,编译还经常遇到问题,比如同事忘了提交某个新增的文件,整个过程特别痛苦。最后我痛定思痛,决定引入持续集成,不扯皮了,咱们进入正题。

  一.什么是持续集成(Continuous Integration)

  持续集成(CI)是当前流行的敏捷开发的基石。简单来说,持续集成是频繁、持续的在多个团队成员的工作中进行集成,并且给与反馈。一个典型的持续集成周期包括以下几个步骤:

  1. 持续集成服务器不断从版本控制服务器上检查代码状态,看代码是否有更新。
  2. 如果发现代码有最新的提交,那么就从版本控制服务器下载最新的代码。
  3. 等代码完全更新以后,调用自动化编译脚本,进行代码编译。
  4. 运行所有的自动化测试。
  5. 进行代码分析。
  6. 产生可执行的软件,能够提供给测试人员进行测试。

  通过这样一个周期,基本可以能够保证每天服务器上都有一个最新的版本,如果测试团队做的好的话还能及时发现存在的问题,反馈给开发人员。站在现在我用的角度,它能帮助我解决编译问题、实现成果分发自动化。

  二.Teamcity

  可选的持续集成工具比较多,TeamCity是我上个东家用的,所以我首选它,毕竟它也是一个商业软件,稳定性、易用性、功能应该都能满足要求从网上下载相应的安装包。Teamcity的安装挺简单的,只需要简单的点击下一步即可,这里需要注意的是服务端运行时所选择的用户账户,默认选SYSTEM用户,这个选择会影响到以后编译相关的环境

  Teamcity的配置

  这里说的配置主要是CI服务器的设置,也就是配置一个Project,这里面涉及到很多的概念,比如什么是一个Build,什么是一个BuildStep,这些在其英文帮助文档中有很详细的说明,大家可以参照具体的帮助文档进行理解,整个配置过程还是比较简单的,这个过程要利用好它提供的BuildParam,变量尽量用BuildParam进行定义,而不要直接写死,这样在以后维护起来会比较方便。

  遇到的问题

  在编译我们公司的产品时,会莫名奇妙的产生找不到输出路径的情况,后来发现原来我们工程在配置输出目录时使用了VS的自定义宏,这个自定义宏是针对具体的用户的,在用户文档里有,而TeamCity在调用MSBuild进行编译时,没有找到这个用户宏,也就导致了相应的编译错误。

  解决办法

  从服务中找到Teamcity的服务程序,双击服务项,在弹出的对话框中找到登录选项,选择相应的登录账户来启动Teamcity服务,这样在调用MsBuild时就能够找到这个用户宏

转载于:https://www.cnblogs.com/zzugis/p/3444560.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 上传文件编码_(java)有什么办法把MultipartFile上传的文件转为utf-8的编码吗

[Java] 纯文本查看 复制代码import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import org.apache.tika.Tika;import org.apache.tika.detect.AutoDetectReader;import org.apache.tika.exception.TikaExc…

Android之的性能优化方法

1、布局优化: 原理:尽量减少布局的文件的层级,层级越少,Android绘制时的工作量少了,程序性能提高 1、删除无用的控件和层级,选择使用性能较低的ViewGroup,比如RelativeLayout 2、如果布局在有LinearLayout和RelativeLayout,建议使用LinearLayout,RelativeLayout功能…

Set函数、Get函数、点语法和类方法

1.Set函数 setter函数,对成员变量赋值。Set函数的一般写法以对age操作为例,写法为: -(void)setAge:(int)newage。 2. Get函数 getter函数,对成员变量取值。Get函数的一般写法也以对age的操作为例,写法为: -…

弹出框css技巧

2019独角兽企业重金招聘Python工程师标准>>> 技术要点&#xff1a; 一个覆盖整个屏幕的浅灰色背景的div,一个包含内容的的div, 代码如下&#xff1a; <div id"financeTip" style""><div class"financeTipBg" style"&qu…

在业务层实现校验请求参数

前言在前面的文章中&#xff0c;我们介绍了在业务层实现管道模式&#xff1a;响应缓存记录请求日志今天&#xff0c;我们同样使用IPipelineBehavior&#xff0c;介绍如何在业务层实现校验请求参数&#xff0c;用于检查输入是否满足业务要求。Demo首先&#xff0c;创建ASP.NET C…

Leetcode: Valid Parentheses

与 POJ 上那道括号匹配相比, 这道可谓简单 思路: 堆栈存储符号, 遇到匹配弹出 代码: #include <iostream> #include <stack> using namespace std;class Solution { public:bool isValid(string s) {stack<char> record;for(int i 0; i < s.size(); i ) …

Android之Bitmap的内存优化方案总结

在Android应用里&#xff0c;最耗费内存的就是图片资源。而且在Android系统中&#xff0c;读取位图Bitmap时&#xff0c;分给虚拟机中的图片的堆栈大小只有8M&#xff0c;如果超出了&#xff0c;就会出现OutOfMemory异常。所以&#xff0c;对于图片的内存优化&#xff0c;是And…

静电可以有多好玩?

1 静电可以有多好玩&#xff1f;孩子&#xff1a;知道我怎么秃的了吧2 这就是爱情啊3 今年最佳cos4 别人家的狗能当桌子▼你家的狗……&#xff08;主银&#xff0c;我就这样静静的看着你&#xff09;▼5 含羞草6 可以让我骑一下你吗7 总之&#xff0c;离我远点你点的每个赞&am…

+操作符重载(2)

2019独角兽企业重金招聘Python工程师标准>>> #include <iostream> class C_A { public: int Cn; }; struct S_A { public: int Sn; }; enum E_A { En 12 }; C_A operator(int n,C_A cVar) { cVar.Cn n; return cVar; …

WPF 四种不同效果呼吸灯

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织由于微信群人数太多入群请添加小编微信号&#xff08;yanjinhuawechat&#xff09;或&#xff08;W_Feng_aiQ&#xff09;邀请入群&#xff08;需备注WPF开发者&#xff09;PS&#xff1a;有更好的…

用GCD线程组与GCD信号量将异步线程转换为同步线程

用GCD线程组与GCD信号量将异步线程转换为同步线程 有时候我们会碰到这样子的一种情形: 同时获取两个网络请求的数据,但是网络请求是异步的,我们需要获取到两个网络请求的数据之后才能够进行下一步的操作,这个时候,就是线程组与信号量的用武之地了. 线程组用以监听线程的执行情况…

Android之自定义属性,format详解

1. reference&#xff1a;参考某一资源ID。&#xff08;1&#xff09;属性定义&#xff1a;<declare-styleable name "名称"><attr name "background" format "reference" /></declare-styleable>&#xff08;2&#xff09…

基于visual Studio2013解决C语言竞赛题之0710排序函数

&#xfeff;&#xfeff;题目解决代码及点评/* 10、用指向指针的指针的方法对N个整数排序并输出。 要求排序单独写成一个函数。N个整数和N在主程序中输入&#xff0c;最后在主函数中输出。 */ #include <stdio.h> #include <stdlib.h> #define N 10 void main() {…

清华本科生0人去阿里,交叉信息院硕士没人再深造 | 清华大学2020年毕业生就业质量报告...

全世界只有3.14 % 的人关注了爆炸吧知识转自&#xff1a;量子位作者&#xff1a;金磊 杨净这几天&#xff0c;《清华大学2020年毕业生就业质量报告》火了。于是&#xff0c;我们也下载下来“拜读”了一下。就业率、毕业去向、就业地域等等信息看下来&#xff0c;也还算是情理之…

一句命令行检查cpu个数

wmic cpu get NumberOfCores, NumberOfLogicalProcessors

java利用模板发送邮件_使用JavaMail实现发送模板邮件以及保存到发件箱

需要用到的jar包1.freemarker-2.3.19.jar2.javax.mail.jar3.javax.activation.jar本次测试邮箱是腾讯企业邮箱&#xff0c;其他未经测试。做这个功能是因为我女朋友每个月都需要手动去发几十个人的考勤、考核邮件&#xff0c;实在是太过重复的做一件很乏味的事情&#xff0c;所…

C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥

“ 引言部分&#xff0c;总领全篇文章的中心内容。”01—IResult and Coroutines在前面&#xff0c;我提到了Actions概念的另一个引人注目的特性&#xff0c;称为协同程序。如果你以前没听说过这个词&#xff0c;下面是维基百科要说的&#xff1a;在计算机科学中&#xff0c;协…

游戏服务器注意事项

1&#xff1a;IO操作是最大的性能消耗点&#xff0c;注意优化余地很大。2&#xff1a;算法数据结构。排序寻路算法的优化。list,vector,hashmap的选择。大数据寻址&#xff0c;不要考虑遍历&#xff0c;注意考虑hash.3&#xff1a;内存管理。重载new/delete&#xff0c;内存池&…

Android之TypedArray 为什么需要调用recycle()

转自&#xff1a;http://blog.csdn.net/Monicabg/article/details/45014327 在 Android 自定义 View 的时候&#xff0c;需要使用 TypedArray 来获取 XML layout 中的属性值&#xff0c;使用完之后&#xff0c;需要调用 recyle() 方法将 TypedArray 回收。 那么问题来了&#x…

APP开发者到期续费说明

几步搞明白APP开发者续费&#xff0c;不再苦恼。1、APP开发者账号快满一年时&#xff0c;注册邮箱会收到一封提醒续费的邮件。主题类似5 days left to renew your iOS Developer Program membership.。 2、点击该邮件中的renew today 按钮&#xff0c;根据提示一路点到底。 3、…