2017-11-25 158 views
0

有谁知道如何在基本身份验证中使用Jenkinsfile管道中的httpRequest? 我检查了https://github.com/jenkinsci/http-request-plugin,它们支持支持基本认证(请参阅全局配置)。但是当我在我的groovy脚本中实现时,我发现了以下错误。任何人都可以展示如何将用户名和密码传递给httprequest。如何在基本身份验证中使用Jenkinsfile管道中的httpRequest

def masterDataReplicatorTriggerDeployment() { 
milestone 40 
VaultUtil vaultUtil = PipelineUtil.getInstance(this).getProdVaultUtil() 
def ROUTER_USER 
def ROUTER_PASS 
def baseurl="http://master-data-replicator.cfapps.us10.hana.ondemand.com" 
def sourcetenant="revcdevkp" 
def targettenant="revcdevpo" 
def copyBCdata="/replicator/v1/businessConfig/" 
def response 


ROUTER_USER=vaultUtil.readCredential 
("secret/landscapes/infrastructure/router").get("router.security.username") 
ROUTER_PASS=vaultUtil.readCredential 
("secret/landscapes/infrastructure/router").get("router.security.password") 
response = httpRequest url: 
baseurl+copyBCdata+sourcetenant+"/"+targettenant, 
httpMode: 'POST', 
authentication: [Username: ROUTER_USER, Password: ROUTER_PASS] 

}

org.kohsuke.stapler.NoStaplerConstructorException:有一个关于在org.kohsuke.stapler.ClassDescriptor.loadConstructorParamNames(ClassDescriptor.java类java.lang.String 的任何构造没有@DataBoundConstructor: 247) 在org.jenkinsci.plugins.structs.describable.DescribableModel。(DescribableModel.java:122) 在org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:380) 在

 def creds = "ROUTER_USER:ROUTER_PASS" 
    String auth = creds.bytes.encodeBase64().toString() 
    httpRequest consoleLogResponseBody: true, 
     url: baseurl+copyBCdata+sourcetenant+"/"+targettenant,      
     customHeaders:[[name:'Authorization', value:"Basic ${auth}"]] 

新问题:401认证问题。 但我确实使用了正确的凭证并可以访问它们。

我知道我的认证格式不正确,你知道哪个应该是正确的方法吗? 谢谢。

最好的问候,

回答

1

使用证书插件Credential plugin存储您的凭据。然后使用httpRequest中的ID。

Example : 

New credential 

Scope : Global 
Username : my_technical_user 
Password : ******* 
ID : my_user_id 

httpRequest 

httpRequest httpMode: 'POST', 
url: "${baseurl}${copyBCdata}${sourcetenant}/${targettenant}", 
authentication: 'my_user_id' 

或者您可以直接在标头上注入您的用户名和密码。

def creds = "your_username:your_password" 
String auth = creds.bytes.encodeBase64().toString() 
httpRequest consoleLogResponseBody: true, 
      url: "your_url",      
      customHeaders:[[name:'Authorization', value:"Basic ${auth}"]] 
+0

非常感谢。除了http请求之外,还有其他方法可以实现访问端点吗?我希望我的用户名和密码存储在Vault中,而不是凭据ID。 最好的问候, – neilxie

+0

我编辑我的答案与另一个例子。 –

+0

非常感谢。但是我遇到了一个新的问题,凭证凭证错误。 – neilxie

相关问题