在軟件開發中,“制品”指的是軟件開發過程中產生的所有文件和信息,包括源代碼、配置文件、編譯后的二進制文件、庫文件、文檔、測試腳本、設計文檔等等。
在傳統的軟件開發模式中,開發和運維是兩個相對獨立的團隊,彼此之間的協作和溝通相對較少。開發團隊將代碼交給運維團隊,然后運維團隊負責將代碼部署到生產環境中。這種傳統的開發和運維分離模式導致了許多問題,例如延遲的交付、手動的部署過程、高錯誤率和缺乏可靠性等。
01.原始階段
制品的概念并不是天生就存在于軟件開發當中。最早可以追溯到早期的80年代,即原始階段,軟件開發尚處于“瀑布式”的前線模式。在這個階段,軟件開發主要關注的是源代碼,而其它的如編譯后的二進制文件、配置文件等被視為次要的或者是暫時的,沒有列入系統的管理。
制品通常被保存在開發者自己的開發環境中,或者通過比如FTP這樣的簡單方法共享給其它的開發者。這些制品的版本追蹤和管理主要依賴于開發者自身的記憶或者一些簡單的文本文件記錄。對于制品的使用和依賴關系,也大多是手動管理。
在這種情況下,制品管理會面臨很多問題。
1)制品的存儲和共享方式
在制品的一致性和唯一性上面會有很大的風險。同一份制品可能會存在多個不一致的拷貝,或者被誤操作覆蓋或者刪除。
2)制品的版本管理
在沒有專門工具輔助的情況下,制品的版本很難做到準確追蹤和控制。更糟糕的是,這種方式完全無法管理制品之間的依賴關系。
3)制品的協同方式
開發者很難找到需要的制品,更沒有一個統一的平臺來支持制品的協同修改和更新。
在這個階段,我們看到了最原始制品管理的形態。
02.工業階段
2001年,Apache Ant發布,這是一個用于自動化構建Java應用的工具,首次在項目中引入了類似制品庫的“lib”目錄來存放所有的依賴庫。這是首次原始概念的提出,同一年,十七位軟件開發領域重量級人物發布了“敏捷軟件開發宣言”,包括 Extreme Programming(XP) 的創建人 Kent Beck,Scrum 方法的創始人 Jeff Sutherland 和 Ken Schwaber,以及許多其他知名的編程方法和工具的創造者。這次會議也帶動了很多的軟件開發方法和流程開始向敏捷方式轉變,同時也標志著制品管理逐漸向標準化,規范化演變。
2006年,JFrog公司發布了Artifactory,這是業界首個提供完全的制品生命周期管理的商業制品庫。Artifactory對接了Maven的中央倉庫,并提供了諸如訪問控制、復制、存檔、元數據、搜索等高級特性。從這一年開始,制品庫成為DevOps工具鏈中一項重要的能力,并且也為DevOps理念的誕生以及廣泛傳播,筑造了堅實的基礎。
同時DevOps理念的提出,將開發和運維的關系推向了一個新的階段,這個階段要求開發和運維不再分隔,而是要求他們緊密的協作,研發與運維團隊也迫切地需要一種能夠支持高效部署和管理的方式。這無疑給制品管理帶來了巨大的壓力,但也帶來了前所未有的機遇。
在這個背景下,制品管理的標準概念應運而生。即制品管理的基本思想是將軟件交付過程中的構建產物、依賴和配置等全部統一管理起來。它提供了一個集中的庫或存儲空間,使得開發人員和運維人員可以方便地訪問和共享這些制品。通過制品管理,團隊可以更好地控制和管理軟件制品的版本、變更和發布,實現持續集成和持續交付的目標。
03.信息化階段
隨著CI/CD等DevOps實踐的普及,越來越多的組織開始認識到制品管理的重要性,即制品管理的信息化階段。在2014年,Nexus Repository Manager首次發布。這是一個開源的制品管理工具,主要用于管理軟件的依賴和構建制品。Nexus的出現標志著制品管理工具開始得到更多關注和應用。各種制品管理工具和平臺也紛紛涌現,例如最早的Jfrog,國內的嘉為藍鯨CPack、Coding制品庫等。這些工具提供了豐富的功能,如版本控制、依賴管理、構建流水線等,同時也有豐富的部署實施方案,如企業私服、唯一可信源等等,幫助團隊實現高效的制品管理。
制品管理作為軟件開發一種重要的方法論,正從前線作戰逐漸轉變為后勤支持,最終會實現從開發到運維的全生命周期管理。透過對制品管理發展歷程的審視,我們可以明顯地看到制品管理越來越重要,而這只是一個開始,未來制品管理還將有更廣闊的應用前景,智能化、自動化、跨平臺與云原生等新概念、新能力、也在融進現在的制品管理。
申請演示