diff --git a/HuaweiCloud-obs-uploader.hpi b/HuaweiCloud-jenkins-plugins.hpi similarity index 98% rename from HuaweiCloud-obs-uploader.hpi rename to HuaweiCloud-jenkins-plugins.hpi index d63f888b3e2caa1a3b225f42d1322505926e676b..2db92d7a8229d91160019ab8da51870c01b865fe 100644 Binary files a/HuaweiCloud-obs-uploader.hpi and b/HuaweiCloud-jenkins-plugins.hpi differ diff --git a/README.md b/README.md index be98d5294c990523ae1c3a51efc5137f544feb02..1f27d3282c08bbd41c82cc3c4b1dafc28fbf171e 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ #### 下载源码&编译 ```bash -git clone https://gitee.com/HuaweiCloudDeveloper/obs-jenkins-plugins.git -cd obs-jenkins-plugins +git clone https://gitee.com/HuaweiCloudDeveloper/huaweicloud-jenkins-plugins.git +cd huaweicloud-jenkins-plugins mvn package -DskipTests ``` #### 上传插件 diff --git a/pom.xml b/pom.xml index b133075e47b29f3d0d665688366e6e10561f900e..7d25f97bca85403eed28c05a655dab32fd178cc4 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.jenkins.plugins - HuaweiCloud-obs-uploader + HuaweiCloud-jenkins-plugins ${revision}${changelist} hpi TODO Plugin diff --git a/src/main/java/com/huawei/jenkins/cloudpipeline/CodeArtsPipelineService.java b/src/main/java/com/huawei/jenkins/cloudpipeline/CodeArtsPipelineService.java index fb89d115d54740cf7299e1f9e316bf8474600dbe..23a3826c0ba73f538bdda9ef73a822fb0a13d9d5 100644 --- a/src/main/java/com/huawei/jenkins/cloudpipeline/CodeArtsPipelineService.java +++ b/src/main/java/com/huawei/jenkins/cloudpipeline/CodeArtsPipelineService.java @@ -9,10 +9,17 @@ import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; +import com.huaweicloud.sdk.smn.v2.SmnClient; +import com.huaweicloud.sdk.smn.v2.model.PublishMessageRequest; +import com.huaweicloud.sdk.smn.v2.model.PublishMessageRequestBody; +import com.huaweicloud.sdk.smn.v2.model.PublishMessageResponse; +import com.huaweicloud.sdk.smn.v2.region.SmnRegion; import hudson.model.TaskListener; import org.apache.commons.lang.StringUtils; import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; public class CodeArtsPipelineService implements Serializable { @@ -34,16 +41,22 @@ public class CodeArtsPipelineService implements Serializable { RunPipelineDTO body = new RunPipelineDTO(); request.withBody(body); String status = "RUNNING"; + ShowPipelineRunDetailResponse info = null; try { RunPipelineResponse response = client.runPipeline(request); while (!status.equals("COMPLETED")&&!status.equals("FAILED")) { - status = ShowPipelineRunDetail(client, listener, customInput); + info = ShowPipelineRunDetail(client, listener, customInput); + status = info.getStatus(); try { Thread.currentThread().sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } + //SMN消息通知 + if(StringUtils.isNotBlank(customInput.getTopicUrn())){ + publishMessage(customInput, info, listener); + } } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { @@ -56,14 +69,13 @@ public class CodeArtsPipelineService implements Serializable { } - public static String ShowPipelineRunDetail(CloudPipelineClient client, TaskListener listener, CustomInput customInput) { + public static ShowPipelineRunDetailResponse ShowPipelineRunDetail(CloudPipelineClient client, TaskListener listener, CustomInput customInput) { ShowPipelineRunDetailRequest request = new ShowPipelineRunDetailRequest(); request.withProjectId(customInput.getProject_id()); request.withPipelineId(customInput.getPipeline_id()); - String status = "RUNNING"; + ShowPipelineRunDetailResponse response = null; try { - ShowPipelineRunDetailResponse response = client.showPipelineRunDetail(request); - status = response.getStatus(); + response = client.showPipelineRunDetail(request); listener.getLogger().println("status:" + response.getStatus()); } catch (ConnectionException e) { e.printStackTrace(); @@ -73,7 +85,7 @@ public class CodeArtsPipelineService implements Serializable { e.printStackTrace(); listener.getLogger().println("ErrorMsg:" + e.getErrorMsg()); } - return status; + return response; } private static void inputValidate(CustomInput customInput) { @@ -90,7 +102,37 @@ public class CodeArtsPipelineService implements Serializable { + public static void publishMessage(CustomInput customInput, ShowPipelineRunDetailResponse info, TaskListener listener) { + ICredential auth = new BasicCredentials() + .withAk(customInput.getAk()) + .withSk(customInput.getSk()); + SmnClient client = SmnClient.newBuilder() + .withCredential(auth) + .withRegion(SmnRegion.valueOf(customInput.getRegion())) + .build(); + PublishMessageRequest request = new PublishMessageRequest(); + request.withTopicUrn(customInput.getTopicUrn()); + PublishMessageRequestBody body = new PublishMessageRequestBody(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String message = "尊敬的华为云用户,您好:\n执行CodeArts pipeline的信息:"; + message+="\nname:" + info.getName(); + message+="\n开始时间:" + sdf.format(new Date(Long.parseLong(String.valueOf(info.getStartTime())))); + message+="\n结束时间:" + sdf.format(new Date(Long.parseLong(String.valueOf(info.getEndTime())))); + message+="\n结果:" + info.getStatus(); + body.withMessage(message); + request.withBody(body); + try { + PublishMessageResponse response = client.publishMessage(request); + } catch (ConnectionException e) { + e.printStackTrace(); + } catch (RequestTimeoutException e) { + e.printStackTrace(); + } catch (ServiceResponseException e) { + e.printStackTrace(); + listener.getLogger().println("SMN服务消息发生失败,错误信息:" + e.getErrorMsg()); + } + } diff --git a/src/main/java/com/huawei/jenkins/cloudpipeline/CodeArtsPipelineStep.java b/src/main/java/com/huawei/jenkins/cloudpipeline/CodeArtsPipelineStep.java index a4cec48fc332c9a0ddd4f0e6c33fd0381bf2df31..dade73b1edfce15b36ccab852f3a5ffe4e0177bf 100644 --- a/src/main/java/com/huawei/jenkins/cloudpipeline/CodeArtsPipelineStep.java +++ b/src/main/java/com/huawei/jenkins/cloudpipeline/CodeArtsPipelineStep.java @@ -43,6 +43,8 @@ public class CodeArtsPipelineStep extends Step { private String pipeline_id; + private String topicUrn; + public String getAk() { return ak; } @@ -88,6 +90,15 @@ public class CodeArtsPipelineStep extends Step { this.pipeline_id = pipeline_id; } + public String getTopicUrn() { + return topicUrn; + } + + @DataBoundSetter + public void setTopicUrn(String topicUrn) { + this.topicUrn = topicUrn; + } + @DataBoundConstructor public CodeArtsPipelineStep(String region) { this.region = region; @@ -141,6 +152,7 @@ public class CodeArtsPipelineStep extends Step { customInput.setRegion(step.getRegion()); customInput.setProject_id(step.getProject_id()); customInput.setPipeline_id(step.getPipeline_id()); + customInput.setTopicUrn(step.getTopicUrn()); TaskListener listener = Execution.this.getContext().get(TaskListener.class); return CodeArtsPipelineService.runPipeline(listener, customInput); } diff --git a/src/main/java/com/huawei/jenkins/cloudpipeline/CustomInput.java b/src/main/java/com/huawei/jenkins/cloudpipeline/CustomInput.java index 7907b6549486eff2e0d957019c5828b0a946f2b5..d448bb45850252706742bead078fcec669f185d5 100644 --- a/src/main/java/com/huawei/jenkins/cloudpipeline/CustomInput.java +++ b/src/main/java/com/huawei/jenkins/cloudpipeline/CustomInput.java @@ -18,6 +18,8 @@ public class CustomInput implements Serializable { private String pipeline_id; + private String topicUrn; + public String getAk() { return ak; } @@ -57,4 +59,12 @@ public class CustomInput implements Serializable { public void setPipeline_id(String pipeline_id) { this.pipeline_id = pipeline_id; } + + public String getTopicUrn() { + return topicUrn; + } + + public void setTopicUrn(String topicUrn) { + this.topicUrn = topicUrn; + } }