流水線 Flow 支援將製品部署到公網主機中,本文介紹如何接入主機並建立和配置部署任務。
方案概覽
接入新主機
-
在流水線 Flow首頁,單擊全域設定,然後單擊主機群組管理。
-
在主機群組管理頁面,選擇目標主機群組,然後在目標主機群組頁面,單擊添加新主機,流水線 Flow支援通過以下方式接入主機。
如果還未建立主機群組,請參見建立主機群組。
手動安裝Runner
說明此方式適用於接入所有類型的主機,包括阿里雲 ECS 和其他非阿里雲主機。
-
在接入新主機頁面,添加方式選擇手動安裝Runner。
-
複製 Runner 安裝命令並在需要添加的主機(該主機必須要能訪問公網)上執行。選擇作業系統類型為Linux,在接入主機地區,複製安裝命令並在待接入主機上執行。該命令包含Runner版本、Token、AccessKey等參數,且有到期時間限制,請在有效期間內完成執行。執行完成後單擊我知道了。
主機終端列印以下資訊即表示接入成功。
INFO[2025-04-29T13:34:12+08:00] service type linux-systemd, user , realUser root INFO[2025-04-29T13:34:12+08:00] Aliyun yunxiao runner-v0.3.1-be-d5zh**** service started INFO[2025-04-29T13:34:12+08:00] Aliyun yunxiao runner-v0.3.1-be-d5zh**** service status running -
Runner 安裝成功後,新機器就會自動添加至當前主機群組,請重新整理主機列表後查看。
說明-
將應用部署到自有主機(非阿里雲 ECS)不需要企業版,標準版即可使用。自有主機通過手動安裝Runner方式接入,建立流水線時選擇包含主機部署的模板(如 Java · 測試、構建、部署到阿里雲ECS/自有主機)。
-
如果需要在遠程主機上免密執行命令,請使用主機部署步驟(需預先安裝 Runner),而非執行Shell步驟——執行Shell不支援直接免密串連 ECS。
-
添加主機部署任務
可以通過兩種方式添加主機部署任務。
方式一:通過流水線模板建立
建立流水線時,選擇開發語言,並選擇帶有主機部署任務的流水線模板,即可快速建立一條主機部署流水線 。
例如,選擇 Java 語言,選擇 Java · 測試、構建、部署到阿里雲ECS/自有主機 模板。
方式二:編排流水線時,添加主機部署任務
在已有的流水線中,單擊新的任務,並選擇主機部署。
配置主機部署任務
本文以部署Java 範例程式碼為例,為您講述如何配置部署任務。其中Java 測試構建階段的配置請參見測試構建,注意在配置構建物上傳時,將倉庫中deploy.sh檔案一起上傳到製品倉庫,後續部署 Java 專案時需要用到。
-
選擇部署時下載製品。預設已勾選,注意不要取消。
-
選擇製品名稱。
-
選擇需要部署的主機群組。如果還未建立,您可單擊建立主機群組建立,詳情請參見主機群組管理。
重要主機群組用於管理部署的資源和配置。主機群組中的主機必須安裝 Java 運行環境。
-
部署配置。
配置項
說明
下載路徑
將製品下載到你的主機上的路徑,
執行使用者
配置執行命令的使用者,如root。
部署指令碼
在目標主機上執行的 Shell 部署指令碼。該欄位為非必填項:若不填寫,部署時僅將製品下載到指定的下載路徑,不會執行任何額外操作(不報錯)。您需要自行編寫解壓、配置及啟動邏輯,才能完成實際部署。
內聯指令碼存在字元數量限制,若指令碼較長,建議將完整的 Shell 指令檔上傳至 Git 程式碼程式庫或提前放置在目標伺服器上,在部署指令碼輸入框中通過命令調用執行,例如
sh /home/admin/deploy.sh。以下為基礎樣本:mkdir -p /home/admin/application tar zxvf /home/admin/app/package.tgz -C /home/admin/application/ sh /home/admin/application/deploy.sh restart其中 deploy.sh 是一個啟動 Jar 包的 Shell 指令碼,實際使用時請替換為您的部署指令碼。
重要Flow 在部署過程中,會下發部分以
rdc_deploy_command_開頭的部署進程,請勿在部署指令碼中對此類部署進程進行操作,否則可能會導致部署失敗。多服務獨立部署
當一台伺服器上需要部署多個服務且各服務需獨立發布時,建議為每個服務建立獨立的主機群組(可包含同一台伺服器),並在流水線中為每個服務配置獨立的主機部署任務。通過指定不同的下載路徑和部署指令碼,實現各服務之間的隔離部署。
並存執行指令碼
若需在同一台主機上並存執行多個指令碼任務,可在流水線中添加一個額外的主機部署組件,取消勾選部署時下載製品,直接在部署指令碼中編寫指令碼命令。由於不下載製品,該組件可與其他部署任務並行運行,適用於需要同時執行輔助操作(如日誌清理、配置重新整理)的情境。
-
配置部署策略。
如果您需要一次發布多台主機,Flow 支援分批發布,您可在主機部署任務中指定對應的部署策略。假如您有 4 台主機,選擇分 2 批發布,則每一批自動發布 2 台主機。
暫停方式
說明
第一批暫停
第一批發布完成後,您可先進行驗證,點擊繼續後可執行後續發布。
不暫停
每一批發布完成後,自動執行後續批次的發布。
每批暫停
每一批發布完後,都需要手動確認是否繼續發布。
分批數量:指定主機分批的數量,指定分批發布的數量,會按照相應的數量進行分批部署。
如需在部署時使用環境變數,請參見環境變數配置。
整體配置參考以上各項參數說明。
部署機制與製品傳輸
全量下載
主機部署每次均為全量下載整個製品包到目標主機,不支援累加式更新。即使僅修改了一個檔案,部署時也會重新下載完整的製品包。
構建與部署的關係
流水線中的"構建"和"部署"分別在不同環境執行:
-
構建階段:在雲效的構建叢集中執行。構建配置中的"安裝依賴"(如 JDK、Maven、Node.js)是在構建叢集上安裝,而非在您的 ECS 上安裝。構建完成後,產物被打包上傳至製品倉庫。
-
部署階段:在您的目標主機上執行。部署時從製品倉庫下載製品包到主機的下載路徑,然後執行部署指令碼中的命令。
HTML/靜態資源部署
將 HTML 等靜態專案部署到 ECS,需在構建步驟中將原始檔案打包為製品(例如使用 tar 命令),在部署步驟的部署指令碼中將製品解壓釋放到 Web 服務器的指定目錄。樣本:
mkdir -p /usr/share/nginx/html
tar zxvf /home/admin/app/package.tgz -C /usr/share/nginx/html/
指定目錄部署
如需將 Jar 包等製品傳輸到自訂目錄(如 /app/jar/zh),可在部署指令碼中編寫解壓及目錄操作命令:
mkdir -p /app/jar/zh
tar zxvf /home/admin/app/package.tgz -C /app/jar/zh/
cd /app/jar/zh && sh start.sh
也可提前將啟動指令碼(如 start.sh)放置在目標目錄中,部署時僅需解壓製品並調用該指令碼即可。
使用 Docker Compose 部署
雲效支援通過 Docker Compose 將應用部署到主機,您需要在部署指令碼中執行 docker-compose 相關命令。
前提條件
目標主機已安裝 Docker 和 docker-compose。
準備 docker-compose.yml
流水線不會自動將程式碼程式庫中的 docker-compose.yml 檔案同步到目標伺服器。通過以下方式確保部署時該檔案在目標主機上可用:
-
方式一:在構建階段將
docker-compose.yml與專案代碼一起打包進位品,部署時自動下載到主機,在部署指令碼中解壓即可。 -
方式二:在部署指令碼中通過
wget、scp或git clone等命令將檔案傳輸到目標目錄。
部署指令碼樣本
# 解壓製品到部署目錄
mkdir -p /home/admin/app
tar zxvf /home/admin/app/package.tgz -C /home/admin/app/
# 進入專案目錄並啟動服務
cd /home/admin/app
docker-compose up -d
對於 Python 等專案,同樣需在構建時將代碼上傳至製品倉庫並在部署時下載解壓,或在部署指令碼中通過 git clone 拉取代碼到目標主機。
多環境與多地區部署
跨地區部署
支援通過一條流水線將應用部署到不同地區(如華東、華北或海外地區)的 ECS。操作方法:為各目標地區分別建立獨立的主機群組,然後在流水線中依次添加對應主機群組的主機部署任務。
多微服務編排
多個微服務需要發布到多台伺服器時,有兩種編排方式:
-
單流水線:在一條流水線中配置多個構建步驟和主機部署步驟,適合關聯性強、需要統一發布的微服務。可通過並行部署提高效率。
-
多流水線:為每個微服務建立獨立的流水線,適合需要獨立維護和獨立發布節奏的情境。
無需為每台伺服器單獨建立流水線。
部署環境選擇
流水線不支援在運行時動態選擇部署環境。建議為不同環境(如測試、預發、生產)建立獨立的主機群組,在流水線中配置多個主機部署步驟,並在各步驟之間添加手動確認節點來控制執行流程,實現按需發布。
組件選擇
部署到阿里雲 ECS 時,應選擇主機部署組件而非ECS應用組件。主機部署通過 Runner 串連主機執行部署,能正確關聯 ECS 執行個體;ECS應用組件通過 API 方式部署,適用情境不同。
管理主機部署任務
查看部署詳情
配置完部署任務後,運行流水線將製品部署到指定的主機群組。在部署過程中,單擊部署詳情查看最新部署狀態。在流水線運行詳情頁面,找到部署階段的主機部署任務,單擊右側的部署詳情按鈕進入部署詳情頁面。
|
部署狀態 |
說明 |
|
部署中 |
可以執行終止操作,並查看日誌。 |
|
待部署 |
當前無操作。 |
|
已成功 |
可以查看部署成功的日誌。 |
|
已失敗 |
失敗時,您可在卡片視圖上進行重試發起部署,也可查看部署日誌處理。 |
|
已跳過 |
當前部署任務已被跳過。 |
部署歷史復原
在流水線部署歷史中,查看部署的記錄,並選擇需要復原的歷史部署,單擊復原按鈕發起復原操作。
復原操作的本質是使用歷史版本的製品和部署指令碼重新執行一次部署任務,並非簡單的狀態回切。因此:
-
若歷史部署套件已到期(流水線部署套件僅保留 30 天),則無法執行復原。
-
復原會重新下載歷史製品並執行歷史版本的部署指令碼,請確保指令碼邏輯支援重複執行。
部署故障排查
部署成功但應用未啟動
如果部署任務顯示成功,但在伺服器上看不到應用進程,通常是因為部署指令碼中未包含應用啟動命令。主機部署僅負責將製品傳輸到目標主機並執行部署指令碼中的命令,不會自動啟動應用。請確保部署指令碼中包含以下操作:
-
解壓製品包到目標目錄。
-
執行應用啟動命令(如
sh start.sh、java -jar app.jar &)。
SLB 流量控制
如需在部署過程中實現 SLB(負載平衡)流量摘除和恢複,建議通過以下方式操作:
-
為需要單獨控制流程量的主機建立單機主機群組(每個主機群組僅包含一台主機)。
-
在流水線中按順序編排多個主機部署任務,確保同一台主機的摘流、部署、驗證、恢複流量等步驟按序執行。
-
在部署指令碼中通過調用 SLB API 或自訂指令碼實現流量摘除和恢複。
請確保摘流和恢複流量操作在同一主機群組內執行,避免因操作對象不一致導致流量異常。