Linux下EclipseCDT工程和TFS的持续集成CI实践

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

在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."

相关文章
|
18天前
|
人工智能 自然语言处理 安全
代码静态扫描工具集成与实践
代码静态扫描工具(Static Application Security Testing, SAST)是在不运行代码的情况下,通过分析源代码或二进制代码来发现潜在安全漏洞、代码缺陷和质量问题的工具
132 4
|
18天前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
62 6
|
18天前
|
安全 JavaScript 前端开发
安全漏洞检测集成及实践:SAST/DAST工具集成指南
通过合理集成和配置SAST/DAST工具,可以显著提升应用程序的安全性,并在开发早期发现和修复漏洞,降低安全风险和维护成本
82 4
|
1月前
|
机器学习/深度学习 边缘计算 数据可视化
MyEMS 深度解析:碳管理赋能与系统集成的实践路径
MyEMS 是一款集碳管理与能源优化于一体的开源系统,具备多标准碳核算、碳足迹可视化、碳成本分析等功能,助力企业实现精准碳减排。系统支持与工业、建筑、政务平台等多系统集成,打破数据孤岛,提升能效。依托活跃的开源社区与丰富实践案例,MyEMS 持续迭代,推动绿色转型。
72 1
|
2月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
443 1
|
2月前
|
供应链 监控 搜索推荐
35页PPT|零售行业自助数据分析方法论:指标体系构建平台集成、会员与商品精细化运营实践
在零售行业环境剧变的背景下,传统“人找货”模式正被“货找人”取代。消费者需求日益个性化,购买路径多元化,企业亟需构建统一的指标体系,借助BI平台实现数据驱动的精细化运营。本文从指标体系构建、平台集成到会员与商品运营实践,系统梳理零售经营分析的方法论,助力企业实现敏捷决策与业务闭环。
35页PPT|零售行业自助数据分析方法论:指标体系构建平台集成、会员与商品精细化运营实践
|
3月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
113 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
4月前
|
机器学习/深度学习 数据采集 存储
朴素贝叶斯处理混合数据类型,基于投票与堆叠集成的系统化方法理论基础与实践应用
本文探讨了朴素贝叶斯算法在处理混合数据类型中的应用,通过投票和堆叠集成方法构建分类框架。实验基于电信客户流失数据集,验证了该方法的有效性。文章详细分析了算法的数学理论基础、条件独立性假设及参数估计方法,并针对二元、类别、多项式和高斯分布特征设计专门化流水线。实验结果表明,集成学习显著提升了分类性能,但也存在特征分类自动化程度低和计算开销大的局限性。作者还探讨了特征工程、深度学习等替代方案,为未来研究提供了方向。(239字)
160 5
朴素贝叶斯处理混合数据类型,基于投票与堆叠集成的系统化方法理论基础与实践应用
|
5月前
|
JSON 前端开发 算法
掌握Multi-Agent实践(三):ReAct Agent集成Bing和Google搜索功能,采用推理与执行交替策略,增强处理复杂任务能力
掌握Multi-Agent实践(三):ReAct Agent集成Bing和Google搜索功能,采用推理与执行交替策略,增强处理复杂任务能力
306 23
|
7月前
|
SQL 弹性计算 DataWorks
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
288 6

热门文章

最新文章