如何通过基本身份验证在Jenkinsfile管道中使用httpRequest

nei*_*xie 3 groovy httprequest jenkins

有谁知道如何在带有基本身份验证的Jenkinsfile管道中使用httpRequest?我检查了https://github.com/jenkinsci/http-request-plugin,它们支持Supports Basic Authentication(请参阅全局配置)。但是当我在groovy脚本中实现时,发现以下错误。任何人都可以显示如何将用户名和密码传递给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]
Run Code Online (Sandbox Code Playgroud)

}

org.kohsuke.stapler.NoStaplerConstructorException:org.jenkinsci.plugins.structs.des上的org.kohsuke.stapler.ClassDescriptor.loadConstructorParamNames(ClassDescriptor.java:247)上的任何java.lang.String类构造函数上都没有@DataBoundConstructor。 org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:380)上的DescribableModel。(DescribableModel.java:122)

     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}"]]
Run Code Online (Sandbox Code Playgroud)

新问题:401身份验证问题。但是我确实使用了正确的凭据,可以访问它们。

我知道我的身份验证格式不正确,您知道哪种方法正确吗?谢谢。

最好的祝福,

Les*_*ola 11

使用凭据插件凭据插件用于存储凭据。然后使用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'
Run Code Online (Sandbox Code Playgroud)

或者,您可以将用户名和密码直接插入标题中。

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

  • 我收到“脚本不允许使用 java.lang.String getBytes 方法”。还有其他想法吗? (2认同)