0%

构建即服务

一切皆服务

在云计算领域,下面的三个术语可谓是人尽皆知了,这三个结合起来,就是云计算的SPI服务模型了。

  • 软件即服务(SaaS,software as a service)
  • 平台即服务(PaaS,platform as a service)
  • 基础设施即服务(IaaS,infrastructure as a service)

由此诞生了一个新的概念,一切皆服务(XaaS),意为“X as a service”、“anything as a service”、“everything as a service”。
除了上面云计算的三种服务模型之外,还有以下这些:

  • 存储即服务(SaaS,storage as a service),比如我们熟悉的One Drive、iCloud、Dropbox等
  • 搜索即服务(SaaS,search as a service),比如有Algolia、Elastic Cloud、Azure Search等
  • 监控即服务(MaaS, monitoring as a service),比如One APM
  • 编译即服务(CaaS, compiler as a service),比如Roslyn
  • 数据库即服务(DBaaS,database as a service),比如Azure SQL Database

当然,你也可以认为这些个XaaS是SaaS的子集。

在这里我想分享的是——构建即服务(BaaS, build as a service)的一些案例。

构建即服务

软件构建对于开发者来说一定不陌生。从早期的make,到今天的MSBuild、Gradle,构建工具越来越强大,但与此同时,搭建这样的构建系统也越来越复杂。个人开发者可以使用集成开发环境(IDE)来间接的使用这些构建工具,从而避免与这些构建工具有深入的接触。但对于团队开发来说,要想提升开发效率,必须搭建一个集中的构建服务器,实现自动化的CI/CD流程,而不是使用IDE来构建。搭建一台构建服务器不是一件容易的事情,特别是还要支持不同的开发语言及平台。Jenkins是这里面的杰出代表,但一般的开发者没有像Ops那样的经验,搭建Jenkins非常痛苦。于是你会问有没有支持构建的云服务呢?答案是肯定的,而且有很多。

这里,我要分享的两款构建服务都是由微软提供的。

Visual Studio Team Services

Visual Studio Team Services(以下我们简称为VSTS)是一个面向开发人员的基于云的解决方案,可处理从托管代码存储库到问题跟踪,再到自动生成的一切工作。因此这是一个大而全的解决方案。它和Visual Studio的集成非常紧密,开发人员可以很方便的在Visual Studio中使用VSTS提供的服务。用户数不超过五人的团队可免费使用,因此你可以自由创建包含任意数目的存储库、工作项和 Bug 的私有团队项目,而不用支付任何额外的费用,非常适合小型团队和个人开发者。

Build and Release

在VSTS提供的构建服务中,软件的构建分为两个大的步骤:

  • Build
  • Release

在Build阶段,开发者可以指定源代码的来源,支持Git和SVN协议,可以是GitHub,也可以是来自VSTS自身托管的代码等其他代码托管平台。然后使用VSTS提供的task来定义build过程。对于基于.NET框架的程序或者网站而言,一般的build过程如下:
Build configuration

在Release阶段,可以将在Build阶段生成的目标文件(Artifact)部署到多个环境,例如测试环境、生产环境。一般而言测试环境和生产环境的配置信息是不同的,因此可以在此阶段引入配置文件,然后在使用task定义Release的过程中将配置信息注入到最终的环境中。这样做的另一个好处是,各种敏感信息如数据库连接信息、服务接口的密钥等信息可以受到最大程度的保护,而不是把这些敏感信息和代码库混在一起,即代码和配置分离。
Release configuration

当然对于小型或实验性质的项目,可以省掉Release阶段,在Build阶段中直接编译、测试、发布。一个常见的场景是发布一个ASP.NET网站到Azure。
Deploy to Azure

除了微软自己提供的常用的task之外, VSTS还支持第三方的task。你可以前往VSTS的marketplace查看。

Build Agent

上述定义在Build和Release流程中的task都是在构建服务器上运行的。在VSTS中,构建服务器被称为Build Agent。默认情况下,VSTS为我们提供了一些共享的Build Agent。
Build Agent
因为背后的Build Agent是共享的,如果遇上繁忙的时段,你的构建请求可能要在队列里面等一段时间。并且如果你对源代码的安全性有更高的要求,或者对Build和Release流程有更复杂的控制,那么则可以使用自有的服务器,只需下载安装VSTS的agent,简单配置下即可。

需要指出的是,VSTS提供的是构建平台,至于能构建什么类型的项目,这取决于Build Agent的能力和配置以及相应task的支持。
VSTS Build

例如,从下面的Capabilities列表中,我们可以知道VSTS提供的这台共享的Build Agent支持.NET、Java、Android、Node.js等主流平台项目的构建。
Build Agent Capabilities

CI/CD with VSTS

微软在企业内部提倡“One Microsoft”的口号,这在VSTS中也有非常重要的体现。以VSTS为中心,结合Visual Studio的开发环境,加上Azure云平台的运行环境,微软将多个产品和服务无缝连接,为开发者提供了极致的CI/CD体验,让开发者专心于编写业务代码这一件事情上。
VSTS

Visual Studio App Center

从名字上你就知道,这个构建服务是为专为构建App服务的。目前App Center支持iOS、Android、Windows(UWP)这三种类型的App。
Add new app

App Center支持从多个代码托管平台获取源代码:
repository

对于Android App来说,App Center支持Java、React Native以及Xamarin这三种平台。我测试过基于Java的平台,它对基于Gradle的项目有比较好的支持,按照界面提示很容易就能完成配置。当然你也可以使用Maven来构建,但你得自己来编写Build scripts,这个就稍显复杂。
Build configuration

虽然在VSTS中也支持构建这些App,但是需要很多额外的配置,而且构建服务器自身的搭建也很复杂。App Center则完全隐藏了Build Agent,你不需要知道背后有个构建服务器在编译、测试、打包你的App。你所做的就是根据设置向导,填写一些简单的参数即可。

App Center提供了免费的基础功能,对于个人开发者和小型开发团队来说应该足够了。
App Center pricing

除了最基本的构建服务之外,App Center还提供了测试、分发、数据分析、崩溃报告等一系列相关服务,可以说是涵盖了App开发的全生命周期。

其他的构建云服务

总结

对于中小型的开发团队和个人开发者来说,使用这些构建服务,真的很省事省钱。我越来越觉得云计算的发展,赋予了个人更大的能力。以前只有世界五百强才能具备的大型数据中心和计算能力,现在个人和创业团队只需花费少量钱就可以实现,而且还能按需扩展。对于这些人来说,云计算的时代是最好的时代。

相关链接