基於Jenkins+OOS+OSS的自動化部署
通過Jenkins、OOS、OOS快速實現自動化部署。
本文以wordpress博客系統為例,來構建基於Jenkins + OOS的自動化部署最佳實踐,示例涉及如下產品。
- wordpress github地址。
- OOS 運維編排服務,阿里雲的自動化運維服務,用於管理軟件版本和分批發布。
- OSS 對象存儲, 用於存儲構建的軟件包。
- Jenkins 自動化構建,並觸發更新OSS和OOS的軟件包。
- ROS 資源編排服務,阿里雲提供的雲資源的自動化部署服務,可以幫忙您一鍵部署系統所依賴的雲資源(ECS,RDS,SLB等)。
環境準備
WordPress雲上服務器
如下步驟為通過ROS,創建了一套包含ECS和RDS的WordPress環境。
- 登錄ROS(資源編排)控制檯。
- 單擊模板示例->模板->基於ECS和RDS創建WordPress環境->創建資源棧。
- 輸入密碼和實例類型等相關參數,然後單擊創建,等待片刻後,若環境創建成功,資源棧的輸出結果樣式如下。
- 其中輸出的WordPressUrl值是單機版wordpress地址,通過瀏覽器訪問可以看到網站已經部署好。
安裝並配置阿里雲CLI
本文以Mac-os為例,其他系統安裝可參考阿里雲CLI。
- 首先為阿里雲CLI創建一個RAM用戶來獲取AK,詳細操作請參考創建RAM用戶。
- 安裝阿里雲CLI。
brew install aliyun-cli
- 配置CLI。
aliyun configure
- 驗證CLI可用,若可用,可在終端看到輸出當前支持的多個地域。
aliyun ecs DescribeRegions
安裝並配置Jenkins
本文示例為Mac-OS,其他系統可參考Jenkins安裝。
- 安裝最新版本
brew install jenkins
- 安裝 LTS 版本
brew install jenkins-lts
- 啟動Jinkens
brew services start jenkins-lts
Jenkins更新應用包
- 單擊Newitems。
- 選擇Freestyle project 並輸入項目名
- 單擊Source Code Managerment,選擇Git地址並配置。
https://github.com/WordPress/WordPress.git
- Build內選擇Add build step,添加Execute Shell步驟,配置Command貼入如下腳本,腳本功能(將wordpress master的數據打包並拷貝到oss://wordpress-test-oos路徑下,然後在OOS創建名為wordpress的軟件包。)
version=`date +%s`
# 打包命令
tar -cvf wordpress_$version.tar `find .|grep -v wp-config-sample.php|grep -v targets|grep -v .git|grep -v ^\.$`
# 拷貝到OSS上
/usr/local/bin/aliyun oss cp wordpress_$version.tar oss://wordpress-test-oos/wordpress_$version.tar
templateName=wordpress
# templateContent指定Location地址 並配置安裝時候執行的腳本
# {
# "FormatVersion": "OOS-2020-01-01-Package",
# "Description": "",
# "Packages": [{
# "Name": "wordpress_$version.tar",
# "Location": "oss://wordpress-test-oos/wordpress_$version.tar",
# "InstallScript": "test -e wordpress || mkdir wordpress && cd wordpress && mv ../wordpress_$version.tar . && tar xvf wordpress_$version.tar > /dev/null && rm wordpress_$version.tar && cp -rf * /var/www/html/",
# "UninstallScript": "echo uninstall",
# "Targets": [{
# "PlatForm": "centos",
# "Architect": "x86_64"
# }]
# }]
# }
templateContent="{\"FormatVersion\":\"OOS-2020-01-01-Package\",\"Description\":\"\",\"Packages\":[{\"Name\":\"wordpress_$version.tar\",\"Location\":\"oss://wordpress-test-oos/wordpress_$version.tar\",\"InstallScript\":\"test -e wordpress || mkdir wordpress && cd wordpress && mv ../wordpress_$version.tar . && tar xvf wordpress_$version.tar > /dev/null && rm wordpress_$version.tar && cp -rf * /var/www/html/\",\"UninstallScript\":\"echo uninstall\",\"Targets\":[{\"PlatForm\":\"centos\",\"Architect\":\"x86_64\"}]}]}"
# 更新OOS上的軟件包
/usr/local/bin/aliyun oos CreateTemplate --TemplateName=$templateName --Content "$templateContent" || /usr/local/bin/aliyun oos UpdateTemplate --TemplateName=$templateName --Content "$templateContent"
# 清理打包臨時文件
rm wordpress_$version.tar
- 單擊Save。
- 配置好後單擊Build Now觸發部署流程,然後單擊Build History可查看部署情況。
- 在Console Output裡我們可以看到本次部署的日誌,整個過程包括從git拉取代碼,執行tar打包,將包拷貝到OSS上,以及在OOS上創建(更新)一個名為wordpress的軟件包,軟件包在OOS控制檯我的軟件(注意切換地域)可查看到。
- 單擊詳情可查看軟件的詳情,包名、存儲位置、安裝腳本、卸載腳本,以及歷史版本。
OOS部署軟件
- 登錄OOS控制檯,單擊我的軟件>wordpress,單擊安裝軟件,選擇要安裝在的目標實例(本示例選擇上文ROS創建得到的實例id)。
- 我們發現選擇實例按鈕是灰色的,這個時候需要給實例配置一個角色,OOS會使用這個角色來獲取軟件包信息以及下載oss的權限,單擊授權。
-
這時候我們跳到了添加角色的界面。
- 若有已準備好的RAM角色(應被授予AliyunOOSReadOnlyAccess及AliyunOSSReadOnlyAccess的系統權限,且信任服務為ecs雲服務器),單擊執行,執行列表裡可以看到執行成功。
-
若無已準備好的RAM角色,參照如下步驟,創建角色。
- 登錄RAM控制檯,單擊創建角色,授信服務選擇雲服務器。
- 為新建角色授予AliyunOOSReadOnlyAccess和AliyunOSSReadOnlyAccess。
- 回到為批量操作實例-實例操作-添加角色,完成實例的角色授予。
- 實例配置好角色後,回到我的軟件執行安裝軟件,選擇已授予instanceRole的實例,配置完後,單擊立即執行。
- 最後我們看到執行結果成功了,並且機器上的wordpress /var/www/html裡的內容也變成了最新的,在執行詳情可查看具體信息。
總結
以上我們完成了基於OOS+Jenkins的CICD流程,通過OOS我的軟件功能,可以進行軟件版本的管理和應用分批部署,在Jenkins中,也支持設置為直接調用OOS我的軟件自動安裝,以此來完成部署的全自動化,後續我們還將介紹如何用OOS+Jenkins自動更新鏡像。