首页 运维编排服务 快速入门 批量管理我的软件

批量管理我的软件

通过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. 可通过批量管理软件下的任务查看卸载详情。

阿里云首页 运维编排服务 相关技术圈