学生作业的持续集成

问题描述 投票:10回答:2

好吧,这可能听起来有点奇怪,但它是这样的。

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

这个实验室是用C语言(甚至不是C++)来教的(不,我不想在这里讨论为什么其他语言会更好)。我想做的是让学生在每一次推送时都运行类似Jenkins的构建,以验证手头任务的一些预定义测试。

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

我有什么可用的。

  • 247运行CentOS的机器,我可以用它来放任何东西(我有Jenkins和Tomcat在上面运行)。
  • 足够的时间和意志力,努力使他们在这个实验室的经历变得非常值得。

++ 一个非常好的 "附加 "功能是使用类似声纳的东西作为代码验证器,并检查其分支中是否有重复的代码(以查看是否有人从别人那里复制了一个答案)

我选择Jenkins服务器,考虑声纳等,是否正确?我是不是走偏了?我不认为这是不可能的。是的,这可能会很困难,但这让它变得很有趣^^。

我想要的 "流程 "是

  • 每个学生都是一个git组织+repo的一部分。
  • 他们会从本地主文件中创建一个分支(我会施加一个限制,比如 "只使用带有你名字的子文件夹")。
  • 主分支将包含测试
  • 他们会在自己的分支上做作业,然后推给詹金斯-格里特什么的。
  • 分支将以某种方式进行测试,如果所有的测试都通过了,它将与主干合并。

我代表我亲爱的学生,谢谢你们。

git jenkins continuous-integration sonarqube gerrit
2个回答
3
投票

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


你想要的似乎是完全可行的:装上 Git插件 为Jenkins,配置它来跟踪repo的每个分支,就已经可以在每次推送后启动构建了。

由于你可以在Jenkins构建过程中执行任意脚本,你可以给Jenkins用户推送权限,如果所有测试都通过,就可以让它合并并推送代码。

然后,你也可以安装一个声纳服务器,并通过下面的程序调用它。声纳插件你的学生也会得到额外的反馈。

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

我可以想到两种类型的困难。

  1. 脚本的角落案例
  2. 无论你是否想防止学生在系统中玩游戏

对于(1),我的意思是你需要执行你的规则(例如 "只建立属于最后一个提交者的子文件夹";"不在主目录上建立合并提交";...)。而且你很可能会遇到这样的问题。

  • 你不希望一个新的Jenkins运行在一个刚刚被Jenkins作业推送的合并提交上,所以你必须在你的构建脚本中考虑到这一点。
  • 如果你想让几个Jenkins同时运行,并且两个运行同时尝试合并和推送,怎么办?

我想你只需要修复这些小毛病,因为你会发现它们。只要想想创造 备份 的配置(你也可以把它们存储在一个临时的git repo中)。

对于(2),我的意思是,你可能要考虑到,例如,一个学生会从repo中删除他的实现不能通过的测试。或者学生直接推送给master的情况。

我相信你可以添加很多检查来防止这种作弊,但是,比起进入 "技术冲突",我想更健康的做法是告诉他们你信任他们。


0
投票

请看一下 https:/classroom.github.com。自动化您的课程,专注于教学

© www.soinside.com 2019 - 2024. All rights reserved.