日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用API金絲雀發(fā)布(ECS集群)

本文介紹如何使用EDAS提供的Java SDK調(diào)用API在EDAS ECS環(huán)境中金絲雀發(fā)布應(yīng)用。

前提條件

在EDAS ECS環(huán)境中金絲雀發(fā)布應(yīng)用前,您必須提前完成以下準(zhǔn)備工作:

  • 安裝EDAS的Java SDK。更多信息,請(qǐng)參見Java SDK接入指南
  • 確定創(chuàng)建應(yīng)用的地域,假設(shè)為cn-hangzhou

  • 創(chuàng)建微服務(wù)空間。具體操作,請(qǐng)參見創(chuàng)建命名空間

    如果已經(jīng)存在命名空間,您可以調(diào)用ListUserDefineRegion接口查詢用戶自定義命名空間列表,獲取目標(biāo)命名空間的RegionId

  • 在ECS集群中創(chuàng)建應(yīng)用,具體操作,請(qǐng)參見使用API創(chuàng)建應(yīng)用(ECS)

    如果已經(jīng)創(chuàng)建應(yīng)用,您可以調(diào)用ListApplication接口查詢應(yīng)用列表,獲取目標(biāo)應(yīng)用的APPId,假設(shè)為6bbc57a2-a017-4bec-b521-49a15bd3****

  • 已將應(yīng)用部署包(JAR包或WAR包)上傳至目標(biāo)地址。本示例以O(shè)SS存儲(chǔ)路徑為例,假設(shè)為https:doc***.oss-cn-hangzhou.aliyuncs.com/sc-****-D-0.0.1-SNAPSHOT.jar

  • 請(qǐng)調(diào)用ListDeployGroup接口查詢應(yīng)用實(shí)例分組列表,獲取應(yīng)用實(shí)例分組的GroupId,假設(shè)為941be68c-4aac-48a1-88fe-c9ad1502****

  • 如果需要發(fā)布HSF應(yīng)用,則需要調(diào)用ListBuildPack接口查詢?nèi)萜靼姹玖斜恚@取容器版本(ConfigId)參數(shù),假設(shè)為57

背景信息

使用API金絲雀發(fā)布應(yīng)用,在首批灰度發(fā)布后,您必須手動(dòng)確認(rèn)繼續(xù)剩余批次的發(fā)布。在確認(rèn)剩余批次發(fā)布前,您可以進(jìn)行小規(guī)模驗(yàn)證,驗(yàn)證后,再繼續(xù)剩余批次的發(fā)布,即將應(yīng)用全量升級(jí)到新版本。

使用API金絲雀發(fā)布應(yīng)用,設(shè)置剩余批次(除灰度發(fā)布分組外)的發(fā)布方式時(shí)推薦選用自動(dòng)分批發(fā)布。如果您選用手動(dòng)分批發(fā)布方式,則還需要調(diào)用ContinuePipeline接口手動(dòng)確認(rèn)執(zhí)行下一批發(fā)布。

