在Linux下使用TFS自动构建,需要自动执行连接tfs服务器的操作,命令行文件包TEE-CLC-10.1.0.2011121402.zip,下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=25125

下文是定制TFS的工作流程的方法进行定制

How to Build Linux Code with TFS 2010 Team Build

http://www.richard-banks.org/2010/11/how-to-build-linux-code-with-tfs-2010.html

如上的这个有些麻烦,本文描述的是简单的手工脚本方法

CDT工程的组织[projs.sh]

由于EclipseCDT工程的make文件需要手工的生成,因此项目变化时,需要人工的辅助,处理的方法是:每次项目变化时,重新生成一遍项目文件,并提交到构建服务器上;构建服务器每次获取这些最新的项目make文件进行覆盖[CDT如果可以自动产生make文件这个过程就比较简单了]

详细的脚本内容如下:

#!/bin/bash

#需要管理的项目列表

PROJS=(A/A1

#

A/A1Test

#

B/B1

B/B2)

#Eclipse CDT 项目文件

FILES=(makefile *.mk)

#

MODES=(Release_64 Debug_64)

case "$1" in

create)

if [ $# = 2 ] ; then

OLDDIR=$2

else

#默认的Eclipse CDT工作路径

OLDDIR=/media/work/Branch

fi

BASEDIR=$(echo $PWD  | sed 's/\//\\\//g')

OLDDIR=$(echo $OLDDIR | sed 's/\//\\\//g')

let n=0

for prj in ${PROJS[@]}

do

echo $prj

for mode in ${MODES[@]}

do

tar xvf build/prjs/${n}.tar

pushd $prj

find -type f -name "makefile" | xargs sed -i "s/$OLDDIR/$BASEDIR/g"

find -type f -name "*.mk" | xargs sed -i "s/$OLDDIR/$BASEDIR/g"

popd

let n++

done;

done;

;;

#默认建立项目文件【处理Eclipse生成项目文件的问题,脚本如何自动生成未找到办法】

*)

echo "Create Projects Makefile[开发人员变更自己的项目时,运行一次该脚本,然后把build/prjs下的相关文件签入]"

mkdir -p build/prjs

