開發與維運

基於Jenkins+OOS+OSS的自動化部署

基於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環境。

  1. 登錄ROS(資源編排)控制檯
  2. 單擊模板示例->模板->基於ECS和RDS創建WordPress環境->創建資源棧
  3. 輸入密碼和實例類型等相關參數,然後單擊創建,等待片刻後,若環境創建成功,資源棧的輸出結果樣式如下。
  4. 其中輸出的WordPressUrl值是單機版wordpress地址,通過瀏覽器訪問可以看到網站已經部署好。


安裝並配置阿里雲CLI

本文以Mac-os為例,其他系統安裝可參考阿里雲CLI

  1. 首先為阿里雲CLI創建一個RAM用戶來獲取AK,詳細操作請參考創建RAM用戶
  2. 安裝阿里雲CLI。
brew install aliyun-cli
  1. 配置CLI。
aliyun configure
  1. 驗證CLI可用,若可用,可在終端看到輸出當前支持的多個地域。
aliyun ecs DescribeRegions

安裝並配置Jenkins

本文示例為Mac-OS,其他系統可參考Jenkins安裝

  1. 安裝最新版本
brew install jenkins
  1. 安裝 LTS 版本
brew install jenkins-lts
  1. 啟動Jinkens
brew services start jenkins-lts
  1. 在本機瀏覽器打開localhost:8080。
  2. 根據提供的目錄複製並填入密碼,單擊繼續。
  3. 安裝插件,選擇默認插件。
  4. 設置用戶名和密碼後登錄。

Jenkins更新應用包

  1. 單擊Newitems。
  2. 選擇Freestyle project 並輸入項目名
  3. 單擊Source Code Managerment,選擇Git地址並配置。
https://github.com/WordPress/WordPress.git
  1. 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
  1. 單擊Save。
  2. 配置好後單擊Build Now觸發部署流程,然後單擊Build History可查看部署情況。
  3. 在Console Output裡我們可以看到本次部署的日誌,整個過程包括從git拉取代碼,執行tar打包,將包拷貝到OSS上,以及在OOS上創建(更新)一個名為wordpress的軟件包,軟件包在OOS控制檯我的軟件(注意切換地域)可查看到。
  4. 單擊詳情可查看軟件的詳情,包名、存儲位置、安裝腳本、卸載腳本,以及歷史版本。


OOS部署軟件

  1. 登錄OOS控制檯,單擊我的軟件>wordpress,單擊安裝軟件,選擇要安裝在的目標實例(本示例選擇上文ROS創建得到的實例id)。
  2. 我們發現選擇實例按鈕是灰色的,這個時候需要給實例配置一個角色,OOS會使用這個角色來獲取軟件包信息以及下載oss的權限,單擊授權。
  3. 這時候我們跳到了添加角色的界面。

    • 若有已準備好的RAM角色(應被授予AliyunOOSReadOnlyAccess及AliyunOSSReadOnlyAccess的系統權限,且信任服務為ecs雲服務器),單擊執行,執行列表裡可以看到執行成功。
    • 若無已準備好的RAM角色,參照如下步驟,創建角色。

      1. 登錄RAM控制檯,單擊創建角色,授信服務選擇雲服務器。
      2. 為新建角色授予AliyunOOSReadOnlyAccess和AliyunOSSReadOnlyAccess。
      3. 回到為批量操作實例-實例操作-添加角色,完成實例的角色授予。
  4. 實例配置好角色後,回到我的軟件執行安裝軟件,選擇已授予instanceRole的實例,配置完後,單擊立即執行。
  5. 最後我們看到執行結果成功了,並且機器上的wordpress /var/www/html裡的內容也變成了最新的,在執行詳情可查看具體信息。

總結

以上我們完成了基於OOS+Jenkins的CICD流程,通過OOS我的軟件功能,可以進行軟件版本的管理和應用分批部署,在Jenkins中,也支持設置為直接調用OOS我的軟件自動安裝,以此來完成部署的全自動化,後續我們還將介紹如何用OOS+Jenkins自動更新鏡像。

Leave a Reply

Your email address will not be published. Required fields are marked *