通過Jenkins、OOS、OSS快速實現自動化部署。
本文以WordPress博客系統為例,來構建基于Jenkins + OOS + OSS的自動化部署最佳實踐,示例涉及如下產品。
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創建一個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
在本機瀏覽器打開localhost:8080。
根據提供的目錄復制并填入密碼,單擊繼續。
安裝插件,選擇默認插件。
設置用戶名和密碼后登錄。
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控制臺,單擊創建角色,受信服務選擇云服務器。
為新建角色授予AliyunOOSReadOnlyAccess和AliyunOSSReadOnlyAccess。
回到為批量操作實例-實例操作-添加角色,完成實例的角色授予。
實例配置好角色后,回到我的軟件執行安裝軟件,選擇已授予instanceRole的實例,配置完后,單擊立即執行。
最后我們看到執行結果成功了,并且機器上的wordpress /var/www/html里的內容也變成了最新的,在執行詳情可查看具體信息。
總結
以上我們完成了基于OOS+Jenkins的CICD流程,通過OOS我的軟件功能,可以進行軟件版本的管理和應用分批部署,在Jenkins中,也支持設置為直接調用OOS我的軟件自動安裝,以此來完成部署的全自動化,后續我們還將介紹如何用OOS+Jenkins自動更新鏡像。