Azure Pipeline

这是整个 Azure DevOps 的重头戏,也是微软愿意独立开放和打重金宣传的模块。虽然其他模块(限本地版)可以自由的开启和关闭,但微软对该模块有一个强有力的口号:*“Build in any program, release to any platform”,也就是说,它可以编译任何程序,然后发布到任意平台。

当然,它也是做持续集成(CI)和持续部署(CD)的关键模块,就好比现在市面上其他流行工具,如 Jenkins、TeamCity、Bamboo 等等工具,但 Azure Pipeline 比他们更有优势

  • 界面更加人性化
    Jenkins 不说了,可以说就是给没有美感的程序员使用的,和任何互联网产品相比无疑是最丑的。
  • 操作更方便
    拖拖拽拽就能完成你想要的功能,基本上微软的产品都是围绕这个思路进行的。所以,Azure Pipeline 中集成了很多的任务供你选择,不怎么需要懂写完整的代码就能集成你想要的程序。
  • 更好地本地化语言支持
    Jenkins 据说有中文包,但某些好像也翻译不完全,TeamCity 和 Bamboo 根本只有英文版;而Azure DevOps 整套本地版支持本地化语言。

当然最大的优势就是和微软的 Azure 以及 .NET 结合咯,不过 .NET 已经不是微软的唯一选择了,任何语言任何平台都可以。

言归正传

首先看到左边的导航,有一个火箭图标的

java 对接 azure blob azure devops jenkins_CI/CD

生成(Build)

你可以把服务器想象成你本地计算机,

  • 首先你得获取源代码,比如从远程的 github 或本地的 Azure Repos 仓库;
  • 然后使用工具对源代码进行编译,只有编译通过的代码才可以使用,当然取决于你使用的语言,如果是 Python 或者 Javascript 就不需要编译了;
  • 当然你也可以加入其它的部分,比如跑单元测试、代码安全扫描等等,但最终的结果是拿到一个可以被发布的包。

这就是一个管道模式,你配置要做的任务,它会一步一步的往下走,直至结束。

如果你是新项目,旁边会有这个提示

java 对接 azure blob azure devops jenkins_java 对接 azure blob_02

点击这个“新管道”,就进入了配置页面。

获取源代码

java 对接 azure blob azure devops jenkins_Azure Pipleline_03


当然第一步就是获取源代码,没有源代码就无法编译打包。

配置管道

java 对接 azure blob azure devops jenkins_Azure Pipleline_04


右边已经有为特定语言配置好的任务,你只需要点击 “应用” 就会跳转到下一个页面

java 对接 azure blob azure devops jenkins_生成_05


我选择了一个 ASP.NET 的末班,它会给我自动生成这些步骤。右边就是为选择好的任务进行参数配置,这里就不细说了。

代理

在 Azure Pipeline 中,代理分为两种,一种叫生成代理(Release Agent),另一种叫部署代理(Deploy Agent)

代理是干什么用的?

言简意赅就是帮你跑管道任务的。

难道你会在某一个服务器安装各种语言的 SDK 吗?比如 Java 的JRE,.NET Framework 或 Python 等等,Java 和 Python 会安装在 Linux 服务器上,而 .NET 或 C++ 的只能在 Windows 服务器上安装,因此为了让服务器可以分布式,就有了代理。

每一台服务器安装一个代理,Azure Pipeline 根据你的配置和选择,去呼唤相应服务器的代理,然后帮你把源代码进行编译。

部署代理也是同理,可能A服务器要发布到 Tomcat 上,B服务器要发布到 IIS 上,C服务器需要部署在 Docker 上,服务器通过代理获取生成好的包,然后进行不同服务器的部署。

发布和部署没有代理就无法工作
这一章就不会细说怎么弄代理。

发布

就是将指定生成好的部署包,进行发布,当然这也是一个管道模式。

java 对接 azure blob azure devops jenkins_生成_06

项目

就是你要选择怎么进行部署,使用哪一个生成包进行部署。

java 对接 azure blob azure devops jenkins_CI/CD_07


默认支持现在比较流行的几种模式。

阶段

就是你需要部署的环境

可以并行、或者串行,比如只有成功部署到了 DEV 环境,才能对 SIT 环境进行部署,或者一次性部署到多台服务器环境,比如我有5台DEV服务器。

大概看一个真实的例子吧

java 对接 azure blob azure devops jenkins_Azure DevOps_08

变量

这个东西在 DevOps 中无处不在,和你编程一样,有时候你总不能到处都输入一大串字符串吧?例如部署的路径(D://wwwroot/xxxx/release/api/docker/…),所以使用变量可以让这些输入进行统一化。

就是你自定义的变量组

比如数据库字符串,你可以定义一组变量来进行配置,就好比你做系统的表单页面一样。

java 对接 azure blob azure devops jenkins_Azure Pipleline_09

任务组

就是自定义管道中的任务

你可以把你某个生成或部署的多个任务封装成一个任务组,这样的话就不需要每一次都提交一大串任务了,比如配置环境变量、获取组件包(Maven/Nuget/PIP/npm)、Tomcat 的配置、Web 站点的 url 等等。

java 对接 azure blob azure devops jenkins_CI/CD_10

部署组

就是刚才说的部署代理

java 对接 azure blob azure devops jenkins_Azure Pipleline_11

总结

不管从界面上、易用性上我都推荐你使用 Azure Pipeline,当然收费模式你可以自己去官网看看,你不想用云的话,就自己搭建一个吧。