介紹一種新的資源控制管理器:SCM-Manager
譯文【51CTO.com快譯】如果您和您的團(tuán)隊(duì)正在使用Git或Subversion之類的源代碼控制管理系統(tǒng)(source control management,SCM),您可能會需要一個管理層,以恰當(dāng)?shù)姆绞饺ス芾碛脩舻脑L問和存儲庫。目前,GitHub、GitBlit、以及GitLab等都是該領(lǐng)域流行、且強(qiáng)大的管理方案。當(dāng)然,如果您計劃使用Jenkins之類的自動化服務(wù)器,去創(chuàng)建自己的構(gòu)建和部署管道的話,則還需要托管自己的存儲庫管理器。
當(dāng)然,客觀而言,GitLab等方案不但管理起來非常復(fù)雜,往往需要一定的實(shí)踐經(jīng)驗(yàn);而且為了保持良好的運(yùn)行性能,往往對硬件資源的要求并不低。因此,為了克服這些困難,我們可以考慮引入的工具--SCM-Manager[1]。它不但簡單、可擴(kuò)展,而且運(yùn)行起來快速且高效。
SCM-Manager是一款德國制造的工具。由于在MIT的許可下是開源的,因此它允許被用于商業(yè)用途,而且其代碼可以在GitHub上獲取到。該項(xiàng)目最初只是被用于研究目的,而在其2.0版本之后,被Cloudogu公司接手管理和開發(fā)了其各種代碼庫,以便為各個公司提供專業(yè)的企業(yè)級支持。
從安裝開始
下面,讓我們來領(lǐng)略一下其簡單的安裝步驟。為了快速獲取結(jié)果,您可以使用其官方的Docker容器[2],并輸入如下簡單命令。
- docker run --name scm –restart=always \
- -p 8080 -p 2222 \
- -v /home/<user>/scmManager:/var/lib/scm \
- scmmanager/scm-manager:2.22.0
首先,讓我們基于SCM-Manager的2.22.0鏡像,來創(chuàng)建一個名為scm的容器。然后,我們需要讓容器能夠跟隨著主機(jī)操作系統(tǒng)的重新啟動而自動重啟。同時,為了讓它能夠被訪問到,我們需要打開端口2222和8080。最后,我們需要在容器內(nèi)掛載一個存儲了所有配置數(shù)據(jù)和存儲庫的目錄。
當(dāng)然,您也可以參照如下安裝清單,通過使用apt,讓SCM-Manager能夠在Ubuntu之類的Linux服務(wù)器上運(yùn)行起來。
- echo 'deb [arch=all] https://packages.scm-manager.org/repository/apt-v2-releases/ stable main' | sudo tee /etc/apt/sources.list.d/scm-manager.list
- sudo apt-key adv --recv-keys --keyserver hkps://keys.openpgp.org 0x975922F193B07D6E
- sudo apt-get update
- sudo apt-get install scm-server
此外,SCM-Manager也可以被安裝在Windows或Apple等系統(tǒng)上。您可以在對應(yīng)的下載頁面[3]上,找到與各種系統(tǒng)相對應(yīng)的安裝信息。如下圖所示,在執(zhí)行安裝時,您會在控制臺中,看到各種帶有啟動令牌的日志條目。
圖 1:命令行中的啟動令牌
接著,就可以打開瀏覽器,并輸入localhost:8080。您可以在其中通過創(chuàng)建并初始一個管理帳戶,以完成安裝。如圖2所示,您需要從命令行處粘貼啟動令牌,并在提交了初始化表單之后,重定向到登錄頁面上。這些前期準(zhǔn)備估計將在5分鐘之內(nèi)完成。
圖 2:初始化頁面
如果您想嘗試完整的、非值守式安裝腳本,可以使用系統(tǒng)屬性scm.initalPassword,繞過初始化表單。它將使用給定的密碼,去創(chuàng)建一個名為scmadmin的用戶。
在舊版本的SCM-Manager中,其默認(rèn)的管理員登錄帳戶是scmadmin,密碼為scmadmin。從安全角度來說,如果該帳戶不在安裝后手動禁用掉,則會給系統(tǒng)引入較高的風(fēng)險隱患。不過,值得慶幸的是其2.21及其以后的版本,都改進(jìn)了該安全漏洞。
插件
SCM-Manager可以通過插件的擴(kuò)展,來實(shí)現(xiàn)最小化安裝,并添加更多的實(shí)用功能。值得注意的是,隨著已安裝插件的增多,SCM-Manager需要獲取的資源也會增加。因此,您的開發(fā)團(tuán)隊(duì)需要根據(jù)實(shí)際需求,排定插件的優(yōu)先級和必要性。
圖 3:已安裝的插件
您可以通過管理(Administration)選項(xiàng)卡,按需進(jìn)行插件的安裝。如果您看不到該選項(xiàng)的話,則可能是因?yàn)槟鷽]有獲取管理權(quán)限。在界面的右側(cè)菜單中,您可以找到相應(yīng)的插件入口。該插件菜單分為:已安裝和可用,兩個部分。為了更好地方便瀏覽,各種插件已按照管理(Administration)、授權(quán)(Authorization)和工作流(Workflow)等進(jìn)行了組織與分類。而且,每個插件都配有簡短且精準(zhǔn)的描述。其中會包含一些預(yù)安裝的插件。例如,在源代碼管理類別中,支持存儲庫類型的Git、Subversion和Mercurial,都是無法被卸載的。
而在授權(quán)部分中,路徑寫保護(hù)(Path Write Protection)、分支寫保護(hù)(Branch Write Protection)、以及標(biāo)簽保護(hù)(Tag Protection),都是對于構(gòu)建和配置管理器非常實(shí)用和易于安裝的插件。
特殊權(quán)限
讓我們假設(shè)有一個Java/Maven項(xiàng)目。其規(guī)則是,只允許特定的人員去更改pom.xml的內(nèi)容,并構(gòu)建相應(yīng)的邏輯。對此,我們可以通過路徑寫保護(hù)插件來實(shí)現(xiàn)。具體而言,在完成安裝之后,請導(dǎo)航到代碼存儲庫,并在界面的右側(cè)菜單中選擇設(shè)置(Settings),然后單擊選項(xiàng)路徑權(quán)限(Path Permissions),以啟用該復(fù)選框。
圖 4:配置路徑權(quán)限
如上圖所示,我創(chuàng)建了一條規(guī)則:只有用戶Elmar Dott才能修改pom.xml。而且,該權(quán)限涵蓋了所有的現(xiàn)有分支。由于其反向權(quán)限是排他的,因此如果文件或路徑表達(dá)式不存在的話,該規(guī)則將無法被創(chuàng)建。為了便于管理,我們會將現(xiàn)有的用戶進(jìn)行分組。
據(jù)此,當(dāng)您的團(tuán)隊(duì)使用大量分支或git-flow分支模型時,您可以通過該選項(xiàng),保護(hù)各個分支免受不必要的更改。同時,那些擁有開發(fā)者分支的個人開發(fā)者,將僅有寫入權(quán)限;而配置管理團(tuán)隊(duì)成員,則擁有運(yùn)行CI/CD管道的發(fā)布分支權(quán)限。
拉取請求
讓我們來討論另一個實(shí)用的功能—審查插件(review plugin)。該插件能夠?yàn)槟拇鎯靻⒂美≌埱?。完成了審查插件的安裝之后,在您的存儲庫菜單中,會出現(xiàn)一個名為Pull Requests[4]的新的項(xiàng)目符號。
最初,拉取請求是為了讓開源項(xiàng)目保證代碼質(zhì)量而設(shè)計的。這種范式的另一個名稱叫做獨(dú)斷工作流(dictatorship workflow)[5]。每個開發(fā)人員都可以將各自的更改提交到存儲庫處,而存儲庫的所有者將會決定把哪個修訂版整合到代碼庫中。
讓我們假設(shè)一個場景:如果你在GitHub上托管了自己的項(xiàng)目源,其他人想?yún)⑴c到您的項(xiàng)目中。那么,他們必須先將存儲庫分叉到他們自己的GitHub空間里。而在他們對該分叉存儲庫提交了某些修訂后,就需要創(chuàng)建針對原始存儲庫的拉取請求。同時,作為存儲庫的所有者,您需要判定是否接受此類拉取請求??梢?,拉取請求的方式可以被用作代碼審查工具,進(jìn)而真正地提高項(xiàng)目中的代碼質(zhì)量。
存儲庫管理
SCM-Manager結(jié)合了三種不同的源代碼控制管理存儲庫--Git、Subversion(SVN)和Mercurial。雖然Subversion已顯得有些過時,但是許多公司仍然必須使用SVN,去管理各種遺留的項(xiàng)目。畢竟將這些項(xiàng)目遷移到其他技術(shù)棧,所導(dǎo)致的風(fēng)險或成本可能是高昂的。因此,我們需要擁有一個可以管理多個存儲庫類型的解決方案。
如果您正在使用SVN,那么請留意Subversion在其目錄中是如何組織分支和標(biāo)簽的。通常,SVN存儲庫會使用如下文件夾進(jìn)行初始化:
- 主干——類似Git中的主(master)分支。
- 分支——指向主干中已被分叉(forked)的修訂,那些更改的代碼可以被提交。
- 標(biāo)簽——類似沒有新代碼修訂的分支。
而在Git中,您并不需要此類文件夾結(jié)構(gòu),畢竟分支的組織方式是完全不同的。與Subversion相比,Git(和Mercurial)是一個分布式的源代碼控制管理系統(tǒng),其分支失去了耦合。因此,它們一旦“過時”,則會被直接刪除掉。
Readme
如果readme.md文件位于項(xiàng)目的根文件夾中,readme插件就會被激活。您在導(dǎo)航到存儲庫后,readme.md文件將以HTML的格式呈現(xiàn)出來。
圖 5:存儲庫的readme.md呈現(xiàn)
如果您希望存儲庫的各項(xiàng)活動既可讀、又可視化的話,則需要用到活動插件。它會在標(biāo)題菜單中創(chuàng)建一個名為活動(Activity)的導(dǎo)航入口。在此,您既能夠看到所有提交的日志條目,又可以進(jìn)入已選修訂的詳細(xì)視圖。
圖 6:活動視圖
類似TortoiseGit的客戶端,此類視圖也會包含一個比較和歷史瀏覽器。而存儲庫管理器(Repository Manager)還會包含更多日常運(yùn)作的細(xì)節(jié)。其中會有一個代碼編輯器,能夠允許您直接在SCM-Manger的用戶界面中,對各種文件進(jìn)行修改。
用戶和組的管理
在SCM-Manager中,創(chuàng)建新用戶其實(shí)非常簡單。您只需切換到“用戶(Users)”選項(xiàng)卡,然后按下“創(chuàng)建用戶(create user)”按鈕即可。一旦您填寫了表單,并完成保存之后,將可以看到用戶的相關(guān)概覽。
圖 7:創(chuàng)建一個新用戶
至此,您已經(jīng)可以看到新創(chuàng)建的用戶了。接著,您需要管理用戶的權(quán)限。目前新用戶并無任何權(quán)限。若要更改,您只需單擊新創(chuàng)建的用戶名稱,在用戶的詳細(xì)信息頁面上右擊,在菜單項(xiàng)上依次選擇設(shè)置(Settings)->權(quán)限(Permissions)即可。您可以在此為用戶選擇恰當(dāng)?shù)臋?quán)限,并在完成后保存更改。接著,您可以試著注銷,并以該用戶的身份重新登錄,以確認(rèn)其權(quán)限。
如果您需要管理大量的用戶,則最好將其分組。我們可以通過標(biāo)題導(dǎo)航中的組(Group)菜單項(xiàng),來管理組的權(quán)限。您可以創(chuàng)建一個新的組,并從其右側(cè)的菜單中,選擇相應(yīng)的權(quán)限。其具體配置形式,與用戶管理的配置十分相似。如果您希望將現(xiàn)有的用戶添加到特定組中,請切換到通用(General)標(biāo)簽,在其成員(Members)的字段中,搜索到該用戶,進(jìn)而使用添加成員(Add Member)按鈕進(jìn)行添加。最后,請記得提交表單,并保存所有的權(quán)限更改。
為了體現(xiàn)靈活性,SCM-Manager也允許同一個用戶被添加到多個組(或角色)中。注意,請不要輕易將用戶歸并到過多的組中,以免用戶繼承了不該授予的權(quán)限。目前,SCM-Manager尚無法通過簡要的概述,列舉并查看哪些用戶在哪些組中,繼承了何種權(quán)限。希望其將來的版本會有所改進(jìn)。
此外,除了SCM-Manager提供的內(nèi)部用戶管理,您還可通過插件,將應(yīng)用程序與LDAP相連接。
小結(jié)
除了上面提到的SCM-Manager的基本功能,我們既能夠使用其API去創(chuàng)建各種可執(zhí)行的腳本,又可以讓Jira、Timescale、以及Prometheus等基礎(chǔ)設(shè)施工具與SCM-Manager相集成。此外,SCM-Manager還提供了Jenkins自動化服務(wù)器的插件??傊?,如果您有興趣的話,不妨試用一下這款全新的資源控制管理器。
文中參考
[1] https://www.scm-manager.org
[2] https://hub.docker.com/r/scmmanager/scm-manager
[3] https://www.scm-manager.org/download/
[4] https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
[5] https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows
原文標(biāo)題:Tooltime: SCM-Manager,作者:Elmar Dott
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】