git - 学生作业的持续集成

标签 git jenkins continuous-integration sonarqube gerrit

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

我在本地大学教授数据结构和算法实验室,希望为我的学生提供流畅而有趣的体验。到目前为止,我使用的是一个简单的 git 存储库,每个学生都 fork,每当他们完成作业时,他们都会发出推送 + pull 请求,我会审查他们的代码,如果一切正常,我会将 pull 请求 merge 到主 repo 。这工作得很好,但我想做一些更有趣的事情。

该实验室正在使用 C(甚至不是 C++)进行教学(不,我不想就为什么另一种语言会更好进行任何争论)。我想要做的是在学生进行的每次推送时运行类似 Jenkins 构建的东西,以验证手头任务的一些预定义测试。

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

我有什么:

  • 24/7 运行 CentOS 机器,我可以用它来放任何东西(我有 Jenkins 和 Tomcat 在它上面运行 atm)
  • 有足够的时间和意志力让他们在这个实验室的经历变得物有所值

++ 所有这一切的一个非常好的“附加组件”将是使用 Sonar 之类的东西作为代码验证器并检查其分支内的重复代码(以查看是否有人复制了其他人的答案)

我选择 Jenkins 服务器、考虑 Sonar 等是否走在正确的轨道上?我走远了吗? 我不认为这是不可能的。是的,这可能很难,但这很有趣 ^^

我想要的“流程”是:

  • 每个学生都是 git 组织的一部分 + repo
  • 他们从本地 master 创建一个分支(我会施加一个限制,比如“只使用你名字的子文件夹”)
  • 主分支将包含测试
  • 他们将在他们的分支上完成他们的家庭作业,然后将其推送给 Jenkins/Gerrit/其他
  • 分支将以某种方式进行测试,如果所有测试都通过,它将与主分支 merge 。

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

最佳答案

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


你想要的似乎完全可行:安装 Git plugin对于 Jenkins,将其配置为跟踪 repo 的每个分支,并且已经可以在每次推送后启动构建。

由于您可以在 Jenkins 构建期间执行任意脚本,因此您可以向 Jenkins 用户授予推送权限,并在所有测试通过时 merge 并推送代码。

然后你也可以安装 Sonar 服务器,并通过Sonar plugin调用它。 ,您的学生将获得此额外反馈。

另一方面,Gerrit 对于您正在寻找的东西来说可能有点矫枉过正。或者更确切地说:它是一个有值(value)的工具,但我相信您在第一次迭代时不需要它。

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

  1. 脚本/边角案例
  2. 是否要防止学生玩弄系统

对于 (1),我的意思是您需要实现您的规则(例如“只构建属于最后一个提交者的子文件夹”;“不要在 master 上构建 merge 提交”;...) .您可能会遇到以下问题:

  • 您不希望在 Jenkins 作业刚刚推送的 merge 提交上运行新的 Jenkins,因此您必须在构建脚本中考虑到这一点
  • 如果你想允许多个 Jenkins 同时运行,并且两个运行尝试同时 merge 和推送怎么办

我想您只需要在发现这些故障时对其进行修复即可。想想创建 backups您的 Jenkins 配置(您也可以将它们存储在临时的 git 存储库中)。

对于 (2),我的意思是您可能想要考虑,例如,学生将从存储库中删除他的实现无法通过的测试的情况。或者直接push master的学生的情况。

我相信你可以添加很多检查来防止这种作弊,但是,与其陷入“技术冲突”,我想直接告诉他们你信任他们会更健康。

关于git - 学生作业的持续集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28390462/

相关文章:

git - 在 Git 中,有没有办法将文件标记为 "pure"?

仅通过 Jenkins 启动时,Android 模拟器 80% 的时间无法启动

jenkins - 是否可以从 "Build other Projects"下的常规 Jenkins 作业触发多分支管道作业?

testing - 用于类/作业自动测试和评分的 Travis CI

Git 返回 "Failed to store ssl session"

git - 如何修复 git 证书错误?

java - GIT 分支可以有数据子集吗?

macos - 使用 Jenkins 发布到 FTPS

c# - 你如何从 Jenkins 运行 NUnit 测试?

continuous-integration - 无人机 0.8 : build stuck in pending state