本文介绍如何使用EDAS提供的Java SDK调用API在ECS集群中回滚应用到目标历史版本。
前提条件
回滚应用到目标历史版本前,您必须提前完成以下准备工作:
- 安装EDAS的Java SDK。更多信息,请参见Java SDK接入指南。 
- 确定创建ECS集群的地域。 
- 您的应用已经升级版本。目前支持多种升级应用的方式,请根据实际需求选择: 
- 调用ListHistoryDeployVersion接口查询应用历史版本列表,获取目标历史版本的PackageVersion,假设为20210417.154931。 
- 请调用ListDeployGroup接口查询应用实例分组列表,获取应用实例分组的GroupId,假设为941be68c-4aac-48a1-88fe-c9ad1502****。 
回滚应用到目标历史版本
以下代码适用于在EDAS ECS集群中回滚应用到目标历史版本。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.edas.model.v20170801.RollbackApplicationRequest;
import com.aliyuncs.edas.model.v20170801.RollbackApplicationResponse;
public class RollbackApplication {
    public static void main(String[] args)  {
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        // 此处以把AccessKey和AccessKeySecret保存在环境变量为例说明。您可以根据业务需要,保存到配置文件里。
        // 强烈建议不要把AccessKey和AccessKeySecret保存到代码里,会存在密钥泄漏风险。
        String aliyun_user_ak = System.getenv("ACCESS_KEY_ID");
        String aliyun_user_sk = System.getenv("ACCESS_KEY_SECRET");
        //应用所在地域ID。
        String region_id = "cn-hangzhou";
        DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
        DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
        //创建API请求,并设置参数。
        RollbackApplicationRequest request = new RollbackApplicationRequest();
        //需要回滚历史版本的目标应用的AppId。
        request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
        //应用要回滚到的历史版本。可以调用ListHistoryDeployVersion接口获取。
        request.setHistoryVersion("20210417.154931");
        //部署分组ID。如果要部署到所有分组,参数设置为all。
        //如果需要部署到具体应用实例分组,可以调用ListDeployGroup接口获取GroupId。
        request.setGroupId("all");
        //每组发布批次,可设置范围为1~5,1代表单批发布,2~4代表分批发布。
        request.setBatch(1);
        //分批等待时间,单位分钟。默认为0,表示不等待;最大值为5。如果是单批发布,无需设置此参数。
        request.setBatchWaitTime(0);
        try {
            RollbackApplicationResponse response = client.getAcsResponse(request);
            System.out.println("Message=" + response.getMessage() + "\nChangeOrderId=" + response.getChangeOrderId());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}运行程序,返回的执行结果如下所示:
Message=success
ChangeOrderId=b3496bf0-0b6b-42c3-921c-f5250af****结果验证
您在回滚应用到目标历史版本后,可以调用GetChangeOrderInfo接口查看变更流程详情,获取回滚应用的变更状态。具体API参数详情,请参见GetChangeOrderInfo。
调用GetChangeOrderInfo接口查看变更流程详情,返回的执行结果如下:
{
  "Message": "success",
  "RequestId": "EF09BCD3-3D37-4D76-9CF3-12B71A9EDE7C",
  "Code": 200,
  "changeOrderInfo": {
    "Status": 2,
    "Desc": "Version: 20210417.154931 | Package Name: sc-consumer-D-0.0.1-SNAPSHOT.jar?Expires=161864****&OSSAccessKeyId=TMP.3KgjU****fSsJ&Signature=LrUEz***X9c...",
    "PipelineInfoList": {
      "PipelineInfo": [
        {
          "PipelineStatus": 2,
          "PipelineName": "Batch 1 Change",
           ...... 
           //此处未罗列全部执行结果,仅供参考。请查看上述执行结果中的changeOrderInfo.Status参数值,通过该值判断回滚应用到历史版本的变更是否成功。changeOrderInfo.Status的取值如下:
- 0:准备 
- 1:执行中 
- 2:执行成功 
- 3:执行失败 
- 6:终止 
- 8:手动分批发布模式下,等待手工确认执行下一批。 
- 9:自动分批发布模式下,等待下一批执行中。 
- 10:系统异常执行失败 
该文章对您有帮助吗?