伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

TFS持续集成容器化讨论

来源:本站原创 浏览:103次 时间:2022-07-23

简介

容器化已经深入到了当前软件研发中的很多过程中,它使我们的开发部署更加精简与高效。这里小编想探讨一下在TFS中工具中如何通过容器化来精简我们的持续集成过程,以及相关的实现方式。




作者:薄涛

LEANSOFT咨询服务总监,认证 Scrum Master,曾为多个行业的100多家客户实施过微软Team Foundation Server,包括:中国农业银行,兴业银行,中关村银行,华为,上海通用,上海汇众,百威英博,斯伦贝谢,世纪互联,金士顿(台湾)等。


借助Docker可以帮助我们快速实现持续集成的标准化。基于TFS当前版本的生成机制,我们可以实现下面两种持续集成的容器化管理。

  1. 持续集成过程容器化:使用Docker运行应用的构建、测试与发布。

  2. 生成代理容器化:使用容器运行TFS代理,然后在容器中运行持续集成。



持续集成过程容器化



在当前的TFS生成运行机制下,小编比较推荐这种方式,因为我们可以在现有条件下最大限度的将持续过程模板化,所有的生成过程全部在Dockerfile或者Docker-compose.yaml中定义,这样依赖什么样的生成环境,构建与测试的过程可与全部由开发人员自行控制,其实也是变相的实现了Jenkins Pipeline的部分功能。这种实现方式大家可以在我们公众号之前的文章《使用TFS玩转Docker自动化部署》一文中查看详细内容。



生成代理容器化



种种方式较之上一种的唯一区别就是将代理放到容器中运行。微软官方提供了镜像https://hub.docker.com/r/microsoft/vsts-agent/ 。微软提供了很多镜像版本给我们使用,我们可以根据自己的需要可以获取不同的镜像版本运行代理。


这里举例说明镜像如何根据需求选取不同的镜像,如:ubuntu-16.04-tfs-2018-u2-docker-17.12.0-ce-standard。


ubuntu-16.04指的是基础镜像使用的是ubuntu系统的16.04版本;


tfs-2018-u2指的是此镜像适用于tfs2018 update 2,其实这里最主要的区别在于镜像中安装的TFS代理版本,你可以通过修改Dockerfile文件来配置镜像中的代理版本,下面我们会详细的讲如何自定义生成代理镜像。注意:如果标签中不包含tfs,镜像中是没有安装VSTS代理的;


docker-17.12.0-ce指的是在镜像中安装的docker版本,你可以在类似ubuntu-16.04-docker-17.12.0-ce-standard标签的Dockerfile中修改docker版本,在镜像中安装自己需要的Docker版本;


standard是用来区分基础镜像中安装的依赖的,没有standard的镜像版本中是不安装任何依赖的,需要我们自己修改Dockerfile安装需要的依赖,包含standard的镜像版本中预制安装了很多的依赖,如:基础命令行工具(curl,ftp等等),JDK,Java生成工具,Node.js等依赖,这个镜像有4GB大小。



自定义生成代理镜像



我们基于标签ubuntu-16.04-tfs-2018-u2-docker-17.12.0-ce-standard及ubuntu-16.04-docker-17.12.0-ce-standard的Dockerfile生成我们需要的镜像,首先在github上获取所有VSTS代理镜像文件,运行下面的命令:

git clone https://github.com/Microsoft/vsts-agent-docker.git


git repo中的目录组织结构和标签是对应的,我们根据标签找到ubuntu-16.04-tfs-2018-u2-docker-17.12.0-ce-standard的Dockerfile



此镜像依赖于ubuntu-16.04-docker-17.12.0-ce-standard镜像,可以在此镜像的Dockerfile中修改Docker版本,ubuntu-16.04-docker-17.12.0-ce-standard镜像依赖于ubuntu-16.04-standard镜像,可以在此镜像的Dockerfile中修改需要安装的依赖。 这里我们不修改基础依赖镜像,只修改VSTS代理版本。



修改后我们在本地使用Docker build命令生成新的docker镜像

#打开Dockerfile所在目录
cd ~/vsts-agent-docker/ubuntu/16.04/tfs/2018-u2/docker/17.12.0-ce/standard
#生成容器镜像
docker build -t vsts-agent:ubuntu-16.04-tfs-2018-u2-140-docker-17.12.0-ce-standard .


启动代理,并对代理进行配置:

