SAE在Jenkins環境中集成了sae-jenkins-plugin插件,您可以使用該插件在Jenkins內快速完成持續部署并且應用到SAE。本文介紹如何通過不同方式在Jenkins控制臺生成部署任務并應用到SAE,包括創建Freestyle project任務、使用流水線插件、使用Maven,以及使用Job DSL插件。
前提條件
已安裝Jenkins。僅支持Jenkins 2.303及以上版本。
準備工作
步驟一:安裝sae-jenkins-plugin
下載sae-jenkins-plugin安裝包(最新版本:1.2.4)。
登錄Jenkins首頁,單擊左側導航欄的Manage Jenkins,然后在Manage Jenkins頁面的System Configuration區域,單擊Manage Plugins。
在Plugin Manager頁面,單擊Advanced頁簽,在Deploy Plugin區域,單擊選擇文件,上傳步驟1已下載的插件安裝包,然后單擊Deploy。
步驟二:配置賬號信息
登錄Jenkins首頁,單擊左側導航欄的Manage Jenkins,在Manage Jenkins頁面的System Configuration區域,單擊Configure System。
在Configure System頁面的Deploy to SAE區域,單擊Add,配置賬號信息,然后單擊Ping SAE。
配置項
說明
Name
為AccessKey設置名稱。
AliCloud Access Key Id
輸入AccessKey ID。更多信息,請參見創建AccessKey。
AliCloud Access Key Secret
輸入AccessKey Secret。更多信息,請參見創建AccessKey。
Region
單擊Advanced...后顯示。
從下拉列表選擇想部署的應用的所在地域,默認值為cn-hangzhou。該配置項用于配置賬號時,測試與對應Region SAE服務器的聯通情況與賬號信息有效性,不影響部署操作。
Endpoint
單擊Advanced...后顯示。
默認情況無需修改,默認值為sae.aliyuncs.com。如果Jenkins服務所在服務器部署在阿里云的VPC內,但是沒有公網訪問能力,需要用SAE的VPC地址來保證與SAE連接。例如,VPC地址
sae-vpc.cn-hangzhou.aliyuncs.com
,需要將其中的cn-hangzhou
改成VPC所在Region。當頁面顯示success時,表示賬號信息配置完成。
單擊Save。
通過Jenkins構建應用部署任務
您可以通過以下方式來快速構建應用部署任務,包括Freestyle project、流水線插件、Job DSL插件和Maven插件。
方式一:使用Freestyle project構建部署任務
登錄Jenkins首頁,在左側導航欄,單擊New Item。
在Enter an item name區域,輸入項目名稱,選擇Freestyle project,單擊OK。
單擊Post-build Actions頁簽,從Add post-build action下拉列表,選擇Deploy to SAE。
在Deploy to SAE區域,從Add下拉列表,選擇SAE Application。
在SAE Application區域,配置部署參數。
下圖以鏡像部署方式為例。更多信息,說明如下。
分類
配置項
說明
基本配置
SAE Credentials
從下拉列表選擇已配置的AccessKey的名稱。
SAE Namespace
輸入部署應用所在的命名空間ID,格式為
<RegionId>:<NamespaceId>
,例如cn-hangzhou:test
。SAE支持的地域,請參見開服地域。Application Id
輸入部署應用的應用ID。
Target Object
部署包或鏡像的地址鏈接,支持方式如下。
部署包地址:支持本地與遠程部署包,包括Java JAR包、WAR包和PHP ZIP包。示例如下。
本地部署包
SPRING-CLOUD-CONSUMER.jar
如果項目工作目錄是/var/${jenkins_home}/workspace/test,構建的包的全路徑是/var/${jenkins_home}/workspace/test/SPRING-CLOUD-CONSUMER.jar,則Target Object僅需填寫
SPRING-CLOUD-CONSUMER.jar
。遠程部署包
http://xx.oss-cn-hangzhou-internal.aliyuncs.com/demo/SPRING-CLOUD-CONSUMER.jar
如果選擇遠程部署包,確保部署的應用和遠程文件的網絡暢通,例如將部署包上傳至阿里云對象存儲OSS。
鏡像地址:確保部署的應用能夠正常拉取鏡像,例如拉取阿里云鏡像倉庫的地址。示例如下。
registry-vpc.cn-hangzhou.aliyuncs.com/demo/consumer:1.0
說明應用創建成功后,后續選擇的部署方式必須與創建時保持一致。
Whether target imageUrl
該配置項僅在Target Object為鏡像地址時需要選中。
高級配置
包括升級策略、環境變量和啟動命令等配置。例如,應用實例且需要升級,可以按需通過灰度或分批發布方式升級應用實例版本。此時可以配置Update Strategy,單擊對應的文本框展開參數列表,然后單擊參數右側的圖標,獲取對應的說明并填寫。
單擊Save。
在工程任務頁面的左側導航欄,單擊Build Now運行任務。
方式二:使用流水線插件構建部署任務
sae-jenkins-plugin支持流水線預發的片段生成器,在Jenkins中構建流水線部署應用到SAE。
登錄Jenkins首頁,單擊New Item。
在Enter an item name區域輸入項目名稱,選擇Pipeline,單擊OK。
在Pipeline頁簽,單擊Pipeline Syntax。
說明如果您已創建流水線,可在項目列表單擊流水線名稱進入流水線管理頁面,然后在左側導航欄,單擊Pipeline Syntax進入Snippet Generator頁面。
在Snippet Generator頁面,從Sample Step下拉列表,選擇saeClient: Deploy into SAE,然后從Add下拉列表,選擇SAE Application。
在SAE Application區域,配置部署參數。
下圖以鏡像部署方式為例。更多信息,說明如下。
分類
配置項
說明
基本配置
SAE Credentials
從下拉列表選擇已配置的AccessKey的名稱。
SAE Namespace
輸入部署應用所在的命名空間ID,格式為
<RegionId>:<NamespaceId>
,例如cn-hangzhou:test
。SAE支持的地域,請參見開服地域。Application Id
輸入部署應用的應用ID。
Target Object
部署包或鏡像的地址鏈接,支持方式如下。
部署包地址:支持本地與遠程部署包,包括Java JAR包、WAR包和PHP ZIP包。示例如下。
本地部署包
SPRING-CLOUD-CONSUMER.jar
如果項目工作目錄是/var/${jenkins_home}/workspace/test,構建的包的全路徑是/var/${jenkins_home}/workspace/test/SPRING-CLOUD-CONSUMER.jar,則Target Object僅需填寫
SPRING-CLOUD-CONSUMER.jar
。遠程部署包
http://xx.oss-cn-hangzhou-internal.aliyuncs.com/demo/SPRING-CLOUD-CONSUMER.jar
如果選擇遠程部署包,確保部署的應用和遠程文件的網絡暢通,例如將部署包上傳至阿里云對象存儲OSS。
鏡像地址:確保部署的應用能夠正常拉取鏡像,例如拉取阿里云鏡像倉庫的地址。示例如下。
registry-vpc.cn-hangzhou.aliyuncs.com/demo/consumer:1.0
說明應用創建成功后,后續選擇的部署方式必須與創建時保持一致。
Whether target imageUrl
該配置項僅在Target Object為鏡像地址時需要選中。
高級配置
包括升級策略、環境變量和啟動命令等配置。例如,應用實例且需要升級,可以按需通過灰度或分批發布方式升級應用實例版本。此時可以配置Update Strategy,單擊對應的文本框展開參數列表,然后單擊參數右側的圖標,獲取對應的說明并填寫。
單擊Generate Pipeline Script,拷貝生成的流水線腳本。
在左側導航欄,單擊Back回到流水線管理頁面,然后在左側導航欄,單擊Configure,在Pipeline區域輸入上一步已拷貝的腳本內容。
單擊Save。
在工程任務頁面的左側導航欄,單擊Build Now運行任務。
方式三:使用Maven構建部署任務
使用Maven插件構建應用后,您可以使用sae-jenkins-plugin插件部署應用。使用該方式前,您需要先安裝Maven。更多信息,請參見Maven。
使用Maven插件構建Java應用。
具體操作,請參見使用Maven構建Java應用程序。
使用sae-jenkins-plugin插件部署Java應用。
登錄Jenkins首頁,單擊已創建的工程任務名稱,進入詳情頁面。
在左側導航欄,單擊Pipeline Syntax。
在Snippet Generator頁面,從Sample Step下拉列表,選擇saeClient: Deploy into SAE,然后從Add下拉列表,選擇SAE Application。
在SAE Application區域,配置部署參數。
分類
配置項
說明
基本配置
SAE Credentials
從下拉列表選擇已配置的AccessKey的名稱。
SAE Namespace
輸入部署應用所在的命名空間ID,格式為
<RegionId>:<NamespaceId>
,例如cn-hangzhou:test
。SAE支持的地域,請參見開服地域。Application Id
輸入部署應用的應用ID。
Target Object
輸入部署包的地址鏈接。支持本地與遠程部署包,包括Java JAR包、WAR包和PHP ZIP包。示例如下。
本地部署包
SPRING-CLOUD-CONSUMER.jar
如果項目工作目錄是/var/${jenkins_home}/workspace/test,構建的包的全路徑是/var/${jenkins_home}/workspace/test/SPRING-CLOUD-CONSUMER.jar,則Target Object僅需填寫
SPRING-CLOUD-CONSUMER.jar
。遠程部署包
http://xx.oss-cn-hangzhou-internal.aliyuncs.com/demo/SPRING-CLOUD-CONSUMER.jar
如果選擇遠程部署包,確保部署的應用和遠程文件的網絡暢通,例如將部署包上傳至阿里云對象存儲OSS。
說明應用創建成功后,后續選擇的部署方式必須與創建時保持一致。
Whether target imageUrl
無需配置。該配置項僅在Target Object為鏡像地址時需要選中。
高級配置
包括Update Strategy、ACR、Application Environment、Startup Command、Storage And Log和Application Lifecycle Management等信息。單擊對應的文本框展開參數列表,然后單擊參數右側的圖標,獲取對應的說明并填寫。
單擊Generate Pipeline Script,拷貝生成的流水線腳本。
在左側導航欄,單擊Back回到流水線管理頁面,然后在左側導航欄,單擊Configure,在Pipeline區域輸入上一步已拷貝的腳本內容。
以簡單的流水線為例(其余保持默認配置),從Script文本框右側的下拉列表,選擇Hello World,修改原有的示例代碼。
單擊Save。
在工程任務頁面的左側導航欄,單擊Build Now運行任務。
方式四:使用Job DSL插件構建部署任務
在Jenkins中,您可以使用Job DSL插件來構建任務模板,并根據模板來快速構建部署任務。使用該方式前,您需要先安裝Job DSL插件。更多信息,請參見Job DSL插件。
登錄Jenkins首頁,單擊New Item。
在Enter an item name區域,輸入項目名稱,選擇Freestyle project,單擊OK。
在Build頁簽,從Add build step下拉列表,選擇Process Job DSLs。
在Process Job DSLs區域,單擊Use the provided DSL script,然后在DSL Script文本框,輸入配置腳本。
job('sae') { // 目標任務的名稱。 publishers { // SAE插件的類型。 saeClient { // SAE插件調用名稱。 deploySAEApplication('', '', '', '', '', ...) // 調用的SAE方法,以英文半角逗號(,)分隔多個參數。 } } }
支持的方法示例如下。
void deploySAEApplication( String namespace, String credentialsString, String appId, String targetObject, Boolean image, String edasContainerVersion, String webContainer, String jdk, String packageVersion, String envs, String startupCommand, String args, Integer minReadyInstances, Integer minReadyInstanceRatio, Boolean autoEnableApplicationScalingRule, Boolean enableGreyTagRoute, String acrInstanceId, String acrAssumeRoleArn, String imagePullSecrets, Boolean enableImageAccl, String customHostAlias, String timezone, String configMapMountDesc, String jarStartOptions, String jarStartArgs, String warStartOptions, String tomcatConfig, String nasId, String mountHost, String mountDesc, String ossMountDesc, String ossAkId, String ossAkSecret, String slsConfigs, String kafkaConfigs, String postStart, String preStop, Integer terminationGracePeriodSeconds, String readiness, String liveness, Boolean enableAhas, Boolean associateEip, String updateStrategy) ;
單擊Save。
在工程任務頁面的左側導航欄,單擊Build Now運行任務。