Visual Studio Team Services (VSTS。原名:Visual Studio Online)是提供给开发人员或团队协助开发工作的线上服务,它提供了像是项目管理、版本控制、自动建置、自动测试、部署发行管理等功能,并且支持各种语言、开发平台或是 IDE 工具等,如果是五人以下的团队可以免费开始使用。(详细功能与价格可参考这页说明)
目标
这篇文章要完成的任务,是以 Android 项目为例子,并且使用 GitHub 为版本控制的工具(当然也可以用 VSTS 作版本控制,也支持 Git),而主角 VSTS 则是用来根据设定来自动执行建置项目的工作,自动产生建置好的 apk 档案以便后续的发行部署。
操作步骤
Android 项目
本文中的例子,是以 Android Studio 所产生的项目结构为例子,这里不必做任何特殊的设定或修改,就像一般一样使用它来建立项目即可,而 VSTS 内建的 Android 建置范本是使用 gradle 脚本,所以如果关于建置工作的设定,可以修改 build.gradle 档案的内容即可。
目前在 VSTS 上的 Android 建置环境,JDK 的部份支持到 8,而 Android 建置工具支持到 API Level 22,并且还不支持 Android Support Repository 以及 Android Support Library,如果需要这些函式库,可参考另一篇 [使用专属建置伺服器](coming soon) 一文。
本文的项目设定是 compilerSdkVersion: 19, buildToolsVersion: "19.1.0", minSdkVersion: 19, targetSdkVersion: 19,没有使用 Android Support Repository 及 Android Support Library。
将项目原始码发布到 GitHub 也可以是预设的 Android Studio 所产生的项目架构,像是这样:
设定 VSTS 的建置规则
登入 VSTS 后,首先建立一个项目,因为这里没有特别提到项目管理以及版本控制的部份,所以您可以依据您的喜好设定。
建立好项目后,在项目页面中切换至 BUILD 的页面:
在 BUILD 页面中就要开始设定建置的脚本,按下建立新脚本的按钮:
然后选择 Empty 范本开始建置:
选择 Empty 范本后按 Next 进到下一步基本设定,这里因为我们是以 GitHub 为例,所以 Repository type 的部份就选择 GitHub;agent queue 的部份就选择 Hosted 来使用 VSTS 的建置环境;而下方的 Continuous integration 勾选的话,每次把代码签入 GitHub 时都会驱动建置的工作,若不勾选,可以之后再设定要手动建置或是定期建置。设定完成后,就按下 Create 完成建立。
产生建置定义后,第一件事是先把 Repository 设定好(一开始会看到它呈现红色惊歎号),首先要在 Connection 栏位的右侧按下 Manage 来设定 GitHub 的帐号密码,以让 VSTS 的建置程式能够连接到您的 GitHub 帐号。
在管理服务的页面中,选择新增一个 GitHub 的 Service Endpoint:
接着,按下对话盒中的 Authorize 按钮,这时会跳出一个视窗(注意是否被浏览器挡掉)到您 GitHub 的帐号授权存取,完成授权后,为这个连线取一个名字,按下 OK 按钮就可以完成设定。
设定完成后,回到建置定义中的 Repository 页面完成设定,这里就选择要连结 GitHub 上的 repository、要拿哪个分支来建置、还有是否每次都是 clean build 等等,最后按下上方的 Save 按钮储存,同时也会让您修改这个建置定义的名称。
Repository 设定完成后,回到 Build 页面,我们要在这里加入建置的工作,按下 Add build step... 按钮选择工作。
VSTS 的建置工作很自由,您可以挑选许多工作串接起来,这里我们可以先选择 Android Build 的工作就可以了。
在建置定义中加入一个 Android Build 的工作后,最简单的设定就是把 Gradle Wrapper 设定好,如果是使用 VSTS 的建置环境而不是自建的机器,就要选择 gradlew.bat 由它来驱动 gradle 的建置命令。其它的栏位可以先不特别设定,而设定完成一样要按下工具列的 Save 按钮储存设定。
设定的工作到此就完成了(最基本的建置),如果你稍早设定了每次签入代码就执行建置的话,可以试着去 commit 一个新的版本来驱动,或是按下工具列上的 Queue build... 按钮来手动执行,按下后便会开始排程使用 VSTS 的建置环境,按照设定的建置工作逐一完成。
当建置开始执行后,您会看到一个 Console 显示这些建置工作正在做的事,或是各种印出来的讯息,可以帮助您检视建置的工作是否顺利进行。在这个例子中,它就会先到设定的 repository 把代码抓回来,然后开始执行 gradlew.bat build 的指令(依据之前的设定)来进行建置。
如果您看到 BUILD SUCCEED 而 Console 中也没有什麽错误讯息的话,恭喜,自动建置的设定已经能正常运作了!
启动建置之后
前一步只是将自动建置的机制做完,那建置完之后的 apk 要如何取得呢?其实按照预设的 gradle 脚本,以及 Android Build 的建置工作,建置完成的 apk 档会放在 app/build/outputs/apk/app-debug.apk 这个路径下,所以你可以再选择一个建置工作接在 Android Build 的工作之后,看是要用什麽方式传送到发布的平台,还是结合其它的工作(例如签署或是测试等等),这里示范的是将建置好的 APK 档案传到 Azure 的 Blob 储存体中。
在建置工作中加入一个新的工作:
然后设定要上传的档案,如前面所说,Source 的栏位就要填入 app/build/outputs/apk/app-debug.apk;剩下就是设定 Azure 帐号,以及上传到哪个 Azure Blob 储存体的帐号,以及存放的容器及路径。
设定完成后,当建置工作启动时,就会先完成 Android Build 然后再进行 Azure File Copy 的工作。
结果
透过这样的设定,开发 Android 项目时仅需专注在应用程序的开发,每次当代码签入到 GitHub(或是其它的版本控制系统),就会自动触发这一连串的自动工作,对于快速交付的需求或是任务上,将可以尽量减少出错,并且利用自动化来加速整个工作的进行。