聊聊DevOps制品管理-不止是存儲(chǔ)制品這么簡(jiǎn)單

什么是制品说庭?

制品是指由源碼編譯打包生成的二進(jìn)制文件裳涛,不同的開發(fā)語言對(duì)應(yīng)著不同格式的二進(jìn)制文件涮较;這些二進(jìn)制文件通常用于運(yùn)行在服務(wù)器上或者作為編譯依賴,“制品的管理”是配置管理的重要組成部分左刽。

通常襟雷,這些組件是各種文件的存檔刃滓,包括:類文件中的Java字節(jié)碼、C對(duì)象文件耸弄、文本文件咧虎、二進(jìn)制文件。組件的多種格式计呈,例如:Java JAR砰诵,WAR,EAR格式捌显;普通ZIP或.tar.gz文件茁彭;其他軟件包格式,例如NuGet軟件包扶歪,Ruby gems理肺,NPM軟件包;可執(zhí)行文件格式,例如.exe 或.sh 文件妹萨,Android APK文件年枕,各種安裝程序格式。

按照使用場(chǎng)景乎完,制品大致分為三類

  1. 外部引入的第三方組件
  2. 產(chǎn)品內(nèi)部依賴包熏兄,公共SDK
  3. 產(chǎn)品交付安裝包

image.png

按照開發(fā)語言,制品類型包含以下類型:

  • Generic File 指的是通用文件類型的制品囱怕。
  • Docker
  • Maven
  • npm
  • PyPI
  • Helm
  • Composer
  • NuGet
  • Conan
image.png

為什么要制品管理霍弹?

  1. 外部依賴下載慢
  • 影響研發(fā)構(gòu)建速度
  1. 版本管理混亂 (svn,ftp)
  • 交付包使用FTP或者SVN進(jìn)行管理,管理粒度相對(duì)較粗娃弓;在這種粗放式的制品管理方式下典格,不同類型包的存儲(chǔ)與獲取是一件頭疼的事情,版本追蹤極其混亂台丛,團(tuán)隊(duì)協(xié)作也是障礙重重耍缴。
  • 由于受到監(jiān)管約束,一鍵部署是不可能任務(wù)挽霉,跨網(wǎng)段的包交付智能依賴于手工拷貝
  1. 安全漏洞風(fēng)險(xiǎn)
  • 依賴組件越多防嗡,引入漏洞的風(fēng)險(xiǎn)也越高
  • 第三方依賴包下載管理混亂,沒有準(zhǔn)入管控
  • 漏洞藏的越深侠坎,修復(fù)漏洞所花費(fèi)的時(shí)間就越長(zhǎng)
  1. 制品存儲(chǔ)風(fēng)險(xiǎn)
  • 團(tuán)隊(duì)內(nèi)部搭建的制品庫是單點(diǎn)的蚁趁,缺乏集群部署
  1. 資源浪費(fèi)
  • 因?yàn)闆]有統(tǒng)一的制品庫,存在重復(fù)建設(shè)的問題实胸;維護(hù)成本高他嫡,或者說目前根本就沒有維護(hù)
image.png

制品和CI/CD流水線

image.png

對(duì)于CI/CD流水線而言,制品起到一個(gè)承上啟下的關(guān)鍵作用庐完,它是持續(xù)集成CI的終點(diǎn)钢属,同時(shí)也是持續(xù)交付CD的起點(diǎn)。

如果缺乏有效的制品管理策略和工具门躯,根本不可能建立高效的流水線淆党;脫離制品管理,每次只能重新從代碼開始構(gòu)建讶凉,對(duì)于任何企業(yè)組織是不可接受的染乌,同時(shí)也不符合“一次構(gòu)建,多次使用”的原則懂讯。

在整個(gè)研發(fā)過程中慕匠,制品對(duì)于測(cè)試人員和運(yùn)維人員至關(guān)重要,他們關(guān)注的是怎么拿到需要的版本進(jìn)行測(cè)試和部署域醇,如果缺乏有效的制品管理,整個(gè)DevOps價(jià)值流就會(huì)出現(xiàn)銜接上的問題。你可能會(huì)碰到這種情況譬挚,測(cè)試同學(xué)會(huì)通過各種方式去詢問那個(gè)版本可以測(cè)試锅铅,包在哪里等情況。

image.png

包的元數(shù)據(jù)

