GitHub已經是全球開原始碼的大本營了,通過以下統計你可以看到僅僅javascript在github就有超過32萬個活動的repo。很多開發人員都會把自己的一部分程式碼分享到github上進行開源,一方面可以提高自己在程式設計領域的知名度,也可以吸引其他的開發人員幫助你一起改進,當然還可以認識更多的朋友,要不怎麼說github其實是個交友網站呢。
但是github上免費的repo只能是公開的,對於一些我們不希望完全開源的專案,就沒有辦法免費分享了,當然你可以付費升級到專業版,這樣就可以託管私有repo了。
Visual Studio Team System是微軟提供的免費的企業級軟體開發Saas服務,提供免費的私有git repo服務。我周圍的很多朋友都將自己或者公司的專案託管在VSTS上,其中也有一部分是開源的。
結合GitHub免費的公有repo和VSTS上免費的私有repo,我們可以搭建一套內外結合的開原始碼開發平臺,讓我們可以控制哪些程式碼開源,同時接受社群對開原始碼的貢獻。常見場景主要有:
- 將私有的repo的master分支與公有repo的master分支進行雙向同步,支援主要發行版與社群的分享,接受PR。
- 將私有repo的特定分支與公有repo的master分支進行雙向同步,支援特定發行版與社群的分享,接受PR;在內部經過新一輪PR後併入私有master分支。
- 支援私有發行版與公有發行版的差異化釋出。
- 支援自動和手動同步。
在VSTS上建立CI來完成同步配置
VSTS上的CI引擎內建對GitHub和VSTS本身自帶的git的支援,藉助這個功能我們可以很容易的建立同步機制。
1. 建立從VSTS到GitHub的同步作業
建立一個構建定義,使用Empty的模版,選擇VSTS上的repo作為程式碼來源
在裡面新增2個Command line的任務,分別配置成以下命令
Git pull https://github.com/ups216/vsalm-hols.git master Git push https://$(githubtoken)@github.com/ups216/vsalm-hols.git head:master
你會注意到在第二個命令中我使用了一個叫做$(githubtoken)的引數。你可以通過GitHub生成這樣一個Personal Access Token,並使用以下頁面繫結到構建定義,這樣在執行的時候使用者是看不到這個token的具體內容的。
注意圖中箭頭所指向的加鎖標註,VSTS會採用加密的方式儲存金鑰,確保使用者看不到具體內容。
2. 建立從GitHub到VSTS的同步作業
這裡的配置過程相反,在第一步我們建立一個從GitHub上獲取程式碼的構建定義
然後執行以下兩個命令
Git pull https://$(vststoken)@almnetworks.visualstudio.com/DefaultCollection/_git/vsalm-hols master Git push https://$(vststoken)@almnetworks.visualstudio.com/DefaultCollection/_git/vsalm-hols head:master
你會注意到這裡在pull和push的命令上都用了$(vststoken)引數,這是因為我們所操作的vsts上的repo是一個私有的repo,讀取和寫入都需要認證。
建立好以上配置我們就可以測試這個雙向同步過程了,以下是測試視訊:
以上是最簡單的真對master分支的雙向同步配置,如果需要同步特定分之,我們只需要對git命令進行簡單修改即可。
請關注微信公眾號 【devopshub】,獲取更多關於DevOps研發運維一體化的資訊