1. 程式人生 > 其它 >Flow vs Jenkins 實操對比,如何將Java應用快速釋出至ECS

Flow vs Jenkins 實操對比,如何將Java應用快速釋出至ECS

隨著計算機技術和業務不斷髮展,企業軟體規模越來越龐大,交付越來越複雜。持續交付 DevOps 解決方案逐漸深入人心,成為企業開發者研發模式首選。

市面上存在多種多樣的 CICD 工具,不同的工具有不同特點。從開源的本地工具 Jenkins、TeamCity,到雲端免費工具 Travis CI、Github Action,到如今雲原生時代專注於 Kubernetes 的 ArgoCD、Tekton Pipeline。

Jenkins 由於其開源特性以及豐富外掛能力,長久以來都是中小企業搭建 CICD 流程的首選。不過 Jenkins 存在維護成本高、配置複雜等缺點,雲效 Flow 較好地解決了這些問題。

本文從一個 Java 應用部署到雲伺服器(ECS)的場景切入,對比使用阿里云云效流水線 Flow 和 Jenkins 兩種構建部署方式,供大家選型參考。

需求分析

前我們有一個存放 Java 程式碼的倉庫,需要對原始碼進行構建,獲得構建產物並將構建產物部署到雲伺服器(ECS)組。該過程簡單抽象如下:

以 Git 倉庫 https://code.aliyun.com/flow-example/spring-boot Spring Boot 工程為例,需要有一個提供java、maven構建指令的執行環境進行 mvn build,將生成的 jar 包同步到伺服器組上,執行應用啟動命令(如 /home/admin/app/deploy.sh restart),將應用啟動。

流程拆分

環境準備

Flow

Flow 作為一個 SaaS 服務,開箱即用。使用者只需要一個阿里雲賬號即可開啟持續交付之旅。

在Flow平臺登陸阿里雲賬號後即可新建流水線

Jenkins

Jenkins 是一個開源的 CI 工具,使用者需要提供機器資源來部署 Jenkins Master 節點。如果需要在公網環境下訪問Jenkins頁面,通過公網IP或彈性IP等暴露訪問地址。以一臺阿里雲 ECS(Centos 8)為例,安裝Jenkins的過程包括:

# 安裝 git、java 基礎工具
yum install git java 

# 修改 Jenkins 配置,如監聽埠等
vim /etc/sysconfig/jenkins

JENKINS_PORT="8081"

# 安裝 Jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo dnf install jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins
systemctl status jenkins

 

當Jenkins程序啟動後,可以通過機器ip+埠的方式訪問,登入到Jenkins頁面。

主機組配置

我們將最終 java 應用執行的伺服器叫為主機組的概念,它可以包括 n>=1 臺伺服器。

Flow

Flow 主機組支援兩種型別,包括阿里雲ECS和能訪問公網的阿里雲主機。以登入阿里雲賬號下ECS為例:

a. 訪問主機組管理頁

在「企業設定」中訪問主機組管理

b. 點選建立按鈕,選擇阿里雲ECS

c. 新建服務授權,選擇ECS例項

此時完成了主機組的配置,後續將會在流水線部署節點裡使用。

Jenkins

通過 ssh private key 訪問伺服器為例,首先我們需要在機器上生成一對 rsa 金鑰,執行一下命令一路回車

ssh-keygen -t rsa -m PEM

在~/.ssh 目錄下可以看到生成的金鑰檔案,複製id_rsa私鑰的內容

[root@iZbp1614mku6kuzmrnyi6uZ .ssh]# ls -al
總用量 16
drwx------  2 root root   80 5月  30 14:26 .
dr-xr-x---. 7 root root  233 5月  30 14:43 ..
-rw-------  1 root root 1574 5月  30 14:26 authorized_keys
-rw-------  1 root root 2455 5月  30 14:26 id_rsa
-rw-r--r--  1 root root  582 5月  30 14:26 id_rsa.pub
-rw-r--r--  1 root root  173 5月  30 13:55 known_hosts

 

訪問Jenkins 新增 Credentials 配置頁,如http://xxxx:8081/credentials/store/system/domain/_/newCredentials

訪問 remote hosts 配置頁,如 http://xxxx:8081/configure ,選擇剛建立的 credential,測試connection連通性。

此時我們完成一臺主機的配置(注:Jenkins 與 Java 伺服器處於同一網路下,則伺服器不需要開放公網訪問,否則需要申請配置公網可達的IP)。而 Flow 可通過阿里云云助手下發指令的通道,減少對公網IP或彈性EIP的配置。

構建、部署配置

Flow

a. 選擇 Java · 構建、部署到阿里雲ECS/自有主機 模板

b. 新增示例程式碼庫(Java、Spring Boot)

c. 點選 Java構建上傳 任務,可以方便的選擇 JDK、Maven 版本,配置構建指令。

d. 在 構建物上傳 任務裡,直接輸入多個打包路徑生成構建制品,如 default

e. 在部署任務裡選擇 "下載製品",勾選已配置的主機組,選定下載製品路徑、執行使用者和執行指令,點選"儲存並允許",觸發流水線例項執行。(Flow 支援部署策略如釋出暫停、分批發布等特性,參考)

f. 在構建節點中可以看到, Flow 預設對 mvn 構建使用 http://maven.aliyun.com/ 倉庫和對m2快取來加速構建,免去每次從 nexus 倉庫下載 jar導致的耗時。

g. 在構建物上傳步驟可以看到,mvn構建完的工作區中的jar包和deploy.sh被打包後上傳到了遠端儲存中。

h. 可以在流水線例項頁直接下載 default 產物包。

i. 點選部署任務,可以看到部署詳細資訊,如部署耗時、日誌等。

此時我們在 Flow 走通了 Clone git repo -> Mvn Build -> Deploy To ECS的流程。

Jenkins

a. 訪問 http://xxxx:8081/newJob 開始新建任務

b. 配置 git 倉庫源地址

c. 配置 mvn 執行指令,(為了方便走通測試流程,這裡我使用同一臺機器作為部署Jenkins、Java的構建和部署機器,強烈建議生產環境將Jenkins、應用構建與部署的機器進行隔離)

d. 儲存任務配置,觸發任務執行,訪問 http://xxxx:8081/job/daily-deploy-test/1/console 任務日誌詳情頁,可以看到 Jenkins 會將程式碼庫 clone 到 /var/lib/jenkins/workspace/daily-deploy-test,執行 mvn 構建與 deploy.sh 指令碼

此時我們在 Jenkins 走通了 Clone git repo -> Mvn Build -> Deploy To ECS的流程。

小結

可以看到 Flow 在軟體持續交付的場景下做了非常多好用的功能,使使用者可以將精力收斂於業務邏輯本身。

你的團隊是如何做CICD的?歡迎分享

檢視實操文件快速上手:https://help.aliyun.com/document_detail/224594.html


關於我們

瞭解更多關於雲效DevOps的最新動態,可微信搜尋關注【雲效】公眾號;

彩蛋:公眾號後臺回覆【指南】,可獲得《阿里巴巴DevOps實踐指南》&《10倍研發效能提升案例集》;

看完覺得對您有所幫助別忘記點贊、收藏和關注呦;