docker run \
 -e TFS_URL=<tfs的服务器url> \
 -e VSTS_ACCOUNT=<TFS生成运行账户> \
 -e VSTS_TOKEN=<在 TFS | 个人设置 | 安全 中生成的Token> \
 -e VSTS_AGENT='$(hostname)-agent' \
 -e VSTS_POOL=<代理池名称> \
 -e VSTS_WORK='/var/vsts/$VSTS_AGENT' \
 -v /var/vsts:/var/vsts \
 -it vsts-agent:ubuntu-16.04-tfs-2018-u2-140-docker-17.12.0-ce-standard


运行后可以看到代理正在执行



并且在TFS中代理已经注册



但是这里大家会发现一个问题,在这个镜像中我们只能使用PAT方式注册代理,而PAT要求TFS服务器必须为HTTPS形式,但是因为很多人的TFS只部署在公司内部,因此没有配置HTTPS,那么我就需要修改agent的启动配置脚本,以支持Negotiate的方式连接TFS。


首先,在与Dockerfile同级目录中还有一个start.sh文件,我们需要修改此文件,将对VSTS TOKEN的验证注释掉:

# if [ -z "$VSTS_TOKEN_FILE" ]; then
#   if [ -z "$VSTS_TOKEN" ]; then
#     echo 1>&2 error: missing VSTS_TOKEN environment variable
#     exit 1
#   fi
#   VSTS_TOKEN_FILE=/vsts/.token
#   echo -n $VSTS_TOKEN > "$VSTS_TOKEN_FILE"
# fi
# unset VSTS_TOKEN

 

然后修改代理启动配置

./bin/Agent.Listener configure --unattended \
--agent "${VSTS_AGENT:-$(hostname)}" \
--url "$TFS_URL" \
--auth Negotiate \
--username "$VSTS_User" \
--password "$VSTS_PWD" \
--pool "${VSTS_POOL:-Default}" \
--work "${VSTS_WORK:-_work}" \
--replace & wait $!

 

启动代理,并对代理进行配置:

docker run \
 -e TFS_URL=<tfs的服务器url> \
 -e VSTS_User=<TFS生成运行账户> \ 
 -e VSTS_PWD=<TFS生成运行账户密码> \
 -e VSTS_AGENT='$(hostname)-agent' \
 -e VSTS_POOL=<代理池名称> \
 -e VSTS_WORK='/var/vsts/$VSTS_AGENT' \
 -v /var/vsts:/var/vsts \
 -it vsts-agent:ubuntu-16.04-tfs-2018-u2-140-docker-17.12.0-ce-standard-nego


注意:输入VSTS_User参数时不要加入域名,比如你的TFS账户为domain\botao,这里只写botao就好了,要不然会报授权的错误。



小结


 

当选用容器化生成代理进行管理时,由于容器自身的特性会导致当容器销毁后TFS的代理记录不会自动删除的问题,这个需要我们手动处理,或者自己写批处理脚本根据容器的健康状况维护代理。当然我们也希望在不久的将来TFS可以实现当有生成请求时,自动激活并配置代理,并且在代理上的生成执行完毕后自动注销代理,这样我们就可以直接将代理容器托管到容器编排平台,进一步提高生成环境资源的利用率并减少对代理的维护操作。


END


微软DevOps技术社区持续招募中



自从上周我们发出了社区拉人通告以后,已经有大批的小伙伴加入了我们的社区讨论群,一度让我们的社区小助手应接不暇;我们的社区仍然继续招募中,希望加入的小伙伴可以扫描下面的【DevOps社区运营助手】二维码添加好友并申请入群



leansoftX.com持续招募DevOps工程师


公元164-182年间,汝南平舆的许氏兄弟于每月初一品评人物,褒贬时政,被称

为“月旦评”。所谓“子治世之能臣,乱世之奸雄也”这句许邵评价曹操的话也是来自于“月旦评”;时间一下子来到了2018年,LEANSOFT DevOps招贤令再次发出,望纳天下贤士,共襄DevOps大业。


本次招聘坐标北京,对象为 DevOps实施工程师:


  • 熟练掌握以下开发语言之一 C#, HTML/CSS, JavaScript, PowerShell, T-SQL

  • 熟练使用至少一个IDE(多了不限),Visual Studio, Eclipse, IntellJ etc.

  • 熟练使用微软 VSTS/TFS 系统者优先聘用

  • 熟悉敏捷开发,Scrum/Kanban并具备相关认证者优先聘用

  • 善于沟通,勇于探索,能够承受压力



对的,没有工作经验要求,没有学历要求。只要你能通过我们的面试流程,这些都不重要。期待与你一起工作。


希望申请的小伙伴,请关注DevOps公众号,直接留言即可。



  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net