何為包的元數(shù)據(jù)减宣?別人給你一個(gè)包盐须,你怎么知道包里包含了哪些需求缺陷變更,包含了哪些代碼提交漆腌,還有包的md5,hash等信息贼邓。這些信息對(duì)于測(cè)試人員追蹤問題的引入,后續(xù)改進(jìn)闷尿,版本回歸至關(guān)重要塑径,通俗點(diǎn)說,弄清楚制品的前世今生填具。

那么這些信息哪里來统舀?當(dāng)然是持續(xù)構(gòu)建CI流水線,需求劳景,代碼提交都可以通過CI流水線收集誉简。如果你的組織購買過Jfrog的產(chǎn)品,會(huì)發(fā)現(xiàn)這個(gè)特點(diǎn)在的它的平臺(tái)上尤為突出盟广。

制品的晉級(jí)

****在開發(fā)實(shí)踐中闷串,大多數(shù)團(tuán)隊(duì)會(huì)準(zhǔn)備DEV, TEST, UAT, RELEASE等不同的環(huán)境,相應(yīng)的建設(shè)不同的流水線筋量,將制品部署到不同的環(huán)境前都會(huì)對(duì)制品進(jìn)行不同的測(cè)試烹吵,所里這里也衍生出來了制品的晉級(jí),就是給制品設(shè)置不同的準(zhǔn)入門禁毛甲。


image.png

綜上所屬年叮,制品和CI/CD流水線有著緊密的聯(lián)系,不可分割玻募,在設(shè)計(jì)流水線時(shí)候要考慮好制品的使用場(chǎng)景只损。

制品管理工具

如上所述,由于制品管理的重要性七咧,所以衍生出來對(duì)應(yīng)的制品解決方案用來統(tǒng)一管理不同格式的軟件制品跃惫。 除了基本的存儲(chǔ)功能,還提供了版本控制艾栋、訪問控制爆存、安全掃描、依賴分析等重要功能蝗砾,最終建立“單一可信源”先较,是一種企業(yè)處理軟件開發(fā)過程中產(chǎn)生的所有包類型的標(biāo)準(zhǔn)化方式携冤。


image.png

目前主市場(chǎng)上主流的制品管理工具主要有以下幾種:

Nexus

Nexus是一套“開箱即用”的系統(tǒng)不需要數(shù)據(jù)庫,它使用文件系統(tǒng)加Lucene來組織數(shù)據(jù)闲勺。Nexus 使用ExtJS來開發(fā)界面曾棕,利用Restlet來提供完整的REST APIs,通過m2eclipse與Eclipse集成使用菜循。Nexus支持WebDAV與LDAP安全身份認(rèn)證翘地。


image.png

Nexus是少有的支持幾乎所有主流制品格式,并且提供免費(fèi)版的制品管理產(chǎn)品癌幕,這也是大多數(shù)中小公司的選擇衙耕,可以滿足大部分業(yè)務(wù)場(chǎng)景,但是勺远,免費(fèi)版不提供高可用方案橙喘。
價(jià)格參考: https://www.sonatype.com/products/pricing?topnav=true

image.png

由于Nexus在國(guó)內(nèi)沒有代理商,所以大家對(duì)它的認(rèn)知還有限谚中,其實(shí)Nexus僅僅是sonatype產(chǎn)品解決方案的一種渴杆,提供對(duì)軟件研發(fā)周期的制品管理方案。
image.png

Jfrog Artifactory

Jfrog是一家以色列公司宪塔,專注于制品管理環(huán)境磁奖,提供商用的解決方案,所以它的產(chǎn)品是要花錢的某筐。


image.png

下圖列出了Jfrog Artifactory和Nexus的產(chǎn)品特點(diǎn)對(duì)比比搭,僅供參考。既然是掏錢買的南誊,肯定比免費(fèi)的Nexus提供的支持和服務(wù)更多身诺,包括高可用,組件的漏洞風(fēng)險(xiǎn)分析抄囚,多地分發(fā)等等霉赡。不是說Nexus不行,而是我們大家用的大部分都是Nexus的免費(fèi)版幔托,其實(shí)它的收費(fèi)版也提供類似的方案穴亏。


image.png

Harbor

Harbor是VMware公司開源的企業(yè)級(jí)Docker Registry項(xiàng)目,其目標(biāo)是幫助用戶迅速搭建一個(gè)企業(yè)級(jí)的Docker registry服務(wù)重挑。

