全部產品
Search
文件中心

CloudOps Orchestration Service:批量管理我的軟體

更新時間:Jun 30, 2024

通過OOS批量管理軟體,除了可安裝阿里雲Agent或軟體包管理工具的軟體,也支援安裝我的軟體。我的軟體支援以rpm、deb、msi等為尾碼的常規軟體包,通過維護我的軟體,您可高效管理各類平台及架構的軟體,本文將詳細介紹下建立和批量管理我的軟體的操作方法。

前提條件

  1. 我的軟體的安裝或卸載,僅支援在網路類型是專用網路的ECS執行個體下進行,請確保執行個體在VPC專用網路下。

  2. 對ECS執行個體安裝或卸載我的軟體前,請確保該執行個體已被授予執行個體RAM角色,且其被授予的RAM角色所擁有的許可權需包含如下JSON中的權限原則。授予方式可參考通過ECS執行個體RAM角色授權ECS訪問其他雲資源

權限原則JSON指令碼:

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "oos:GetTemplate"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "oss:GetObject",
                "oss:GetBucketAcl"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

檢查網路類型

  1. 登入ECS管理主控台

  2. 在左側導覽列,單擊執行個體與鏡像>執行個體。

  3. 確認將安裝軟體的執行個體的網路類型是專用網路。

執行個體RAM角色的授予

  1. 首先檢查執行個體的RAM角色授予情況。在執行個體列表中,單擊藍色的執行個體ID。

  2. 查看執行個體詳情,若RAM角色為空白則為執行個體尚未被授予RAM角色。

  3. 單擊RAM控制台

  4. 單擊許可權管理>權限原則>建立權限原則>指令碼編輯。並將本文前提條件中的JSON指令碼複製粘貼到指令碼配置的編輯欄中。 image

  5. 單擊繼續編輯基本資料>輸入名稱>單擊確定image

  6. 單擊角色>建立角色,選擇可信實體類型阿里雲服務。單擊下一步image

  7. 角色類型選擇普通服務角色,填寫角色名稱選擇受信服務雲端服務器。 單擊完成image

  8. 單擊為角色授權,選擇上面步驟中建立的自訂策略,單擊確定

  9. 接下來則需將RAM角色授予給目標執行個體,返回ECS管理主控台執行個體列表

  10. 找到將安裝軟體的執行個體,單擊更多>執行個體設定>授予或收回RAM角色

  11. 選中已建立的RAM角色。

  12. 單擊確定,則完成了為執行個體授予RAM角色。

  13. 再次單擊藍色執行個體ID,則可在執行個體詳情中看到該執行個體已被成功授予RAM角色。

建立OSS儲存空間

  1. 登入OSS控制台。 建立一個用來儲存我的軟體的OOS Bucket。

  2. 單擊Bucket 列表>建立 Bucket

  3. 輸入Bucket 名稱

  4. 根據OOS的當前地區,選擇地區。其它屬性如儲存類型等可根據您的需求確定,或直接使用預設值。image

  5. 單擊確定

我的軟體的建立

  1. 登入OOS控制台

  2. 單擊擴充程式。單擊建立擴充自訂程式。

  3. 單擊軟體資訊。

  4. 輸入擴充程式名稱,擴充程式描述,版本描述,單擊下一步。image.png

  5. 上傳軟體包並配置安裝指令碼、卸載指令碼、平台以及架構image.png

    1. 安裝執行指令碼樣本:

      #!/bin/bash
      #######  單進程軟體包安裝指令碼模版說明  #########
      #1. 此指令碼預設在根路徑下執行 Linux系統預設為 /root
      #2. 指令碼安裝軟體執行成功後 預設會刪除遠程下載的路徑
      #3. 使用者自訂實現 建議在 job_start 下
      #4. 需遵循進程ID的儲存約束 軟體包進程ID標識需儲存到指定路徑
      
      #######  error code specification  #########
      # Please update this documentation if new error code is added.
      # 1   => install fail
      # 2   => check health fail
      # 3   => record process id fail
      # 4   => user shell fail
      
      function user_shell() {
          #使用者自訂安裝指令碼 START
          $nohup java -jar demo-1.0.0-SNAPSHOT.jar > /demo.log 2>&1 &
          #使用者自訂安裝指令碼 END
      }
      
      ##### 可在指令碼開始運行時調用,列印當時的時間戳記及PID,同時記錄軟體包進程ID到指定路徑。
      function job_start() {
          user_shell
          if [ $? -ne 0 ]; then
              exit4
          else
              # 此處約束禁止刪除
              now=$(date +'%Y-%m-%d %H:%M:%S')
              pid=$!
              echo "[$now][$pid] job_start"
              pidPath="/etc/aliyun"
              if [ ! -d $pidPath ]; then
                  mkdir -p /etc/aliyun
                  echo "建立PID儲存路徑 $pidPath"
              fi
              echo "$pid" > "$pidPath/main_process_id"
              if [ $? -ne 0 ]; then
                  exit3
              fi
          fi
      }
      
      ##### 在此函數中檢查服務是否起來,可以是檢查進程,curl http地址等方式
      function check_health() {
          now=$(date +'%Y-%m-%d %H:%M:%S')
          echo "[$now][$$] check_health"
      }
      
      function exit1() {
        echo "exit code 1, install fail"
        exit 1
      }
      
      function exit2() {
        echo "exit code 2, check health fail"
        exit 2
      }
      
      function exit3() {
        echo "exit code 3, record process id fail"
        exit 3
      }
      
      function exit4() {
        echo "exit code 4, user shell fail"
        exit 4
      }
      
      
      ##### 如果傳回值為0,則認為此執行成功,如果非0,則認為執行失敗
      function main() {
          job_start
          if [ $? -ne 0 ]; then
              exit1
          fi
          check_health
          if [ $? -ne 0 ]; then
              exit2
          fi
      }
      
      ##### 觸發執行 日誌由OOS自動記錄
      main
    2. 卸載執行指令碼樣本:

      #!/bin/bash
      ##### 可在指令碼開始運行時調用,列印當時的時間戳記及PID。
      function job_stop() {
          pid=$(cat /etc/aliyun/main_process_id)
          kill -9 $pid
          now=`date +'%Y-%m-%d %H:%M:%S'`
          echo "[$now][$pid] job_stop"
      }
      
      job_stop
      if [ $? -ne 0 ]; then
          echo "[$now][$$] job stop failed."
          exit 1
      fi
  6. 單擊建立

我的軟體的安裝

  1. 開始安裝前請確保目標資源已滿足本文的前提條件一節,安裝我的軟體有兩個入口,可直接通過我的軟體來安裝,也可在批量管理軟體中進行安裝,本樣本通過批量管理軟體來完成自訂軟體的安裝。

  2. 單擊批量管理軟體,單擊建立軟體類型選擇我的軟體操作內容選擇安裝,並選擇將安裝的軟體名稱。 image

  3. 單擊選擇執行個體。本樣本通過手動選擇執行個體,並確保選擇的是網路類型為VPC的執行個體。單擊立即執行

    image

  4. 確認參數無誤後單擊確定建立執行。可通過批量管理軟體下的任務查看安裝詳情。image

我的軟體的卸載

  1. 開始卸載前請確保目標資源已滿足本文的前提條件一節,單擊批量管理軟體

  2. 單擊建立軟體類型選擇我的軟體

  3. 操作內容選擇卸載,並選擇將卸載的軟體名稱。

  4. 單擊選擇執行個體。本樣本通過手動選擇執行個體,並選中網路類型為VPC的執行個體。

  5. 單擊立即執行

  6. 可通過批量管理軟體下的任務查看卸載詳情。