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 使用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的功能介绍,请参考本博客或者公众号中的相关文章,链接如下:
基于容器的CI/CD
容器技术所解决的主要问题是环境的一致性和同一版本的应用在不同的环境中的迁移问题,虽然对单个开发人员也提供了更高效的开发模式,但容器的作用在团队开发中和管理开发/测试/预生产/生产环境中会体现得更有价值。从事软件开发的技术人员都知道,在开发过程中保持不同开发人员/测试人员使用统一的环境是一件非常困难的事情,很多过程中的问题都是环境不一致造成的。容器正是解决这一问题的有效方式。
为了能够构建基于容器的CI/CD,我们需要以下工具链:

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

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

下面我们就来看一下如何配置这样一套基于容器的CI/CD环境
1. 创建容器化主机作为开发/测试/生产环境
关于如何在开发环境中创建容器化主机支持编码和调试,请参考
关于如何在云环境中创建容器化主机支持测试和生产环境,请参考
2. 在Linux服务器上配置TFS构建代理
关于如何配置Linux服务器上的构建代理,请参考
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研发运维一体化的信息

docker4dotnet #5 使用VSTS/TFS搭建基于容器的持续交付管道的更多相关文章
- 基于Jenkins的持续交付方案
简介 Jenkins是开源的自动化编译.测试.部署的Web应用程序一个持续性交付应用 Jenkins的优势 1.Jenkins在国内的开发者中认可度较高,很多创业公司的自建持续交付系统的选择大部分都是 ...
- 使用VSTS/TFS搭建iOS持续集成环境
TFS 自2015版开始支持跨平台的持续集成环境,通过提供开源的build agent为 Windows / linux / macOS 提供了统一的持续集成环境管理能力.这篇文章给大家介绍一下如何使 ...
- 基于Jenkins的持续交付全流程设计与实践
1 从理论开始 什么是DevOps? 近年来,随着DevOps理念的逐渐深入人心,企业逐渐意识到从看似重复的手工劳动中实现自动化流程处理,对于提高企业劳动生产力已经非常重要,尤其是面向互联网的开发者, ...
- 使用Rancher pipeline搭建基于容器的CICD
CICD概述 CI-持续集成(Continuous Integration):频繁地将代码集成到主干的一种开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错 ...
- Docker学习笔记_08使用Rancher pipeline搭建基于容器的CICD
CICD概述 CI-持续集成(Continuous Integration):频繁地将代码集成到主干的一种开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错 ...
- ansible结合SHELL搭建自己的CD持续交付系统
一. 设计出发点 因公司业务面临频繁的迭代上线,一日数次.仅仅依靠手工效率过低且易出错. 考虑搭建一套可以满足现有场景的上线系统. 二 .为何采用ansible+shell方式 1.可控性(完全自主拥 ...
- 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台
面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...
- 手工搭建基于ABP的框架 - 工作单元以及事务管理
一个业务功能往往不只由一次数据库请求(或者服务调用)实现.为了功能的完整性,我们希望如果该功能执行一半时出错,则撤销前面已执行的改动.在数据库层面上,事务管理实现了这种完整性需求.在ABP中,一个完整 ...
- Docker系列06—基于容器制作镜像并上传到Docker Registry
本文收录在容器技术学习系列文章总目录 1.制作镜像 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 本篇主要详细讲解基于容器制作镜像:基于dockerfile 制 ...
随机推荐
- Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架
前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...
- android 两种实现计时器时分秒的实现,把时间放在你的手中~
可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲 ...
- spider RPC入门指南
本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件基于J2SE 8开发,因此需要确保服务器上安装了JDK 8及以上版本,不依赖于任何额外需要独立安装和配置 ...
- 使用github远程仓库
经过几天对github的研究,终于把自己想完成的给解决了,发现google真的有很多解释,但是很多也会出现一些bug,对于初学者真的很多烦恼,所以整理一份,能给初识github的你有所帮助 一,首先, ...
- Android之使用文件进行IPC
一.文件进行IPC介绍 共享文件也是一种不错的进程间通信方式,两个进程通过读/写同一个文件来交换数据.在Windows上,一个文件如果被加了排斥锁将会导致其他线程无法对其进行访问,包括读写,而由于An ...
- Zookeeper常用命令
http://www.cnblogs.com/chengxin1982/p/3997706.html
- Storm构建分布式实时处理应用初探
最近利用闲暇时间,又重新研读了一下Storm.认真对比了一下Hadoop,前者更擅长的是,实时流式数据处理,后者更擅长的是基于HDFS,通过MapReduce方式的离线数据分析计算.对于Hadoop, ...
- DoraCMS 源码知识点备注
项目需要研究了下DoraCMS这款开源CMS,真心做的不错:).用的框架是常用的express 4 + mongoose,代码也很规范,值得学习. 源码中一些涉及到的小知识点备注下: https:// ...
- SSH免密码登录
每次用SSH登录服务器都要输入密码,次数多了就觉得有些麻烦,反正是自己个人用的电脑,安全应该有保障,如何能直接登录上去而不需要输入密码呢?其实一句话就讲清楚了:把自己公钥放在服务器上. Linux客户 ...
- 我叫Twenty,我是要成为博客王的博客框架
标题套用了路飞的格式,其实我想说的是大多数都不相信你的梦想,直到你快走到了. 不废话了,介绍一下twenty: 这是基于CMS框架 zerojs打造一个博客.zerojs 的架构介绍在这里http:/ ...