基于官方 Registry V2 實(shí)現(xiàn)嗓化,提供了管理UI,基于角色的訪問控制(Role Based AccessControl)谬哀,AD/LDAP集成刺覆、以及審計(jì)日志(Auditlogging) 等企業(yè)用戶需求的功能,通過添加一些企業(yè)必需的功能特性史煎,例如安全谦屑、標(biāo)識(shí)和管理等驳糯,擴(kuò)展了開源 Docker Distribution。

Harbor目前已經(jīng)成為私有Docker/Helm管理的主要工具伦仍,相比于Nexus, Harbor在docker鏡像的管理方面更有優(yōu)勢(shì)结窘,提供鏡像同步服務(wù),支持團(tuán)隊(duì)項(xiàng)目隔離充蓝。在實(shí)踐過程中,筆者發(fā)現(xiàn)Nexus在docker鏡像的團(tuán)隊(duì)隔離方面上喉磁,存在一些問題谓苟。


Snipaste_2022-02-19_09-39-12.png

WePack

WePack是騰訊Coding基于之前的DevOps拆分出來的單獨(dú)的制品管理服務(wù),支持私有化部署协怒。也許也是看到單獨(dú)的制品管理工具涝焙,比大而全的DevOps平臺(tái)更好的切入用戶場(chǎng)景吧。


image.png

image.png

如何管理制品孕暇?

為了統(tǒng)一管理不同語言格式的包仑撞,以上制品管理工具幾乎都按照如下方式管理組織制品。

制品庫的層級(jí)關(guān)系為:倉庫 > 包 > 版本妖滔,每個(gè)層級(jí)描述如下:

  • 倉庫:用于管理不同類型的倉庫和倉庫下的包資源隧哮,可以設(shè)置倉庫對(duì)外的訪問權(quán)限。
  • 包:構(gòu)建產(chǎn)物對(duì)外提供訪問的基礎(chǔ)單元座舍,用于介紹當(dāng)前構(gòu)建產(chǎn)物的用途和使用指引沮翔。
  • 版本:列出某個(gè)包下的所有構(gòu)建產(chǎn)物,詳細(xì)記錄了每次構(gòu)建產(chǎn)物的版本迭代更新變化曲秉。

規(guī)范制品庫命名

如果團(tuán)隊(duì)比較大一采蚀,對(duì)制品管理的要求不高,按照以上方式基本可以滿足需求承二。但是榆鼠,如果建設(shè)公司級(jí)別的需要規(guī)范一些命名,如下所示


image.png

image.png

制品版本號(hào)規(guī)范化

制品的版本號(hào)用于標(biāo)記特定制品亥鸠,通過規(guī)范化命名有助于自動(dòng)化腳本的編寫和流水線的復(fù)用妆够。


image.png

制品庫權(quán)限規(guī)范化

不管是基于開源工具,還是自研工具读虏,基于制品倉庫的權(quán)限設(shè)計(jì)也是必要的责静,做到團(tuán)隊(duì)產(chǎn)品的隔離。


image.png

開源制品的安全風(fēng)險(xiǎn)

對(duì)于制品的管理盖桥,大多人數(shù)都停留在僅僅是存儲(chǔ)灾螃,拉取使用的想法,筆者今年前也是這種思維揩徊。2021年末的Log4j2的安全事件腰鬼,引起了整個(gè)IT圈的軒然大波嵌赠,這個(gè)開源組件幾乎涉及所有的java應(yīng)用,每個(gè)公司不得不緊急排查自己產(chǎn)品是否引入該風(fēng)險(xiǎn)熄赡。

通過該事件姜挺,讓我們開始關(guān)注開源組件可能存在的風(fēng)險(xiǎn),這也是目前比較熱門的研發(fā)過程中的“供應(yīng)鏈安全”彼硫,也是DevSecOps其中重要的一個(gè)環(huán)節(jié)炊豪。

image

作為研發(fā)過程中的制品管理,引入階段的審核機(jī)制拧篮,使用中的安全词渤,越來越成為大家關(guān)注的熱點(diǎn)。如果所示串绩,組織需要引入組件審核制度缺虐,杜絕開發(fā)人員隨意的拉取互聯(lián)網(wǎng)的開源制品,并且建立實(shí)時(shí)的漏洞掃描機(jī)制礁凡,形成組織級(jí)的白名單倉庫高氮。


image.png

SBOM-軟件物料清單

