應用管理集成了云效的流水線發(fā)布能力,用戶可以配置CICD流水線,完成從源代碼的編譯、測試到部署到應用分組的過程。當前的流水線模板都是從源代碼編譯開始,要求用戶允許云效訪問源代碼。用戶A計劃在應用管理平臺部署用戶B提供的軟件。但B公司的數(shù)據(jù)安全要求不允許將代碼托管到云上,但可以提供編譯后的軟件包,本文提供一種解決方案,實現(xiàn)云下持續(xù)集成和云上持續(xù)部署,具有一定靈活性。
總體架構
主要步驟:
用戶A需要創(chuàng)建好一個OSS bucket用來存儲部署物,并創(chuàng)建一個最小權限的AK給用戶B使用。
用戶B需要在已有的構建工作流中增加一個步驟,將構建出的部署物(比如jar包、war包、壓縮包等等)上傳到用戶A的阿里云OSS bucket。構建出的部署物文件名稱要能夠體現(xiàn)出部署物版本(比如加上版本號、代碼分支信息、commit id等等)
用戶A在應用管理->發(fā)布管理里,創(chuàng)建一條發(fā)布流水線,將源代碼編譯的步驟去掉,改成從OSS下載構建好的部署物。
如果用戶A希望手工部署,可以在應用管理->發(fā)布管理中手工啟動流水線。
如果用戶A、用戶B希望CI和CD整體自動化執(zhí)行,可以在構建工作流加上一步,通過調用云效流水線的web hook自動觸發(fā)執(zhí)行部署流水線。
詳細方案
構建工作流部分需要根據(jù)不同的構建系統(tǒng)進行定制。以Jenkins為例,用戶需要首先在Jenkins機器上安裝oosutil并配置好oosutil的訪問憑證(AK等)。然后在pipeline在構建結束后增加一步,執(zhí)行oosutil將部署物上傳到oss bucket上。本文主要詳述應用管理平臺上的發(fā)布配置。
創(chuàng)建云效流水線,在發(fā)布管理里新建流水線。前提是已經綁定了云效企業(yè)和授權云效發(fā)布ECS。以Java項目為例,可以選擇Java構建部署的模板
在流水線編輯頁面,修改流水線步驟。
將Java構建任務刪除,增加OSS下載任務。從保存部署物的bucket下載指定文件。文件路徑可以帶變量,從而可以部署指定版本的部署物。構建物上傳部分不變。
在ECS應用部署步驟里,部署腳本中解壓包后,啟動應用。注意圖中的腳本僅做演示。
執(zhí)行流水線時,會要求提供變量值,這里我們提供版本號。
如果想通過線下的工作流觸發(fā)云效流水線,可以啟用云效流水線的Webhook觸發(fā),通過webhook即可觸發(fā)流水線。詳情參考文檔Webhook 觸發(fā)流水線。
總結
通過這種方式,實現(xiàn)了云下CI和云上CD的解耦,既可以分開運行,也可以結合在一起。通過使用云效部署應用,可以充分利用到應用管理的動態(tài)分組和彈性伸縮的能力,比如分組中新增或者刪除了ECS實例,不會影響下一次發(fā)布。