rm -f build/prjs/*

let n=0

for prj in ${PROJS[@]}

do

echo $prj

for mode in ${MODES[@]}

do

let i=0

for file in ${FILES[@]}

do

if [[ $i -eq 0 ]]; then

tar cf build/prjs/${n}.tar ${prj}/${mode}/${file}

else

tar rf build/prjs/${n}.tar ${prj}/${mode}/${file}

fi

let i++

done;

let n++

done;

done;

echo "projects are all ready!"

;;

esac

构建脚本[build.sh]

构建脚本基本流程是:获取最新代码;准备相关的环境;编译;单元测试和检查;等等

具体的参考脚本如下:

#!/bin/bash

##常量定义

BASE_DIRECTORY=`pwd`

tfc=build/tfc/tf

#$tfc eula

tf='build/tfc/tf -login:tfs\\user,password -server:http://192.168.0.1:8080/tfs/DefaultCollection'

PROJ=$/Branch

LOCALPROJ=$BASE_DIRECTORY

##共享函数

function checkFail()

{

if [ $? -ne 0 ];

then

echo -e "\e[1;41m $1 Contiue Integrate [CI] fail! \e[0m"

exit 1

fi

}

#0

chmod +x $tfc

echo "Work Dir:: $LOCALPROJ"

#1 检查工作区映射

$tfc workspaces|grep 'No local workspaces found.'

if [ $? -eq 0 ]; then

echo 'Setting Workspace...'

$tf workspaces -remove:WORK

$tf workspace -delete WORK

$tf workspace -new WORK

$tf workfold -map -workspace:WORK $PROJ $LOCALPROJ

echo 'Setting Workspace done.'

else

$tf workspaces

fi

#2 information

echo

echo 'Current Project Items'

$tf dir $PROJ

echo 'Ready to Build...'

#3 Get Sources and prepare

echo 'Get latest Source Files..'

$tf get -recursive

#依赖的Trunck目录的内容手动获取吧

echo 'Get latest Source Files Done.'

#构建脚本更新后仍可执行

chmod +x $tfc

echo 'Prepare to build'

find -type f -name "*.sh" | xargs chmod +x

#生成的代码自动处理

./ready.sh

#C++的项目文件准备

./projs.sh create

#4 编译和单元测试

echo 'compile and unit test'

pushd install

echo "compile..."

./compile.sh

checkFail

echo "compile done."

echo "unit tests..."

./test.sh

checkFail

echo "unit tests done."

popd

echo "Greate, this update is good!"

其中的compile.sh,test.sh这些脚本是组织所有工程的编译和单元测试的脚本,主要类似有:

make clean

make all

./BTest --gtest_filter=-bench*

pushd ../###

/usr/local/ant/bin/ant junit

checkFail

popd

构建自动调度脚本[build_cron.sh]

由于没有使用TFS标准的构建工作流,具体的调度需要自己编写,本例采用每天的下午16点自动构建,并生成相关的日志,如果需要TFS的默认的高级功能,可以参考上文的参考资料进行设置和定义。

#!/bin/bash

#CI 构建服务调度

:<<EOF

加入/etc/crontab进行自动调度

#csbit cron system wide

# m h dom mon dow user command

*  16 * * * root /root/build/build_cron.sh /root/build/ /root/ci&

#/mnt/hgfs/build对应HOST机器的共享目录,自动构建结果目录/root/ci

ln -s  /mnt/hgfs/build /root/ci

EOF

TAG=$(date +%Y-%m-%d_%H-%M-%S)

echo "Build time tag: $TAG"

if [ $# -ge 1 ] ; then

#项目路径

PRJDIR=$1

#CI发布的路径[挂载共享的目录,小组都可以看到结果:发布过程结果和发布文件]

if [ $# = 2 ] ; then

CIDIR=$2

else

CIDIR=/root/ci

fi

else

PRJDIR=/root/build

CIDIR=/root/ci

fi

echo "Project Dir: [$PRJDIR] CI Dir:[$CIDIR]"

sudo mkdir -p $CIDIR

if [ -d $CIDIR ]; then

#手动的文件更新拷贝

echo "Copy manual files..."

if [ -d $CIDIR/sql ]; then

echo "Copy sql files"

cp -r -f $CIDIR/sql $PRJDIR/install

fi

echo "Copy manual files done"

fi

export LANG=zh_CN.UTF-8

pushd $PRJDIR

chmod +x build.sh

sudo ./build.sh &> $CIDIR/$TAG.txt

if [ $? -ne 0 ];

then

echo -e "\e[1;41m $1 Contiue Integrate [CI] fail! \e[0m"

exit 1

fi

popd

echo "copy package to deploy directory"

echo "CI all done"

#构建结果放入install目录

rm -r -f $CIDIR/install

mkdir -p $CIDIR/install

cp -f -r $PRJDIR/install $CIDIR

#不需要发布出去的文件排除

rm -f $CIDIR/install/compile.sh

echo "Ci schedlue done."

Linux下EclipseCDT工程和TFS的持续集成CI实践的更多相关文章

  1. Jenkins+Gitlab搭建持续集成(CI)环境

    利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...

  2. fir.im 持续集成技术实践

    互联网时代,人人都在追求产品的快速响应.快速迭代和快速验证.不论是创业团队还是大中型企业,都在探索属于自己的敏捷开发.持续交付之道.fir.im 团队也在全面实施敏捷,并推出新持续集成服务 - flo ...

  3. fir.im weekly - 「 持续集成 」实践教程合集

    我们常看到许多团队和开发者分享他们的持续集成实践经验,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等项目搭建持续集成的实践,以及一些国内外公司的内部持续集 ...

  4. Gitlab+Gitlab-CI+Docker实现持续集成(CI)与持续部署(CD)

    写在前面 记录一下,一个自动化开发部署项目的构建过程与简单使用,实现真正的DevOps gitlab安装 步骤一:安装依赖 yum -y install git gcc glibc-static te ...

  5. 【OF框架】在Azure DevOps中配置项目持续集成CI服务,推送镜像到Azure容器注册表

    准备工作 开通Azure账号,具有开通服务权限,关键是里面要有钱. 开通Azure DevOps,能够创建组织和项目. 具备一定的DevOps知识,了解CICD概念.Docker基本操作. 一.创建& ...

  6. Apache DolphinScheduler 的持续集成方向实践

    今天给大家带来的分享是基于 Apache DolphinScheduler 的持续集成方向实践,分享的内容主要为以下六点: " 研发效能 DolphinScheduler CI/CD 应用案 ...

  7. 【Qt开发】Linux下Qt开发环境的安装与集成

    近期工作需要在Linux下用Qt进行C++开发,所以就在linux下尝试装QT开发环境.本人用的linux是CentOS 6.5.现在对安装过程做出总结.有两种安装方式,下面分别详述: 1 图形化安装 ...

  8. Linux下环境搭建(四)——jenkins+gitlab+jmeter实践

    经过前三篇博文的介绍,jenkins+gitlab+jmeter接口自动化的框架就搭建成功了,详细可见 Linux下环境搭建(一)——java.tomcat配置 Linux下环境搭建(二)——jenk ...

  9. 视频云SDK iOS持续集成项目实践

    1. 前言 2016年, 我们维护的 iOS推流播放融合SDK KSYLive_iOS 在github上发布了40多个版本, 平均两周发布一个新版本, 经历了最初痛苦的全手动版本构建和维护, 到后来慢 ...

随机推荐

  1. CSS Vocabulary – CSS 词汇表,你都掌握了吗?

    CSS 是前端开发必备技能,入门容易,深入难.比如像 Pseudo-class.Pseudo-element.Media query.Media type 以及 Vendor prefix 的概念,很 ...

  2. Shiro —— 从一个简单的例子开始

    一.Shiro是用来做权限的. 二.权限 1.基本概念: (1)安全实体:要保护的数据. (2)权限:是否有能力去操作(查看.修改.删除 )保护的数据. 2.权限的两个特性 (1)权限的继承性:A 包 ...

  3. .Net语言 APP开发平台——Smobiler学习日志:用Gridview控件设计较复杂的表单

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ...

  4. Web API接口设计经验总结

    在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...

  5. java实现可有括号的android计算器

    写了一个android版的计算器,可以计算带括号的表达式,不过前提是:正确的表达式才行 小缺陷是没有做表达式括号的控制,现在还没有想到好的控制方式 package javaAdvanced; impo ...

  6. DSOFramerControl简单使用

    以前大学做项目(Web的毕业论系统)就看见过在网页中嵌入Office的word,那时候用了哪个控件当时没记下来,我倒是忘了,最近发现在WinForm要嵌入Office的话,可以使用DSOFramerC ...

  7. C# ACCESS数据库操作类

    这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的调用可以参考MSSQL那个类的调用,差不多的,只是提取所有记录的数量的时候有多一个参数,这个需要注意一下! usi ...

  8. 一个故事讲清楚NIO

    转载请引用:一个故事讲清楚NIO 假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) ...

  9. Using Stored Programs with MySQLdb

    http://flylib.com/books/en/1.142.1.125/1/ Using Stored Programs with MySQLdb The techniques for call ...

  10. C#生成随机验证码

    使用YZMHelper帮助类即可 using System; using System.Web; using System.Drawing; using System.Security.Cryptog ...