本帖最后由 754503921 于 2017-8-7 22:10 编辑

如何使用持续集成帮助开发
1. 什么是持续集成
持续集成(英语:Continuous integration,缩写为 CI),一种软件工程流程,将所有工程师对于软件的工作复本,每天集成数次到共用主线(mainline)上。引用中文维基百科
个人理解:当你每次提交代码到 GitHub 等代码仓库时,你可能不知道这次更改造成了什么后果。有了持续集成以后,你将能够得知你的代码的更改所造成的结果。
持续集成主要负责这些事:
  • 维护一个代码库
  • 自动构建
  • 让构建时会自我测试
  • 所有人每天至少提交一次
  • 应该要构建每一个提交
  • 让构建维持快速
  • 用在线环境的复本测试
  • 让获取最新发布版本更容易
  • 任何人都可以查看最后构建的结果
  • 自动部署
也就是说,在利用最佳的情况下,你将不用再担心软件的发布、测试问题,这样你就可以专心在代码编写上了!

2. 开始你的持续构建之路

本人为 Bukkit 插件开发者,所以我将以 Bukkit 插件的开发作为示例,其他如 Forge Mod 开发也是类似的。
由于没有可用的 Jenkins 服务器,所以我将以 Circle CI 作为教程的示例。
依赖控制系统我使用 Maven 作为这个教程的示例,Forge 使用的 Gradle 也差不多。
所以,你需要准备:
  • 一个 GitHub 账号(https://github.com
  • 一个 Circle CI 账号(https://circleci.com/
  • 一些对 Git、依赖控制系统的知识
  • 一些对 Linux 的知识(非必需)
  • 一些对 YAML 的知识
为什么要使用 GitHub 而不是类似 coding、码云等国内的网站呢?因为 Circle CI 只有对 GitHub、BitBukkit 的支持。
为什么需要对 Linux 有一些了解呢?因为 Circle CI 本质上是一台内存为 4 GB 的联网的Linux虚拟机。
如果对 Maven 毫无概念,我推荐你先看一下这一篇教程: http://www.mcbbs.net/thread-711754-1-1.html
当你将 GitHub、Maven 配置完全后,我们将开始这篇教程的重点。

3. 将项目部署到 Circle CI

进入 Circle CI 主界面,点击 PROJECTS -> Add Project

然后在你的项目列表中,任意选择一个,点击 Setup project
至此,你已经将你的项目部署到了 Circle CI。

4. 设置 Circle CI(circle.yml)
你的确已经将项目部署到了 Circle CI,但是这不代表 Circle CI 会像你想象的一样完成所有的构建并导出,正相反,如果你安装了邮箱客户端或者偶然看了一下邮箱的话,你应该已经收到了 Circle CI 的构建失败的通知了。这也是持续集成的好处之一:构建失败能够及时通知你。
那么要如何指定你的构建服务器应该怎样做呢?每个 CI 有各自的方法,我使用的 Circle CI 则是需要在项目的根目录,放上一个名为 circle.yml 的文件。Travis CI 则是 .travis.yml,但这不在本文的讨论范围。
Circle CI 1.0 版本

当配置完成 circle.yml 后,你就可以将其上传至 GitHub 了。等待一会儿,你将会收到 Circle CI 发来的构建成功的邮件。

5. 下载你的构建结果

点击项目的构建号,点击 Artifacts,展开文件夹,点击你需要用于下载的文件。


6. 其他更厉害的操作

你可以在你的帖子里加入这样一个小图标装逼,地址为 https://circleci.com/gh/用户/项目/tree/分支.svg
示例: 这个图标类似 Jenkins 的 embedded status 插件,会实时显示这个项目的构建状况。
你可以将构建的结果发回 GitHub 的 release 去,参考官方文档。
你可以搭建自己的服务器,并且配置向你的服务器发送一个 json 包,包含构建的信息。
你可以使用两个容器并行操作,进行服务端客户端的模拟。
你可以将 Bukkit 完整的拷贝进你的 GitHub 并使用开启服务器的命令启动这个服务器,反正内存有 4 GB。你可以使用这个方法来进行测试,但是请完成这个测试后关闭服务器,否则 Circle CI 会将处理过长时间的命令视作构建失败。
甚至你可以利用网站的 API 来自动将结果推送到网站。(如果 spigotmc 有相关的 API 那么就实现了完全的自动发布系统,我也不知道有没有)。
你可以在官方文档找到开启一个数据库的方法,这样你在测试的时候就可以使用 MySQL 数据库了。

7. 一些可能有用的链接

GitHub 地址 https://github.com
Circle CI 地址 https://circleci.com
Travis CI 地址 https://travis-ci.org
Circle CI 文档 https://circleci.com/docs/2.0/
Circle CI 环境变量 https://circleci.com/docs/2.0/env-vars/
Maven 的部分教程 http://www.mcbbs.net/thread-711754-1-1.html
使用的示例项目的地址 https://github.com/IzzelAliz/RandomMarket/

这篇教程仅仅作为抛砖引玉,如果你研究出了更加高级的用法,欢迎分享。

[groupid=1330]PluginsCDTribe[/groupid]