金絲雀發(fā)布應(yīng)用

  1. 運(yùn)行程序,金絲雀發(fā)布應(yīng)用。

    以下代碼適用于在ECS環(huán)境金絲雀發(fā)布應(yīng)用。代碼中未設(shè)置環(huán)境變量等高級(jí)參數(shù),如您需了解更多API參數(shù)信息,請(qǐng)參見DeployApplication

    說明

    以下代碼適用于分批發(fā)布Spring Cloud和Dubbo應(yīng)用,如需發(fā)布HSF應(yīng)用,則需要在代碼中增加EDAS-Container信息:

    //EDAS-Container構(gòu)建包號(hào),當(dāng)發(fā)布HSF應(yīng)用時(shí),該參數(shù)必須指定。可以調(diào)用ListBuildPack接口獲取,對(duì)應(yīng)ConfigId參數(shù)。
    request.setBuildPackId(57);
    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.DeployApplicationRequest;
    import com.aliyuncs.edas.model.v20170801.DeployApplicationResponse;
    
    public class DeployApplication {
    
        public static void main(String[] args)  {
            // 阿里云賬號(hào)AccessKey擁有所有API的訪問權(quán)限,風(fēng)險(xiǎn)很高。強(qiáng)烈建議您創(chuàng)建并使用RAM用戶進(jìn)行API訪問或日常運(yùn)維,請(qǐng)登錄RAM控制臺(tái)創(chuàng)建RAM用戶。
            // 此處以把AccessKey和AccessKeySecret保存在環(huán)境變量為例說明。您可以根據(jù)業(yè)務(wù)需要,保存到配置文件里。
            // 強(qiáng)烈建議不要把AccessKey和AccessKeySecret保存到代碼里,會(huì)存在密鑰泄漏風(fēng)險(xiǎn)。
            String aliyun_user_ak = System.getenv("ACCESS_KEY_ID");
            String aliyun_user_sk = System.getenv("ACCESS_KEY_SECRET");
            //需要部署應(yīng)用的所在地域ID。
            String region_id = "cn-hangzhou";
    
            DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
            DefaultAcsClient client = new DefaultAcsClient(defaultProfile);
    
            //創(chuàng)建API請(qǐng)求,并設(shè)置參數(shù)。
            DeployApplicationRequest request = new DeployApplicationRequest();
            //目標(biāo)應(yīng)用的AppId。
            request.setAppId("6bbc57a2-a017-4bec-b521-49a15bd3****");
            //應(yīng)用描述信息。
            request.setDesc("金絲雀發(fā)布");
            //部署類型,僅支持設(shè)置為url。
            request.setDeployType("url");
            //應(yīng)用部署包(WAR或JAR)的URL地址,建議使用OSS存儲(chǔ)的應(yīng)用部署包路徑。
            request.setWarUrl("https:doc***.oss-cn-hangzhou.aliyuncs.com/sc-****-D-0.0.1-SNAPSHOT.jar");
            //部署的應(yīng)用部署包版本,最長64個(gè)字符,建議使用時(shí)間戳。
            request.setPackageVersion("20210417.173831");
            //是否為金絲雀發(fā)布,true表示金絲雀,false表示非金絲雀。金絲雀發(fā)布時(shí)必須設(shè)置分組ID,且后續(xù)分組批次由Batch控制。
            request.setGray(true);
            //金絲雀發(fā)布流量控制策略。示例策略表示:50%的流量會(huì)被轉(zhuǎn)發(fā)到灰度分組。
            request.setTrafficControlStrategy("{\"http\":{\"rules\":[{\"conditionType\":\"percent\",\"percent\":50}]}}");
            //部署分組ID。如果要部署到所有分組,參數(shù)設(shè)置為all。金絲雀發(fā)布時(shí)必須指定灰度發(fā)布分組的GroupId。
            //如果需要部署到具體應(yīng)用實(shí)例分組,可以調(diào)用ListDeployGroup接口獲取GroupId。
            request.setGroupId("941be68c-4aac-48a1-88fe-c9ad1502****");
            //灰度發(fā)布后的每組發(fā)布批次,設(shè)置為大于1,代表分批發(fā)布。
            request.setBatch(2);
            //分批方式,0表示自動(dòng),1表示批次間需要手動(dòng)確認(rèn)。建議使用自動(dòng)發(fā)布方式。
            request.setReleaseType((long) 1);
            //分批等待時(shí)間,單位分鐘。默認(rèn)為0,表示不等待;最大值為5。
            request.setBatchWaitTime(1);
            //應(yīng)用組件ID。當(dāng)創(chuàng)建的應(yīng)用運(yùn)行環(huán)境使用Apache Tomcat(適用于WAR包部署的Dubbo應(yīng)用)或者標(biāo)準(zhǔn)Java應(yīng)用運(yùn)行環(huán)境(適用于JAR包部署的Spring Boot或Spring Cloud應(yīng)用)時(shí)需要指定。
            //4代表Apache Tomcat 7.0.91,7代表Apache Tomcat 8.5.42,5代表OpenJDK 1.8.x,6代表OpenJDK 1.7.x。
            request.setComponentIds("5");
    
            try {
                DeployApplicationResponse response = client.getAcsResponse(request);
                System.out.println("Message=" + response.getMessage() + "\nChangeOrderId=" + response.getChangeOrderId());
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }

    運(yùn)行程序,返回的執(zhí)行結(jié)果如下所示:

    Message=success
    ChangeOrderId=4a3329de-2495-4c51-be33-f69ff264****
  2. 調(diào)用GetChangeOrderInfo接口,獲取金絲雀發(fā)布應(yīng)用變更的相關(guān)批次的流程ID(PipelineId)。

    調(diào)用GetChangeOrderInfo接口,返回結(jié)果如下:

    {
      "Message": "success",
      "RequestId": "0EB98A7D-50CE-4F5F-855D-70BAF61DFB38",
      "Code": 200,
      "changeOrderInfo": {
        "Status": 8,
        "Desc": "金絲雀發(fā)布",
        "PipelineInfoList": {
          "PipelineInfo": [
            {
              ......
              "PipelineId": "09e7d9aa-e79d-49ef-99b9-5405532d****"
              ......
              "PipelineId": "1ea53844-2c60-46f1-b46d-df3b34d0****"
              ......
              "PipelineId": "d99da075-b87d-4fe7-bbb6-ae1c6c26****"
              ......
              //此處未羅列全部執(zhí)行結(jié)果,僅供參考。
    說明

    示例代碼的場(chǎng)景是在灰度分組發(fā)布后,剩余分組批次的策略是剩余分2批發(fā)布+手動(dòng)分批。當(dāng)灰度分組發(fā)布完成以后,需要手動(dòng)確認(rèn)繼續(xù)剩余分組批次的發(fā)布。在調(diào)用GetChangeOrderInfo接口返回結(jié)果中出現(xiàn)3個(gè)流程ID(PipelineId),第二次出現(xiàn)的流程ID(PipelineId)代表需要手動(dòng)確認(rèn)繼續(xù)剩余批次的發(fā)布,第三次出現(xiàn)的流程ID(PipelineId)代表剩余分組批次中第一批完成后需要手動(dòng)確認(rèn)繼續(xù)下一批次的發(fā)布。

  3. 調(diào)用ContinuePipeline接口,手動(dòng)確認(rèn)繼續(xù)剩余分組批次發(fā)布。

    返回結(jié)果如下:

    {
      "Message": "success",
      "RequestId": "B8ECF6F7-672D-40E9-91DD-1C33F06D4FD8",
      "Code": 200
    }
  4. 調(diào)用ContinuePipeline接口,手動(dòng)確認(rèn)下一批發(fā)布。

    返回結(jié)果如下:

    {
      "Message": "success",
      "RequestId": "7BB4F043-7C28-4A0E-B6A5-D4023EB24388",
      "Code": 200
    }
    說明

    示例代碼的場(chǎng)景是在灰度分組發(fā)布后,剩余分組批次的策略是剩余分2批發(fā)布+手動(dòng)分批。運(yùn)行到剩余分組批次過程,只需要手動(dòng)確認(rèn)一批。如果您是剩余批次需要手動(dòng)確認(rèn)多批的場(chǎng)景,請(qǐng)選擇正確批次的流程ID(PipelineId)并重復(fù)執(zhí)行此步驟。

結(jié)果驗(yàn)證

您在金絲雀發(fā)布應(yīng)用后,可以調(diào)用GetChangeOrderInfo接口查看變更流程詳情,獲取金絲雀發(fā)布應(yīng)用的變更狀態(tài)。具體API參數(shù)詳情,請(qǐng)參見GetChangeOrderInfo

調(diào)用GetChangeOrderInfo接口查看變更流程詳情,返回的執(zhí)行結(jié)果如下:

{
  "Message": "success",
  "RequestId": "0EB98A7D-50CE-4F5F-855D-70BAF61DFB38",
  "Code": 200,
  "changeOrderInfo": {
    "Status": 2,
    "Desc": "金絲雀發(fā)布",
    "PipelineInfoList": {
      "PipelineInfo": [
                {
                   ......
                   //此處未羅列全部執(zhí)行結(jié)果,僅供參考。

請(qǐng)查看上述執(zhí)行結(jié)果中的changeOrderInfo.Status參數(shù)值,通過該值判斷金絲雀發(fā)布應(yīng)用的變更是否成功。changeOrderInfo.Status的取值如下:

  • 0:準(zhǔn)備

  • 1:執(zhí)行中

  • 2:執(zhí)行成功

  • 3:執(zhí)行失敗

  • 6:終止

  • 8:手動(dòng)分批發(fā)布模式下,等待手工確認(rèn)執(zhí)行下一批。

  • 9:自動(dòng)分批發(fā)布模式下,等待下一批執(zhí)行中。

  • 10:系統(tǒng)異常執(zhí)行失敗