diff --git a/README.md b/README.md index 8af33394d8a76035d6590f05bbb5b3fb330e4147..e4102834f4020912bb74ccb2384e23b1e46bff7a 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,31 @@ ak/sk示例1:OBSPipelineUpload(ak:"...",sk:"...",endpoint:"obs.cn-south-1.myhu ![上传](image/codeArtsPipeline.jpg) +## 6、DEW服务查询凭据的版本与凭据值 + +### 查询指定凭据版本的信息和版本中的明文凭据值 + +#### Pipeline查询指定凭据 + +##### 参数说明 + +| 参数名称 | 参数说明 | +| ------------------ | ------------------------------------------------------------ | +| accessKey | Access Key | +| secretKey | Secret Key | +| region | Region:所在区域,如cn-north-4 +| secretName | 凭证名称 | +| versionId | 凭证版本 | + +##### 片段生成器生成 + +示例:getContracts(accessKey: '', region: '', secretKey: '', secretName: '', versionId: '') + +![上传](image/DEWCredentials.jpg) + + + + ## 构建 1.修改${USER}/.m2/settings.xml中的maven配置文件 diff --git a/image/DEWCredentials.jpg b/image/DEWCredentials.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c16ab6b0a8a5442e59d2d355cb1ec764567e421 Binary files /dev/null and b/image/DEWCredentials.jpg differ diff --git a/pom.xml b/pom.xml index 7d25f97bca85403eed28c05a655dab32fd178cc4..5be9a7ec6c61dd1f793642cb2cfeddee70ce6da6 100644 --- a/pom.xml +++ b/pom.xml @@ -247,6 +247,31 @@ + + com.huaweicloud.sdk + huaweicloud-sdk-csms + 3.1.53 + + + com.huaweicloud.sdk + huaweicloud-sdk-core + + + + + + + com.huaweicloud.sdk + huaweicloud-sdk-iam + 3.1.54 + + + com.huaweicloud.sdk + huaweicloud-sdk-core + + + + diff --git a/src/main/java/com/huawei/jenkins/iam/CustomInput.java b/src/main/java/com/huawei/jenkins/iam/CustomInput.java new file mode 100644 index 0000000000000000000000000000000000000000..8be81bfb8bb679d8cd334dc9057a1cf098d2b755 --- /dev/null +++ b/src/main/java/com/huawei/jenkins/iam/CustomInput.java @@ -0,0 +1,58 @@ +package com.huawei.jenkins.iam; + +/** + * 用户自定义输出参数 + */ +public class CustomInput { + private static final long serialVersionUID = 1L; + + private String accessKey; + + private String secretKey; + + private String secretName; + + private String region; + + private String versionId; + + public String getAccessKey() { + return accessKey; + } + + public void setAccessKey(String accessKey) { + this.accessKey = accessKey; + } + + public String getSecretKey() { + return secretKey; + } + + public void setSecretKey(String secretKey) { + this.secretKey = secretKey; + } + + public String getSecretName() { + return secretName; + } + + public void setSecretName(String secretName) { + this.secretName = secretName; + } + + public String getRegion() { + return region; + } + + public void setRegion(String region) { + this.region = region; + } + + public String getVersionId() { + return versionId; + } + + public void setVersionId(String versionId) { + this.versionId = versionId; + } +} diff --git a/src/main/java/com/huawei/jenkins/iam/iamSecretStep.java b/src/main/java/com/huawei/jenkins/iam/iamSecretStep.java new file mode 100644 index 0000000000000000000000000000000000000000..be4fa606884fcf2c708336b4b7fd1a1b2e78e12f --- /dev/null +++ b/src/main/java/com/huawei/jenkins/iam/iamSecretStep.java @@ -0,0 +1,136 @@ +package com.huawei.jenkins.iam; + +import hudson.EnvVars; +import hudson.Extension; +import hudson.FilePath; +import hudson.model.TaskListener; +import org.jenkinsci.plugins.workflow.steps.*; +import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.DataBoundSetter; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +public class iamSecretStep extends Step { + + private String accessKey; + + private String secretKey; + + private String secretName; + + private String region; + + private String versionId; + + + public String getAccessKey() { + return accessKey; + } + + @DataBoundSetter + public void setAccessKey(String accessKey) { + this.accessKey = accessKey; + } + + public String getSecretKey() { + return secretKey; + } + + @DataBoundSetter + public void setSecretKey(String secretKey) { + this.secretKey = secretKey; + } + + public String getSecretName() { + return secretName; + } + + @DataBoundSetter + public void setSecretName(String secretName) { + this.secretName = secretName; + } + + + public String getRegion() { + return region; + } + + @DataBoundSetter + public void setRegion(String region) { + this.region = region; + } + + public String getVersionId() { + return versionId; + } + + @DataBoundSetter + public void setVersionId(String versionId) { + this.versionId = versionId; + } + + @DataBoundConstructor + public iamSecretStep(String region) { + this.region = region; + } + + @Override + public StepExecution start(StepContext context) throws Exception { + return new Execution(this, context); + } + + + @Extension + public static class DescriptorImpl extends StepDescriptor { + + @Override + public Set> getRequiredContext() { + return requires(TaskListener.class, EnvVars.class, FilePath.class); + } + + @Override + public String getFunctionName() { + return "getContracts"; + } + + @Override + public String getDisplayName() { + return "华为云凭证获取"; + } + } + + + public static > Set requires(T... classes) { + return new HashSet<>(Arrays.asList(classes)); + } + + + public static class Execution extends SynchronousNonBlockingStepExecution { + + protected static final long serialVersionUID = 1L; + + protected final transient iamSecretStep step; + + public Execution(iamSecretStep step, StepContext context) { + super(context); + this.step = step; + + } + + @Override + public String run() throws Exception { + CustomInput customInput = new CustomInput(); + customInput.setAccessKey(step.getAccessKey()); + customInput.setSecretKey(step.getSecretKey()); + customInput.setRegion(step.getRegion()); + customInput.setSecretName(step.getSecretName()); + customInput.setVersionId(step.getVersionId()); + TaskListener listener = iamSecretStep.Execution.this.getContext().get(TaskListener.class); + return secretService.getCredentials(listener,customInput); + } + } + + +} diff --git a/src/main/java/com/huawei/jenkins/iam/secretService.java b/src/main/java/com/huawei/jenkins/iam/secretService.java new file mode 100644 index 0000000000000000000000000000000000000000..8b73fe45f7eee2583e88db3a954ee242448e2ed8 --- /dev/null +++ b/src/main/java/com/huawei/jenkins/iam/secretService.java @@ -0,0 +1,64 @@ +package com.huawei.jenkins.iam; + + +import com.google.common.base.Preconditions; +import com.huaweicloud.sdk.core.auth.BasicCredentials; +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.csms.v1.CsmsClient; +import com.huaweicloud.sdk.csms.v1.model.ShowSecretVersionRequest; +import com.huaweicloud.sdk.csms.v1.model.ShowSecretVersionResponse; +import com.huaweicloud.sdk.csms.v1.region.CsmsRegion; +import hudson.model.TaskListener; +import org.apache.commons.lang.StringUtils; + +import java.io.Serializable; + +public class secretService implements Serializable { + private static final long serialVersionUID = 1; + + + public static String getCredentials(TaskListener listener, CustomInput customInput){ + + inputValidate(customInput); + + ICredential auth = new BasicCredentials() + .withAk(customInput.getAccessKey()) + .withSk(customInput.getSecretKey()); + + CsmsClient csmsClient = CsmsClient.newBuilder() + .withCredential(auth) + .withRegion(CsmsRegion.valueOf(customInput.getRegion())) + .build(); + + String secretString =""; + try { + ShowSecretVersionResponse latestVersionValue = csmsClient.showSecretVersion(new ShowSecretVersionRequest().withSecretName(customInput.getSecretName()).withVersionId(customInput.getVersionId() == null ? "latest" : customInput.getVersionId())); + secretString = latestVersionValue.getVersion().getSecretString(); + } catch (ConnectionException e) { + e.printStackTrace(); + } catch (RequestTimeoutException e) { + e.printStackTrace(); + } catch (ServiceResponseException e) { + e.printStackTrace(); + listener.getLogger().println("ErrorMsg:" + e.getErrorMsg()); + } + return secretString; + } + + + + private static void inputValidate(CustomInput customInput) { + final String secretName = customInput.getSecretName(); + final String region = customInput.getRegion(); + final String sk = customInput.getSecretKey(); + final String ak = customInput.getAccessKey(); + Preconditions.checkArgument(StringUtils.isNotBlank(secretName), "ObsPath can not be blank"); + Preconditions.checkArgument(StringUtils.isNotBlank(region), "region can not be blank"); + Preconditions.checkArgument(StringUtils.isNotBlank(ak) && StringUtils.isNotBlank(sk), "Ak, Sk can not be blank"); + } + + +} diff --git a/src/main/resources/com/huawei/jenkins/codeCheck/codeCheckPipelineStep/help-region.html b/src/main/resources/com/huawei/jenkins/codeCheck/codeCheckPipelineStep/help-region.html index 3ccb0ee1cc8e5c5011f7848477d9879d62772f6c..743a86d651eed8c0530e85d5a251808353205072 100644 --- a/src/main/resources/com/huawei/jenkins/codeCheck/codeCheckPipelineStep/help-region.html +++ b/src/main/resources/com/huawei/jenkins/codeCheck/codeCheckPipelineStep/help-region.html @@ -14,5 +14,5 @@ limitations under the License. -->
- The currently callable territory + Huawei Cloud region
diff --git a/src/main/resources/com/huawei/jenkins/iam/Messages.properties b/src/main/resources/com/huawei/jenkins/iam/Messages.properties new file mode 100644 index 0000000000000000000000000000000000000000..619a94cbea70bf59f5652eeb3119a11c619d4fc7 --- /dev/null +++ b/src/main/resources/com/huawei/jenkins/iam/Messages.properties @@ -0,0 +1,6 @@ +IAMPublish.DisplayName=HuaweiCloud DEW + +IAMPublish.MissingRegion=Please set Region +IAMPublish.MissingTaskName=Please set secret name +IAMPublish.MissingUrl=Please set version + diff --git a/src/main/resources/com/huawei/jenkins/iam/Messages_zh_CN.properties b/src/main/resources/com/huawei/jenkins/iam/Messages_zh_CN.properties new file mode 100644 index 0000000000000000000000000000000000000000..f3b3d69aba64afdbccbe6a334b5486c2b4288df8 --- /dev/null +++ b/src/main/resources/com/huawei/jenkins/iam/Messages_zh_CN.properties @@ -0,0 +1 @@ +IAMPublish.DisplayName=\u534e\u4e3a\u4e91OBS\u4e0a\u4f20 diff --git a/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/config.jelly b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/config.jelly new file mode 100644 index 0000000000000000000000000000000000000000..f17a1d27e87057f1c6414088ea32db8fadbf0cd5 --- /dev/null +++ b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/config.jelly @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-accessKey.html b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-accessKey.html new file mode 100644 index 0000000000000000000000000000000000000000..596311a803a843c897f1d588253914201eb96f05 --- /dev/null +++ b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-accessKey.html @@ -0,0 +1,19 @@ + +
+ HuaweiCloud Access Key, used only when the credential id is null
+ config +
diff --git a/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-region.html b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-region.html new file mode 100644 index 0000000000000000000000000000000000000000..743a86d651eed8c0530e85d5a251808353205072 --- /dev/null +++ b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-region.html @@ -0,0 +1,18 @@ + +
+ Huawei Cloud region +
diff --git a/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-secretKey.html b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-secretKey.html new file mode 100644 index 0000000000000000000000000000000000000000..59444304796d1c9468fe6e0762d5ec7d03ec388f --- /dev/null +++ b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-secretKey.html @@ -0,0 +1,19 @@ + +
+ HuaweiCloud Secret Key, used only when the credential id is null
+ config +
diff --git a/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-secretName.html b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-secretName.html new file mode 100644 index 0000000000000000000000000000000000000000..0d37073759997c915ab3a2828899f7d0e925215d --- /dev/null +++ b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-secretName.html @@ -0,0 +1,18 @@ + +
+ Huawei Cloud dew Secret name +
diff --git a/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-versionId.html b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-versionId.html new file mode 100644 index 0000000000000000000000000000000000000000..89a0d8762430cb8c0ae4791dc342b1cf4e582438 --- /dev/null +++ b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help-versionId.html @@ -0,0 +1,18 @@ + +
+ Huawei Cloud dew Secret version +
diff --git a/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help.html b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help.html new file mode 100644 index 0000000000000000000000000000000000000000..30113173d40399e588b3fef07c2ae1949d2646a0 --- /dev/null +++ b/src/main/resources/com/huawei/jenkins/iam/iamSecretStep/help.html @@ -0,0 +1,20 @@ + +
+

+ get Huawei Cloud credential +

+
diff --git a/src/main/resources/com/huawei/jenkins/vss/vssCheckPipelineStep/help-region.html b/src/main/resources/com/huawei/jenkins/vss/vssCheckPipelineStep/help-region.html index 3ccb0ee1cc8e5c5011f7848477d9879d62772f6c..743a86d651eed8c0530e85d5a251808353205072 100644 --- a/src/main/resources/com/huawei/jenkins/vss/vssCheckPipelineStep/help-region.html +++ b/src/main/resources/com/huawei/jenkins/vss/vssCheckPipelineStep/help-region.html @@ -14,5 +14,5 @@ limitations under the License. -->
- The currently callable territory + Huawei Cloud region
diff --git a/src/main/resources/index.jelly b/src/main/resources/index.jelly index 729839c07f08ecb816f8ddb7153c33efbbdfa4fd..7c7907255bc86d5720cf33ced22e944ca412e0af 100644 --- a/src/main/resources/index.jelly +++ b/src/main/resources/index.jelly @@ -1,4 +1,4 @@
- This plugin provides the “Huawei Cloud Storage Uploader” post-build step for publishing build artifacts to OBS Storage. + The plug-in provides "Huawei cloud storage and code Arts capabilities, and VSS website vulnerability scanning and key acquisition capabilities."