在过去的几篇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研发运维一体化的信息

docker4dotnet #5 使用VSTS/TFS搭建基于容器的持续交付管道的更多相关文章

  1. 基于Jenkins的持续交付方案

    简介 Jenkins是开源的自动化编译.测试.部署的Web应用程序一个持续性交付应用 Jenkins的优势 1.Jenkins在国内的开发者中认可度较高,很多创业公司的自建持续交付系统的选择大部分都是 ...

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

    TFS 自2015版开始支持跨平台的持续集成环境,通过提供开源的build agent为 Windows / linux / macOS 提供了统一的持续集成环境管理能力.这篇文章给大家介绍一下如何使 ...

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

    1 从理论开始 什么是DevOps? 近年来,随着DevOps理念的逐渐深入人心,企业逐渐意识到从看似重复的手工劳动中实现自动化流程处理,对于提高企业劳动生产力已经非常重要,尤其是面向互联网的开发者, ...

  4. 使用Rancher pipeline搭建基于容器的CICD

    CICD概述 CI-持续集成(Continuous Integration):频繁地将代码集成到主干的一种开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错 ...

  5. Docker学习笔记_08使用Rancher pipeline搭建基于容器的CICD

    CICD概述 CI-持续集成(Continuous Integration):频繁地将代码集成到主干的一种开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错 ...

  6. ansible结合SHELL搭建自己的CD持续交付系统

    一. 设计出发点 因公司业务面临频繁的迭代上线,一日数次.仅仅依靠手工效率过低且易出错. 考虑搭建一套可以满足现有场景的上线系统. 二 .为何采用ansible+shell方式 1.可控性(完全自主拥 ...

  7. 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台

    面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...

  8. 手工搭建基于ABP的框架 - 工作单元以及事务管理

    一个业务功能往往不只由一次数据库请求(或者服务调用)实现.为了功能的完整性,我们希望如果该功能执行一半时出错,则撤销前面已执行的改动.在数据库层面上,事务管理实现了这种完整性需求.在ABP中,一个完整 ...

  9. Docker系列06—基于容器制作镜像并上传到Docker Registry

    本文收录在容器技术学习系列文章总目录 1.制作镜像 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 本篇主要详细讲解基于容器制作镜像:基于dockerfile 制 ...

随机推荐

  1. MSDN文档篇

    很多人网上下载3~10G不等的MSDN文档,发现,下载完成了不会用 很多人每次都得在线下载文档,手上万千PC,都重新下载不是得疯了? so==> 先看几张图 推荐一个工具:https://vsh ...

  2. duang~免费的学习视频来啦:学霸君之全栈测试

    学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...

  3. 多线程同步工具——Lock

    本文原创,转载请注明出处. 参考文章: <"JUC锁"03之 公平锁(一)> <"JUC锁"03之 公平锁(二)> 锁分独占锁与共享锁, ...

  4. android手机登录时遇到“QQ安全登录发现病毒”解决

    android手机作为开源系统非常容易感染病毒,有时候我们会经常遇到手机QQ登录时检测到app被感染,一般情况是由手机感染病毒所引起的,安装腾讯管家后只能检测病毒和卸载感染病毒的软件,不能清除病毒.解 ...

  5. NDK开发_笔记0

    自谷歌搜索退出中国以来,谷歌对全球第二大市场中国的态度一直保持冷淡.可是北京时间12月8日,谷歌2016开发者大会在北京召开,同时专门针对中国的谷歌开发者网站已经上线:https://develope ...

  6. jQuery radio的取值与赋值

    取值: $("input[name='radioName']:checked").val(); 赋值: $("input[name='radioName'][value= ...

  7. Configure a VLAN (on top of a bond) with NetworkManager (nmcli) in RHEL7

    not on top of a bond Environment Red Hat Enterprise Linux 7 NetworkManager Issue Need an 802.1q VLAN ...

  8. 基于Node.js实现一个小小的爬虫

    以前一直听说有爬虫这种东西,稍微看了看资料,貌似不是太复杂. 正好了解过node.js,那就基于它来个简单的爬虫. 1.本次爬虫目标: 从拉钩招聘网站中找出“前端开发”这一类岗位的信息,并作相应页面分 ...

  9. Linux.NET学习手记(8)

    上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这 ...

  10. 提升网速的路由器优化方法(UPnP、QoS、MTU、交换机模式、无线中继)

    在上一篇<为什么房间的 Wi-Fi 信号这么差>中,猫哥从微波炉.相对论.人存原理出发,介绍了影响 Wi-Fi 信号强弱的几大因素,接下来猫哥再给大家介绍几种不用升级带宽套餐也能提升网速的 ...