基于容器的持续交付管道

基于容器的持续交付管道

在过去的几篇d4d系列中,我给大家介绍了如何使用docker来支持asp.net core的应用开发,打包的场景。Asp.net core的跨平台开发能力为.net开发人员提供了使用容器进行应用开发的能力,今天这篇文章将对如何使用微软的全生命周期管理平台VSTS/TFS来构建基于容器的CI/CD管道来支持团队开发的场景。

#1 前世今生 & 世界你好
#2 容器化主机
#3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
#4 使用Azure云存储构建高速 Docker registry

Visual Studio Team Services/Team Foundation Server

VSTS/TFS是微软Visual Studio产品组提供给广大开发者的全生命周期管理平台,Visual Studio Team Service (VSTS)是构建在微软公有云Azure平台上的Saas架构的开发平台,为中小团队和跨地域的大型团队提供软件开发过程的端到端管理能力,这个平台对于5名以下开发团队的小团队完全免费(同时可以有任意数量的管理人员参与,VSTS通过区分stakeholder和developer两种角色,为stakeholder这些只需要管理过程而无需修改代码的管理人员提供了完全免费的访问许可)。Team Foundation Server是VSTS的企业版,可以由企业独立部署于私有云或者数据中心中,并提供与VSTS一致的功能体验。

关于VSTS和TFS的功能介绍,请参考本博客或者公众号中的相关文章,链接如下:

http://devopshub.cn/tag/vsts/

基于容器的CI/CD

容器技术所解决的主要问题是环境的一致性和同一版本的应用在不同的环境中的迁移问题,虽然对单个开发人员也提供了更高效的开发模式,但容器的作用在团队开发中和管理开发/测试/预生产/生产环境中会体现得更有价值。从事软件开发的技术人员都知道,在开发过程中保持不同开发人员/测试人员使用统一的环境是一件非常困难的事情,很多过程中的问题都是环境不一致造成的。容器正是解决这一问题的有效方式。

为了能够构建基于容器的CI/CD,我们需要以下工具链:

下图展示了以上工具链的关系和工作流程

下图中可以看到,要构建完整的发布工具,我们需要一个多级技术栈,Docker的容器化工具降低了最底层环境和应用技术栈的复杂度,让我们的发布过程变得更简单。

下面我们就来看一下如何配置这样一套基于容器的CI/CD环境

1. 创建容器化主机作为开发/测试/生产环境

关于如何在开发环境中创建容器化主机支持编码和调试,请参考

#1 前世今生 & 世界你好

关于如何在云环境中创建容器化主机支持测试和生产环境,请参考

#2 容器化主机

2. 在Linux服务器上配置TFS构建代理

关于如何配置Linux服务器上的构建代理,请参考

用VSTS/TFS搭建iOS持续集成环境

3. 将容器化主机连接到TFS

进入TFS后台,点击 服务 | 新建服务终结点 |Dcoker Host

将 容器化主机的 url,和~/.docker/machine/machines/{machine-name} 目录下的pem的文件内容按照以下关系拷贝到配置页面中。

重复以上过程,分别绑定用户测试和生产环境的容器化主机配置,创建以下docker host终结点

○ Dockerhost-test
○ Dockerhost-pro

4. 将docker hub账号连接到TFS

进入TFS后台,点击 服务 | 新建服务终结点 | Docker Registry

填写你的docker hub用户名,密码和邮件地址;如果使用私有的registry,请更新Docker Regsitry地址。

5. 配置CI定义

创建生成定义,并将默认代理队列指向对应在Linux服务器上构建代理队列

在 生成 步骤中分别添加以下构建任务

具体为
a. dotnet restore
b. dotnet build
c. dotnet publish
d. docker build
e. docker push

以下为docker build步骤的详细配置,注意这里我们使用$(Build.BuildNumber)这个环境变量作为容器镜像的tag,这样我们就可以使用统一的构建号来管理容器镜像的不同版本。

以下是docker push的详细配置,此步骤将把构建好的容器上传到docker hub并使用$(Build.BuildNumber)作为版本号tag。

6. 创建CD发布管道

创建以下发布管道配置,分别指定测试环境和生产创建的部署步骤

在每一个环境中,我们都执行以下步骤
○ Stop running container
○ Remove container
○ Run container

测试环境和生产环境分别使用不同的容器化主机连接(在第1-2步中创建的连接)。

7. 配置测试环境到生产环境的升级策略

以下配置要求生产环境的部署只有在测试环境部署成功的情况下才能执行

以下配置要求生产环境的部署必须由特定的用户进行审批通过后才能执行

至此,我们就完成了基于容器的CI/CD发布管道配置。



请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

?

时间: 2024-12-21 05:10:23

基于容器的持续交付管道的相关文章

docker4dotnet #5 使用VSTS/TFS搭建基于容器的持续交付管道

在过去的几篇d4d系列中,我给大家介绍了如何使用docker来支持asp.net core的应用开发,打包的场景.Asp.net core的跨平台开发能力为.net开发人员提供了使用容器进行应用开发的能力,今天这篇文章将对如何使用微软的全生命周期管理平台VSTS/TFS来构建基于容器的CI/CD管道来支持团队开发的场景. #1 前世今生 & 世界你好#2 容器化主机#3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用#4 使用Az

