2015-02-08 100 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