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研發運維一體化的信息







