我有一个带有2个参数的参数化jenkins作业:
第二个作业参数是“类型的服务”和“活动选择反应参数”#39; - 单选,引用参数APIKEY并使用以下groovy脚本代码在单选UI控件中返回APIKEY参数的值:
[ APIKEY ]
当我开始构建此作业时,参数SERVICE的单一选择UI控件中提供的值是APIKEY的乱码(加密?)值。
我想要的是能够在SERVICE参数的脚本代码中使用输入的APIKEY密码参数的实际(解密)值。
我尝试使用hudson.util.Secret解密APIKEY乱码值,如下所示,但没有运气:
def apikey = hudson.util.Secret.fromString(APIKEY).getPlainText()
有没有办法从主动选择反应参数groovy脚本代码中获取实际密码参数值?
答案 0 :(得分:0)
经过多一点尝试后,事实证明这毕竟是正常工作 - 但只有当手动输入密码参数时,才会使用默认密码参数值(不确定这是否是错误或功能)。
第一次运行作业时,提供的默认密码参数值是乱码,但在密码字段中再次输入值,然后在groovy脚本中给出正确的值。
这对我有用:
由于我的用例是每次创建作业时都必须输入APIKEY,这对我来说已经足够了。
答案 1 :(得分:0)
这是一个古老的话题,但是我找到了一个解决方案,所以我将在这里添加它,以防其他人仍然需要它。这是有效的代码,但我对其进行了清理以进行发布。
此Groovy脚本在“主动选择反应参数”中运行。任务是提供可从内部Artifactory存档中部署的构建版本的列表。 REST调用所需的API密钥作为秘密文本存储在我们的Jenkins实例中。因此,此代码从Credentials插件的存储库中读取以找到秘密文本,然后将其添加到http请求的标头中。
这是一个笨拙的解决方案。对于Groovy,有一种更优雅的withCredentials
方法,但它可能仅在Jenkins管道中有效。我没有找到在此参数中使用它的方法。
此解决方案也没有使用HTTPBuilder,这本来会更简单,但在Groovy插件中不可用。
import org.apache.http.client.methods.*
import org.apache.http.impl.client.*
import groovy.json.JsonSlurper;
def APP_FULL_NAME = "My.Project.Name"
def request = new HttpGet("https://fakeDns/artifactory/api/search/versions?r=releases&a="+APP_FULL_NAME)
def jenkinsCredentials = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
com.cloudbees.plugins.credentials.Credentials.class,
Jenkins.instance,
null,
null
);
def apiKey
for (creds in jenkinsCredentials)
{
//println creds.id
//println creds.class
if(creds.id == "my_target_api_key")
{
apiKey = creds.secret.toString(creds.secret);
break
}
}
request.addHeader("X-API-KEY", apiKey)
def responseString = new DefaultHttpClient().execute(request, new BasicResponseHandler());
def branchList = new JsonSlurper().parseText(responseString)
//return branchList
def myList= []
branchList.results.each { myList << it }
return myList.version