現(xiàn)代軟件主要是使用第三方和開源組件組裝而成的,它們以復(fù)雜而獨(dú)特的方式融合在一起顷牌,并與原始代碼集成以實(shí)現(xiàn)所需的功能剪芍。除了通過在開源組件引入階段加入安全審核機(jī)制,IT企業(yè)往往也需要關(guān)注自己開發(fā)或使用的軟件產(chǎn)品的組成韧掩,像我們?cè)诔匈徺I食品時(shí)在食品包裝上看到的食品配料清單紊浩,標(biāo)注了所用的所有材料。

為了準(zhǔn)確摸清軟件所含組件的情況疗锐,SBOM(即:Software Bill Of Materials)應(yīng)運(yùn)而生坊谁,其包括多種關(guān)鍵信息,如:組件名稱滑臊、版本號(hào)口芍、供應(yīng)商等,這些關(guān)鍵信息在分析軟件安全時(shí)發(fā)揮著關(guān)鍵作用雇卷。通過這些信息鬓椭,可以追溯軟件的原始供應(yīng)鏈,極大提高開發(fā)者對(duì)其所用軟件安全風(fēng)險(xiǎn)的理解关划,幫助企業(yè)在網(wǎng)絡(luò)安全風(fēng)險(xiǎn)分析小染、漏洞管理和應(yīng)急響應(yīng)過程中提高效率。


image.png

對(duì)軟件開發(fā)企業(yè)而言贮折,SBOM可有效控制開源組件風(fēng)險(xiǎn)裤翩,幫助企業(yè)更早識(shí)別并消除開源組件安全缺陷和許可風(fēng)險(xiǎn);對(duì)軟件采購企業(yè)而言调榄,SBOM可幫助采購決策者輕松了解開發(fā)方軟件是否存在開源組件風(fēng)險(xiǎn)踊赠;對(duì)軟件開發(fā)人員而言呵扛,SBOM可幫助開發(fā)人員全面準(zhǔn)確掌握其所研發(fā)軟件的開源組件情況。


image.png

總結(jié)

  • 制品管理是DevOps實(shí)踐過程中的重要環(huán)節(jié)筐带,起著承上啟下今穿,收集過程信息的重要角色;
  • 于此同時(shí)伦籍,制品的引入使用會(huì)存在安全風(fēng)險(xiǎn)蓝晒,組織需要關(guān)注這一點(diǎn),避免類似Log4j2安全事件帶來的一系列風(fēng)險(xiǎn)鸽斟;
  • 作為實(shí)踐者拔创,在制品的管理上需要結(jié)合組織和流水線需要,指定相應(yīng)的規(guī)范富蓄,避免混亂;
  • 好的制品管理流程慢逾,可減少開發(fā)自測(cè)和測(cè)試人員進(jìn)行接收測(cè)試銜接過程中的低效溝通立倍;

這里僅僅是對(duì)制品管理做了全局的梳理,后續(xù)會(huì)對(duì)其中具體的知識(shí)點(diǎn)進(jìn)行詳細(xì)介紹侣滩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末口注,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子君珠,更是在濱河造成了極大的恐慌寝志,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件策添,死亡現(xiàn)場(chǎng)離奇詭異材部,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)唯竹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門乐导,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浸颓,你說我怎么就攤上這事物臂。” “怎么了产上?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵棵磷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我晋涣,道長(zhǎng)仪媒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任姻僧,我火速辦了婚禮规丽,結(jié)果婚禮上蒲牧,老公的妹妹穿的比我還像新娘。我一直安慰自己赌莺,他們只是感情好冰抢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艘狭,像睡著了一般挎扰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上巢音,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天遵倦,我揣著相機(jī)與錄音,去河邊找鬼官撼。 笑死梧躺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的傲绣。 我是一名探鬼主播掠哥,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼秃诵!你這毒婦竟也來了续搀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤菠净,失蹤者是張志新(化名)和其女友劉穎禁舷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毅往,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牵咙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了煞抬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霜大。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖革答,靈堂內(nèi)的尸體忽然破棺而出战坤,到底是詐尸還是另有隱情,我是刑警寧澤残拐,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布途茫,位于F島的核電站,受9級(jí)特大地震影響溪食,放射性物質(zhì)發(fā)生泄漏囊卜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望栅组。 院中可真熱鬧雀瓢,春花似錦、人聲如沸玉掸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽司浪。三九已至泊业,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啊易,已是汗流浹背吁伺。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留租谈,地道東北人篮奄。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像割去,于是被迫代替她去往敵國(guó)和親宦搬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355