全部产品
Search
文档中心

批量管理我的软件

更新时间: 2021-09-03

通过OOS批量管理软件,除了可安装阿里云Agent或软件包管理工具的软件,也支持安装我的软件。我的软件支持以rpm、deb、msi等为后缀的常规软件包,通过维护我的软件,您可高效管理各类平台及架构的软件,本文将详细介绍下创建和批量管理我的软件的操作方法。

前提条件

  1. 我的软件的安装或卸载,仅支持在网络类型是专有网络的ECS实例下进行,请确保实例在VPC专有网络下。

  2. 对ECS实例安装或卸载我的软件前,请确保该实例已被授予实例RAM角色,且其被授予的RAM角色所拥有的权限需包含如下JSON中的权限策略。授予方式可参考授予实例RAM角色

权限策略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. 为完成角色及权限的创建及授予,首先单击RAM控制台

  5. 单击权限策略管理>创建权限策略

  6. 填写策略名称

  1. 配置模式选项,请单击脚本配置

  2. 并将本文前提条件中的JSON脚本复制粘贴到脚本配置的编辑栏中。

  3. 单击确定

  4. 单击RAM角色管理>创建RAM角色

  5. 当前可信实体类型选择阿里云服务

  6. 单击下一步

  7. 角色类型选择普通服务角色

  8. 填写角色名称

  9. 选择受信服务,选择云服务器

  10. 单击完成

  11. 单击为角色授权

  12. 选择权限下单击自定义策略

  13. 找到步骤6创建的权限策略,并单击选中。

  14. 单击确定,完成了RAM角色的创建和对应权限策略的授予。

  15. 接下来则需将RAM角色授予给目标实例,返回ECS管理控制台实例列表

  16. 找到将安装软件的实例,单击更多>实例设置>授予或收回RAM角色

  17. 选中步骤18中创建的RAM角色。

  18. 单击确定,则完成了为实例授予RAM角色。

  19. 再次单击蓝色实例ID,则可在实例详情中看到该实例已被成功授予RAM角色。

创建OSS存储空间

  1. 登录OSS控制台。 创建一个用来存储我的软件的OOS Bucket。

  2. 单击Bucket 列表>创建 Bucket

  3. 输入Bucket 名称

  4. 根据OOS的当前地域,选择区域。其它属性如存储类型等可根据您的需求确定,或直接使用默认值。

  5. 单击确定

我的软件的创建

  1. 登录OOS控制台

  2. 单击我的软件。单击创建软件。

  3. 单击软件信息。

  4. 输入软件名称

  5. 单击软件包。

  6. 单击增加软件包配置

    可添加的范围当前支持以rpm、deb、msi等为后缀软件包,各类软件包适配情况如下。

    软件包分类

    平台

    架构

    msi

    windows

    x86_64386

    rpm

    aliyunredhatcentossuse

    x86_64386arm64

    deb

    debianubuntu

    x86_64386arm64

  7. 选择OSS Bucket, 在选择OSS软件包中选中 / 后,单击添加软件包直接从本地选择目标软件包进行上传。

    选择OSS软件包也支持选择已上传好的软件包。本示例选择的是从本地直接上传以rpm为后缀的软件,根据您的实际情况也可选deb或msi后缀的软件,设置适配平台及架构时适当调整即可。

  8. 为软件包设置安装执行脚本,设置卸载执行脚本

  9. 设置软件的适用平台架构

    安装执行脚本示例:

    #!/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

    卸载执行脚本示例:

    #!/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

  10. 单击创建软件包

我的软件的安装

  1. 开始安装前请确保目标资源已满足本文的前提条件一节,安装我的软件有两个入口,可直接通过我的软件来安装,也可在批量管理软件中进行安装,本示例通过批量管理软件来完成自定义软件的安装。

  2. 单击批量管理软件

  3. 单击选择任务类型。

  4. 单击创建软件类型选择我的软件

  5. 操作内容选择安装,并选择将安装的软件名称。

  6. 单击选择实例。本示例通过手动选择实例,并确保选择的是网络类型为vpc的实例。

  7. 单击立即执行

  8. 可通过批量管理软件下的任务查看安装详情。

我的软件的卸载

  1. 开始卸载前请确保目标资源已满足本文的前提条件一节,单击批量管理软件

  2. 单击选择任务类型。

  3. 单击创建软件类型选择我的软件

  4. 操作内容选择卸载,并选择将卸载的软件名称。

  5. 单击选择实例。本示例通过手动选择实例,并选中网络类型为vpc的实例。

  6. 单击立即执行

  7. 可通过批量管理软件下的任务查看卸载详情。