2015-02-08 44 views
10

好的,所以这可能听起来有点奇怪,但在这里。学生作业的持续集成

我在本地大学教授数据结构和算法实验室,希望给我的学生提供每一种流畅而有趣的体验。到目前为止,我使用了一个简单的git仓库,每个学生都派生出来,每当他们完成一个任务时,他们发出了一个push + pull请求,我会检查他们的代码,如果一切正常,我会将pull请求合并到main回购。这工作得很好,但我想做一些更有趣的事情。

这个实验室正在C语言(甚至不是C++)中教(不,我不想输入任何有关为什么另一种语言会更好的论战)。我想要做的就是在学生每次推动Jenkins构建时运行它,以验证手头任务的某些预定义测试。

例如,对于第2周,我会给他们一个家庭作业与列表。我想自己写这些作业的测试,然后自动验证他们使用这些测试做了什么。

我提供以下信息:

  • 24/7运行CentOS的机器,我可以用它来把任何东西上(我詹金斯和Tomcat在其上运行ATM)
  • 足够的时间和毅力来尝试让自己在这个实验中的经验非常值得的,而

++一个非常漂亮的“附加”这一切会使用类似声纳作为代码验证,并检查其分支机构内重复的代码(如看是否有人抄袭了别人的回答)

我在正确的轨道上去Jenkins服务器,思考声纳等?我离开吗? 我不认为这是不可能的。这可能是困难的,是的,但是这使得它的乐趣^^

的“流”,我要的是:

  • 每个学生是一个git组织+回购
  • 他们创建一个分支的一部分从本地主机(我会施加限制,如“只使用一个子文件夹与你的名字)
  • 主分支将包含测试
  • ,他们将在他们的家庭作业的工作对他们的分支,然后将其推到詹金斯/ Gerrit /无
  • 该分支将以某种方式进行测试,如果所有测试都通过了,它将与主合并。

我代表亲爱的同学们,谢谢。

+3

我希望我有这样的老师...... – Vishwanath 2015-02-08 06:29:09

+0

你正在为詹金斯正确的轨道。关于重复检查,我不确定您是否可以使用Sonar来做到这一点。 – Vishwanath 2015-02-08 06:30:02

+0

主动竖起大拇指!所选择的工具适用于此。流量也不错。 – 2015-02-08 10:44:41

回答

3

TL; DR:是的,你想做什么可行,你已经在寻找正确的工具。


你想要什么,似乎完全可行的:安装Git plugin詹金斯,其配置为跟踪回购的各分支机构,它已经可以在每次推后推出的版本。

既然你可以在詹金斯在执行任意脚本打造,你可以给推权限詹金斯用户,并使其融合,推动代码,如果通过了所有测试。

然后,您可以同时安装声纳服务器,并把它通过Sonar plugin,和您的学生将获得这种额外的反馈。

另一方面,Gerrit可能会对你正在寻找的东西有点矫枉过正。或者说:这是一个有价值的工具,但我相信你在第一次迭代时不需要它。

我能想到两种类型的困难:

  1. 脚本/拐角情况
  2. 无论你是想阻止学生从游戏系统

对于(1),我的意思是你需要实现你的规则(例如“只生成属于最后一个提交者的子文件夹”;“不要在主生成合并提交”; ...)。而且你可能会遇到的问题,以便:

  • 你不希望一个新的詹金斯在合并运行提交只凭詹金斯工作推,所以你必须考虑到这一点在你的构建脚本
  • ,如果你想允许几个詹金斯在同一时间运行什么,以及两分试图合并,推动在同一时间

我想你只需要修复这些故障为你”会发现他们。只要考虑创建Jenkins配置的backups(你也可以将它们存储在临时的git仓库中)。

对于(2),我的意思是,你可能要考虑到,例如,其中一个学生将从回购测试他实现不能通过删除的情况。或者是直接推动主人的学生的情况。

我相信你可以添加很多的检查,以防止这种作弊的,但是,而不是进入一个“技术冲突”,我想这将是更健康,只是告诉他们你信任他们。

+0

谢谢你。 我已经通过“GitHub的教育课堂指导”(https://education.github.com/guide)什么了让我吃惊的是,它正是我所做的最后一个学期(主回购,叉,拉要求等) 我发现了一些可爱的东西,Jenkins的一些插件可以拦截git pull请求。我会调查这个问题,因为它解决了“不要推动主人!”的问题。 – Alexandr 2015-02-08 09:56:56