好吧,这可能听起来有点奇怪,但它是这样的。
我在当地大学教授数据结构和算法实验室,希望给我的学生一个流畅而有趣的体验。到目前为止,我使用了一个简单的git仓库,每个学生都会分叉,每当他们完成一个任务,他们就会提出一个push+pull请求,我会审查他们的代码,如果一切正常,我会将pull请求合并到主仓库。这很好用,但我想做一些更有趣的事情。
这个实验室是用C语言(甚至不是C++)来教的(不,我不想在这里讨论为什么其他语言会更好)。我想做的是让学生在每一次推送时都运行类似Jenkins的构建,以验证手头任务的一些预定义测试。
例如,在第2周,我会给他们一个带有列表的家庭作业。我想自己编写这个作业的测试,然后用这些测试自动验证他们做了什么。
我有什么可用的。
++ 一个非常好的 "附加 "功能是使用类似声纳的东西作为代码验证器,并检查其分支中是否有重复的代码(以查看是否有人从别人那里复制了一个答案)
我选择Jenkins服务器,考虑声纳等,是否正确?我是不是走偏了?我不认为这是不可能的。是的,这可能会很困难,但这让它变得很有趣^^。
我想要的 "流程 "是
我代表我亲爱的学生,谢谢你们。
TL;DR:是的,你想做的事情是可行的,你已经在寻找正确的工具。
你想要的似乎是完全可行的:装上 Git插件 为Jenkins,配置它来跟踪repo的每个分支,就已经可以在每次推送后启动构建了。
由于你可以在Jenkins构建过程中执行任意脚本,你可以给Jenkins用户推送权限,如果所有测试都通过,就可以让它合并并推送代码。
然后,你也可以安装一个声纳服务器,并通过下面的程序调用它。声纳插件你的学生也会得到额外的反馈。
另一方面,Gerrit对于你所寻找的东西可能有点矫枉过正。或者说:它是一个很有价值的工具,但我相信你不需要在第一次迭代时使用它。
我可以想到两种类型的困难。
对于(1),我的意思是你需要执行你的规则(例如 "只建立属于最后一个提交者的子文件夹";"不在主目录上建立合并提交";...)。而且你很可能会遇到这样的问题。
我想你只需要修复这些小毛病,因为你会发现它们。只要想想创造 备份 的配置(你也可以把它们存储在一个临时的git repo中)。
对于(2),我的意思是,你可能要考虑到,例如,一个学生会从repo中删除他的实现不能通过的测试。或者学生直接推送给master的情况。
我相信你可以添加很多检查来防止这种作弊,但是,比起进入 "技术冲突",我想更健康的做法是告诉他们你信任他们。
请看一下 https:/classroom.github.com。自动化您的课程,专注于教学