前言
上期本文对基于专有云EDAS OpenAPI构建企业级云原生CICD的前期工作进行了介绍,本期将对调用EDAS OpenAPI拉取镜像部署应用进行详细介绍。
流程
Jenkins构建完项目可以按版本号把镜像上传到镜像仓库,调用EDAS OpenAPI拉取镜像部署应用、通知相关人员等。
CICD流程调用EDAS OpenAPI接口:
(1)调用GetK8sApplication接口获取容器服务Kubernetes中部署的应用镜像URL信息。
(2)调用DeployK8sApplication接口拉取应用镜像部署容器服务K8S应用。
准备工作
在专有云中调用EDAS的OpenAPI需要完成以下3件事:
- 在JAVA项目工程中声明并引入EDAS-SDK。
- 获取EDAS-OpenAPI对外的服务域名,即专有云EDAS-endpoint地址。
- 在适配插件中拼装请求报文,完成API调用的指令。
在适配插件中引入EDAS-SDK
在IDE工具上打开Maven项目下的pom.xml文件,在文件中添加sdk:aliyun-java-sdk-core和sdk:aliyun-java-sdk-edas依赖。
图1:添加依赖
获取部门信息
登录Apsara Stack控制台,在左侧导航栏选择用户中心-->部门管理,选择对应的部门,单击“获取accesskey”。获取RegionId、AccessKey ID和AccessKey Secret。
图2:Apsara Stack控制台部门管理
图3:部门相关信息
获取EDAS API服务地址endpoint
登录天基平台,选择报表-->全部报表-->资源申请报表,全局搜索edas,如下图中Parameters详情界面domain即endpoint的值。
图4:天基获取EDAS API服务地址endpoint-1
图5:天基获取EDAS API服务地址endpoint-2
GetK8sApplication获取容器服务中部署的应用信息
获取容器服务Kubernetes中部署的应用信息。
- 请求URL
/pop/v5/changeorder/co_application
- 请求参数
- 返回参数
- 请求示例
public class GetK8sApplicationSimpleInfo {
public String getK8sApplication() throws ClientException {
//请填写要执行 API 调用的应用所在地域 ID.
String regionId = "your_ regionId ";
//请填写阿里云主账号或子账号 AccessKey ID.
String accessKeyId = " your_accessKeyId ";
//请填写阿里云主账号或子账号 AccessKey Secret.
String accessKeySecret = " your_accessKeySecret ";
String productName = "Edas";
String domain = "edas-api.console.cn-neimeng-poc2-d01.cloud.poc2.com";
DefaultProfile defaultProfile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient defaultAcsClient = new DefaultAcsClient(defaultProfile);
GetK8sApplicationRequest request = new GetK8sApplicationRequest();
request.setAppId("f66a****-c***-4***-a***-c***********");
request.setEndpoint("edas-api.console. your_regionId.cloud.poc2.com");
GetK8sApplicationResponse response;
String resp = "";
try {
response = defaultAcsClient.getAcsResponse(request);
resp = "返回码:" + response.getCode() + "----" + "返回信息:" + response.getMessage()
+ "镜像URL:" + response.getApplcation().getImageInfo().getImageUrl();
System.out.printf("返回码:" + response.getCode() + "----" + "返回信息:" + response.getMessage()
+ "镜像URL:" + response.getApplcation().getImageInfo().getImageUrl());
} catch (ClientException e) {
e.printStackTrace();
}
return resp;
}
}
返回示例
图6:GetK8sApplication返回示例
DeployK8sApplication部署容器服务K8S应用
部署容器服务K8S应用。
- 请求URL
/pop/v5/k8s/acs/k8s_apps
- 请求参数
- 返回参数
- 请求示例
public class DeployK8sApplictionSimpleInfo {
public String deployK8sApplication() {
//请填写阿里云主账号或子账号 AccessKey ID.
String aliyun_user_ak = "your_ AccessKey ID ";
//请填写阿里云主账号或子账号 AccessKey Secret.
String aliyun_user_sk = "your_ AccessKey Secret ";
//请填写要执行 API 调用的应用所在地域 ID.
String region_id = "your_regionid";
DefaultProfile defaultProfile = DefaultProfile.getProfile(region_id, aliyun_user_ak, aliyun_user_sk);
DefaultAcsClient defaultAcsClient = new DefaultAcsClient(defaultProfile);
DeployK8sApplicationRequest request = new DeployK8sApplicationRequest();
request.setAppId("f6******-c***-4***-a***-c***********");
request.setEndpoint("edas-api.console. your_regionId.cloud.poc2.com");
request.setImage("cr.registry.cloud.poc2.com/pdsa/k8s-nacos-consumer:v2");
request.setImageTag("v2");
request.setJDK("Open JDK 8");
request.setEnvs("[{\"name\":\"updatetime\",\"value\":\""+ new Date() + "\"}]");
DeployK8sApplicationResponse response;
String resp = "";
try {
response = defaultAcsClient.getAcsResponse(request);
resp = "返回码:" + response.getCode() + "----" + "返回信息:" + response.getMessage();
System.out.printf("返回码:" + response.getCode() + "----" + "返回信息:" + response.getMessage());
} catch (ClientException e) {
e.printStackTrace();
}
return resp;
}
}
- 返回示例
图7:DeployK8sApplication返回示例
作者:刘伟业阿里云智能混合云PDSA团队高级解决方案工程师
曾就职于新华三云做软件定义数据中心解决方案,负责多个省级云平台的架构设计和落地。现就职于阿里云智能混合云PDSA团队负责容器和云原生产品的方案设计、POC和最佳实践工作。
我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。我们期望能够分享更多帮助企业客户上云、用好云,让客户云上业务运行更加稳定可靠的技术,您可用钉钉扫描下方二维码,加入阿里云SRE技术学院钉钉圈子,和更多云上人交流关于云平台的那些事。