本文將介紹如何基于云效Flow的標簽功能實現阿里云ECS多環境發布。
一、背景
在軟件開發和部署過程中,我們的軟件往往需要在不同的運行環境中運行,例如:開發人員本地開發環境、測試團隊的測試環境、還有類生產環境和生產環境。在整個研發流程的過程中,針對開發和運維,前者面向需求和代碼,后者面向資源和環境,而部署,是兩者都會關注的部分。通過本文,你可以了解到如何通過云效流水線,打破二者之間的壁壘墻,讓開發與運維高效聯動。
二、用戶訴求
一般來說,用戶使用主機部署訴求如下:
開發人員不需要關注資源變更,只需要按需選擇環境進行部署即可。
開發人員能夠根據制定好的發布策略,自主發布,不需要手工配置和干預。
運維人員不需關注研發平臺,只需做好資源的規劃管理即可。
該場景下主要涉及開發人員和運維人員兩個角色,以下我們會從這兩個角色角度進行講解。
三、云效解決方案
云效交付流水線發布策略及ECS的標簽功能,為ECS的多環境發布提供了很好的基礎保障,如圖:
四、云效操作實踐
前置條件
接下來以一個Java Spring Boot的代碼庫為例,講解如何通過云效流水線進行阿里云ECS的多環境發布。
運維人員已購買相應阿里云ECS資源,并配置好相應環境,如本文案例中需要的JDK環境。
運維人員,根據需要,對相應ECS資源進行標簽配置。標簽是云資源的標識,可以幫助您從不同維度對具有相同特征的云資源進行分類、搜索和聚合,讓資源管理變得更加輕松。本文中ECS資源及標簽設置如圖所示:標簽鍵: environment 標簽值:dev、test、product
創建流水線
進入云效流水線,點擊右上角新建流水線,進入流水線創建向導頁面。選擇圖中標識模板,并點擊創建。
配置代碼庫
點擊添加流水線源,這里選擇流水線提供的示例代碼源,并進行添加。
配置構建上傳任務
修改Java構建上傳的任務,在構建物上傳步驟增加一個打包路徑,填入deploy.sh。這個文件存在于代碼庫中,其中包含了在ECS上進行應用啟動的腳本,為了進行后續的主機部署,需要將這個文件也打入到壓縮包中,在后續的主機部署任務中可以看到如何使用該deploy.sh。在該配置中指定了target/和deploy.sh兩個路徑,所以流水線會將這兩個文件(夾)打包成為一個壓縮包,并進行歸檔,在流水線中我們稱之為制品,該制品也會在后續的主機部署任務中用到。
配置部署任務
接下來配置主機部署任務,在制品下拉框中選擇前面的Java構建上傳步驟歸檔的那個制品。為了配置主機組用于部署,需要先創建一個,點擊新建主機組。
點擊下拉框后選擇新建主機組-阿里云ECS標簽,在新建主機組頁面點擊添加服務鏈接,選擇已有服務授權/證書或者點擊新建自動新建服務授權,之后點擊創建。
修改主機組名稱,下拉依次選擇主機組環境、地域、ECS標簽鍵、ECS標簽值,點擊確定。
回到流水線,選擇剛添加的主機組,然后進行部署腳本的配置:
下載路徑:表示希望把”構建上傳”任務中的壓縮包下載到機器上的什么位置,在本例的值為:/home/admin/app/package.tgz
執行用戶:希望以是哪個用戶的身份進行腳本執行,本例的值為:root
部署腳本:在機器上執行腳本的具體內容,本例的值為:
mkdir -p /home/admin/application/ && tar zxvf /home/admin/app/package.tgz -C /home/admin/application/ && sh /home/admin/application/deploy.sh restart
部署策略配置
暫停方式:希望一個主機組中的機器以什么樣的暫停方式進行,比如第一批暫停,每批暫停,或者不暫停。推薦使用第一批暫停,在發布完第一批之后,對線上服務進行觀察,如果沒有異常,則可以繼續其余批的發布
分批數量:希望主機組中的機器分為幾批進行發布。比如一共4臺機器,分兩批,則每批同時發布2臺機器。
本文中配置如下所示:
部署結果查看,點擊右上角的保存并運行,待執行完畢后,點擊部署詳情按鈕查看部署明細。
資源變更場景
因業務需要,需在開發環境中增加一臺機器,運維同學只需在ECS側準備相應資源,在對應環境標簽中綁定資源后即可,如下圖所示。
運維同學配置完畢后,開發同學不需做任何變更,直接運行相應環境流水線即可。流水線運行過程中,因為我們之前設置的分批,第一批暫停的發布策略,因此流水線會暫停,出現如下狀態:
此時點擊部署詳情按鈕,進入部署詳情頁面,確認沒有問題后,點擊繼續按鈕,如下圖所示
五、結語
通過以上的操作流程,我們可以通過云效流水線,利用標簽功能,拉通開發與運維,同時,讓開發和運維關注點分離,專注于核心的工作內容,實現ECS的多環境部署。
歡迎體驗、試用云原生時代新DevOps平臺阿里云云效。