Jenkins & Git - 哪个触发器最适合 运行 测试?

Jenkins & Git - Which is the most appropiate trigger to run tests?

我正在为一个主要系统 (Moodle) 开发插件,因此持续集成对我很有用。

我的想法是检查我要为其发布插件的 Moodle 稳定版本分支,以 运行 使用这些版本进行测试。

但是由于我从未使用过 Jenkins 或持续集成,所以我不清楚什么时候是触发 运行 测试构建的最佳时机。这些是 Jenkins 提供的构建触发器:

除此之外,我们还有 Git 个钩子,乍一看我觉得它们比上面的更有趣。

注意: Git Jenkins 插件在获取 Moodle 存储库时总是失败,似乎是因为它的尺寸太长(我不知道是否 Git 插件 es necessary/important 这种方法)。

关于触发器: 完全看你的选择或者项目的场景。但是,我会根据我对 Jenkins.

的经验告诉你我的想法

Trigger builds remotely (e.g., from scripts)

总是手动触发构建很麻烦

Build after other projects are built

我从来没有用过它。也许它可以在非常特定的场景中使用(例如:当一个项目依赖于另一个项目时,或者如果项目太大而你想 运行 单独使用它)

Build periodically (cron-like; I don't think would be suitable)

将定期构建,如果代码没有更改则事件。如果启用了电子邮件触发器,它会用电子邮件打扰您。如果 mailing list

中还有其他人,那就更糟了

Build when a change is pushed to GitHub (could be)

如果您是一个人开发项目,并且希望在推送更改后立即看到结果,这很有用。但是,此选项有时不起作用。因此,解决方法是让 Poll SCM 每分钟检查一次更改。 (*/1 * * * *)

Poll SCM (can't see difference with the periodic build)

主要区别在于 Poll SCM 不会在您指定的时间构建,而是首先检查是否有任何更改。如果根本没有变化,它就不会构建,而 Build periodically 会构建。 这是我最常使用的选项。这是一个非常有用的。我通常安排在晚上检查 启用电子邮件触发 并且早上要做的第一件事是检查电子邮件是否有任何构建失败

关于 Git 钩子: 如果您想为某些分支触发构建,您可以选择在 jenkins 上默认构建哪个分支。我也没有遇到过被迫使用 Git hooks 的情况。

我认为最适合您开发场景的触发器是:

  • 将更改推送到 GitHub
  • 时构建

因为它能让您尽快检测到集成错误(这是持续集成实践的主要好处之一)。

要充分利用此触发策略,您应该每天多次或至少每天将您的代码集成到共享存储库中。

The idea is to checkout Moodle stable version branches I want to publish the plugin for, to run the test with these versions.

对于这种情况,触发器:

  • 每晚定期构建

是最合适的,因为集成测试通常比第一单元更长。

所以回顾一下:

  • 运行 推送更改时进行单元测试 到 GitHub(测试您的插件)
  • 运行 每晚集成测试(测试您的插件和 Moodle 之间的交互)

对于以下内容:

Apart from these, we have the Git hooks, which at first sight I find them more interesting that what is above.

  • Pre/post commit
  • Pre/post merge (could be nice for triggering builds only for certain branches)
  • Pre/post push

请问另一个问题以更好地阐明它。

对于以下内容:

Note: Git plugin for Jenkins fails always when fetching Moodle repo, it seems because its quite long size (I don't know if Git plugin es necessary/important for this approach).

请问另一个提供堆栈跟踪的问题。

根据我的经验,最好的方法是在将提交推送到存储库时触发 "build"。我认为这就是 "continuous integration" 的意义所在。

最近,Mark Nielsen 开发了一个工具来帮助将 Moodle 插件的测试与 Travis CI 工具 (http://travis-ci.org/) 集成。

"The tool provides a template of the travis configuration file - perfectly documented - as well as excellent usage information." (https://moodle.org/mod/forum/discuss.php?d=323384).

该工具允许您运行 多项测试,如 php 和 js lint、moodle 自己的代码风格检查器以及 php 单元和 behat 测试。它还使用 mysql 和 postgresql 数据库的多个版本 PHP 进行测试。您也可以在不同版本的 Moodle 中测试您的插件,但默认分支是 MOODLE_30_STABLE.

可在 https://github.com/moodlerooms/moodle-plugin-ci