OSGi enRoute – 2.2_11 – 持续集成

在本章中你将学到什么

在本章中我们将首先看看当前的bnd工作空间是如何通过Gradle来进行构建的。尽管这对于一些本地工作来说很有用,不过最初的目的在于进行持续集成。因此我们将工程push到Github上并且配置一个Travis持续集成服务器。

IDE之外构建

如果你不能自动化构建自己的产品,那么你就不是一个真正的软件工程师!软件工程的一大进步是从私人机器上发布代码进入持续集成的世界。当你在私人机器上进行构建时,很多不需要的依赖包会神奇地出现在产品之中。构建软件的核心在于自动化重复流程,这是为什么OSGi enRoute(包括bnd)中包含一个完整的gradle构建的原因,它不需要任何额外的东西,并且基本上已经配置好了。Bnd可以在类似Eclipse的IDE中运行,也可以在Shell中运行。为了确保Bnd能在IDE中或从命令行构建产品,我们已经做了很大的努力。

因此我们仅需要启动一个Shell并且执行构建即可!

你甚至不需要安装Gradle。在OSGi enRoute中有一个gradlew脚本,它会下载正确版本的Gradle。你也可以安装并使用Gradle(版本>=1.2)。毫无疑问,你需要保证Java8已经通过命令行安装完毕。

Bundtools的所有特性都有一个可执行的gradle任务与之对应。你可以用./gradlew tasks指令查看所有可执行的任务。例如,你会自动获得一个构建com.acme.prime.eval应用程序的任务:

这个任务会将输出保存到com.acme.prime.eval.application/generated/distributions/executable/com.acme.prime.eval.jar.

将内容放到 Github

我们现在可以在Github上创建一个仓库,为了做这件事首先你得有个账户。在Github上创建一个新的仓库是一个非常好的教程,不过我们这里会一步一步地来进行。

接下来将新的仓库命名为与工作空间一致的com.acme.prime。因此进入你的主页并且单击顶端的+号按钮,然后选择New Repository选项。

20180101_100

这将会打开定义仓库信息的窗口。保持耐心,记得添加Description字段的描述。

20180101_101

然后点击 Create Repository 按钮,这会进入一个页面,它会解释如何将位于~/git/com.acme.prime.eval的本地仓库连接到Github上的仓库。在本例中我们希望连接到一个全新的仓库,不过我们当前的Git工作空间仍然连接在OSGi工作空间仓库,而你几乎不能写入该仓库。

20180101_102

我们将会选择第一个场景,但是我们希望使用SSH URI,因此点击SSH按钮并且将旁边的文本框中的URI复制到剪贴板上。它看起来可能如下所示:

此URL在你的环境中会有所不同。

现在,在bndtools中我们必须将bnd工作空间与此仓库相连。理论上在Eclipse中使用EGit来操作是可行的,但实际上会比较棘手,因此我们会通过命令行来进行操作。EGit还达不到经典的CVS插件在Eclipse中的地位和水平,现在还是略显笨重。

因此我们将从shell来重新连接。我们根据Github的要求来从我们的仓库的起始页进行操作…

有时候命令行操作会有些难…如果你现在进入Github则会看到你的工作空间了。

20180101_103

功能改变可以通过命令行进行推送(git push),或者在Eclipse内部的右键菜单@/Team进行推送。

持续集成

bnd工作空间已经被配置用于使用 [Travis CI][3]来进行持续构建。激活此功能的方式非常简单。只需要进入Travis站点,创建一个基于你的Github证书的账户,然后进入你的账户页面。此步骤非常简单,我们就不再详细描述了。

一旦你登录成功,点击你的图标或名称来选择账户。选择Repository选项卡。如果是第一次使用最好点击Sync Now按钮,这将会刷新你的代码仓库列表。找到你的新代码仓库并且设置右边的按钮为ON的状态,这样就行啦。现在每一次push都会自动构建代码仓库。

20180101_104

当你打开对应的代码仓库的时候,Travis并不会进行构建。要使其工作我们需要进行改变并提交对应的代码到Github中。Github和Travis这次将会配合默契并产生一次构建。

OK,下面在我们的com.acme.prime.eval.provider Bundle的Menifest中添加一些描述信息。在对应的工程中双击bnd.bnd文件,并且选择Source选项卡。(尽管这里有一个带有真实小工具的Description选项卡,但我们发现还是Source选项卡更好用。)

其中的Version内容没问题,而Description可以进行一些改进。一旦我们添加了合适的描述信息,则我们会移除掉警告信息。

保存文件内容,选择bnd.bnd文件,然后选择右键菜单@/Team/Commit。这将会弹出如下的对话框:

20180101_105

点击Commit and Push,这将会commit改变并将它们push到代码仓库中。Github会通知Travis,然后它会开始进行构建。

BUG:Egit会反复挂起,但是服务端不会有问题。如果EGit展示100%,则你的改变已经在Github上了。

这个过程可能会需要一些时间,但是过一会儿在你的Travis的Home页面上会展示com.acme.prime工作空间的构建结果。

20180101_106

它是如何工作的?

持续集成并不是一个新鲜事物;我们的第一台持续集成(Continuous integration,CI)服务器是在1994年搭建的。然而维护一台CI服务器通常非常让人痛苦。

Jenkins/Hudson改变了这种状况,但是还是让人觉得不太好用,这些构建工具需要对我们的构建环境进行自定义,还需要一个带有笨重的插件模型的CI服务器,有时候会让人怀疑为何需要它们呢?调试这些CI服务器的配置有时是一件很考验人耐力的事情。Travis为我们展示了维护一个CI服务器可以多么简单,在该CI服务器上你可以恰当地构建你的工作空间。现在大多数构建的测试都可以在笔记本上完成,因为我们相信CI在笔记本上一样会工作良好。

我们来重复下步骤。我们使用Github来存储工作空间。通过带有EGit的Eclipse或命令行来进行管理是很容易的。对Github的一次push会向Github发送所有的改变。一旦所有都准备就绪了,Github会向Travis发送一个URL,并且Travis将会进行构建。如果构建失败了,你将会得到一个提醒。

打赏一下
支付宝
微信
除非注明,博客文章均为原创,转载请标明文章地址
本文地址: http://www.javafxchina.net/blog/2018/01/osgi-enroute-0202-11/
百度已收录