基于Jenkins的持续交付全流程设计与实践

1 从理论开始 什么是DevOps? 近年来,随着DevOps理念的逐渐深入人心,企业逐渐意识到从看似重复的手工劳动中实现自动化流程处理,对于提高企业劳动生产力已经非常重要,尤其是面向互联网的开发者,往往每次上线时,最大的挑战并非需求的走查或测试和改bug,而是由于发布的流程不够规范,将成果发布到目标环境后可能造成的配置错误或引发其他已知未知问题所造成的额外工作量,使得生产环境的发布流程总会存在不顺利. 而DevOps则致力于统一整合软件开发和软件运维,其特点是强烈倡导对构建软件的所有环节(从集

如何打造7*24h持续交付通道?阿里高级技术专家的5点思考

云效鼓励师导读:打造7*24小时的持续交付通道是很多技术团队梦寐以求的事情,那么如何才能实现呢?阿里高级技术专家施翔带来了他的思考. 此外,文末我们还为大家首次推出了阿里敏捷教练团队倾心打造的提升研发效能36计课程之"看板+站会"相关内容课程,欢迎报名. 我们对于研发效能的讨论,本质上是提高整个技术生态中的协同效率.如果仅从研发角度出发,技术团队要实现的终极目标是7*24小时的灵活发布窗口,以及更快的业务迭代能力. 7*24小时发布窗口的实现其实并不简单,受限于很多因素.我简单的进行了

七牛云宫静:基于容器和大数据平台的持续交付平台

7 月 6 日上午,在 ArchSummit 2018 深圳站 | 全球架构师峰会上,七牛云工程效率部技术专家宫静分享了<基于容器和大数据平台的持续交付平台>为题的演讲.本文是对演讲内容的整理.? ? 本次分享的主要内容是基于容器和大数据平台去构建的持续交付系统,是七牛云工程效率部在持续交付.容器化方面去做的技术实践.将从以下两个方向展开:一个是容器化方向,一个是持续交付的平台.主要会结合在七牛云的实践来介绍这个持续集成.持续部署在容器化方向的探索和思考,以及未来方向的考虑.? 01 业务场景

云端基于Docker的微服务与持续交付实践

云端基于Docker的微服务与持续交付实践笔记,是基于易立老师在阿里巴巴首届在线技术峰会上<云端基于Docker的微服务与持续交付实践>总结而出的. 本次主要讲了什么? Docker Swarm Docker Swarm mode 微服务支持(Docker集群架构体系) Docker的发展趋势和前沿成果 在Docker技术方面还是很佩服大牛的,所以赶紧写下笔记,追随大神的脚步. 阿里云资深专家易立,技术就不说了,他比其他直播间硬生生多讲了半个多点,于情于理还是万分感谢本次分享的(可惜devOp

Docker学习总结(7)——云端基于Docker的微服务与持续交付实践

本文根据[2016 全球运维大会?深圳站]现场演讲嘉宾分享内容整理而成 讲师简介 易立 毕业于北京大学,获得学士学位和硕士学位:目前负责阿里云容器技术相关的产品的研发工作. 加入阿里之前,曾在IBM中国开发中心工作14年,担任资深技术专员,负责IBM企业平台云产品线PureApplication System的研发工作:还负责和参与了一系列IBM在Web 2.0,SOA中间件的研发和创新,也曾为全球客户提供SOA技术咨询和项目实施. 日程 大家好,我演讲的主题是<云端基于Docker的微服务与持

基于Jenkins,docker实现自动化部署(持续交付)

前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此,传统的人工部署已经心有余而力不足.持续集成,持续部署,持续交互对于微服务开发来说,是提高团队整体效率不可或缺的一环.合理的使用CI,CD能够极大的提高了生产效率,也提高了产品的交互质量.本文不对三个概念做过多的介绍,有兴趣可以读读这篇文章:The Product Managers' Guide to

容器时代的持续交付工具---Drone:Drone介绍与安装

Drone:Drone is a Container-Native, Continuous Delivery Platform. 官方给的定义,从上面的定义可以得出两个关键点: 1,Container-Native:Cloud-Native是云原生,那Container-Native可以翻译成容器原生,就是说Drone是容器时代的一个产品,是基于容器实现的. 2, Continuous Delivery:持续交付,容器是现在快速交付的一个代名词,而Drone是容器化的一种持续交付的平台,其实Dr

[持续交付实践] 基于 sonarqube 的代码检查平台实现

前言 公司此前用的一直是的SonarQube5.1(2015年版本,为兼容jdk6和jdk7的项目一直没有升级),最近为了pipeline的集成刚刚升级到了最新的SonarQube6.5版本.网上对SonarQube6的介绍比较少,这里重点先介绍下SonarQube6以后的一些新增特性.1.代码问题重新分级,将问题分为bug.漏洞.坏味道:将代码检查结果从可靠性.安全性.可维护性几个角度进行问题分类和风险分级.2.更丰富的代码检查规则,更友好的问题处理曲线展示,更清晰的质量阈和代码规则定制.3.