2017-11-25 1 views
0

Kann jemand httpRequest in Jenkinsfile-Pipeline mit grundlegenden Auth verwenden? Ich habe in der https://github.com/jenkinsci/http-request-plugin eingecheckt, unterstützen sie unterstützt Standard-Authentifizierung (siehe globale Konfiguration). Aber als ich in meinem groovigen Skript implementiert habe, habe ich die folgenden Fehler gefunden. Kann jemand zeigen, wie man den Benutzernamen und das Passwort an den httprequest weitergibt.wie httpRequest in Jenkinsfile-Pipeline mit grundlegenden Auth verwenden

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: Es gibt keine @DataBoundConstructor auf jedem Konstruktor der Klasse java.lang.String bei org.kohsuke.stapler.ClassDescriptor.loadConstructorParamNames (ClassDescriptor.java: 247) bei org.jenkinsci.plugins.structs.describable.DescribableModel. (DescribableModel.java:122) bei org.jenkinsci.plugins.structs.describable.DescribableModel.coerce (DescribableModel.java:380) bei

 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}"]] 

Das neue Problem: 401 Berechtigungsproblem. Aber ich habe die richtigen Anmeldeinformationen verwendet und kann sie besuchen.

Ich weiß, dass mein Format der Authentifizierung nicht korrekt ist, wissen Sie, welcher der richtige Weg sein sollte? Danke.

Mit besten Grüßen,

Antwort

1

Verwenden Sie die Credential-Plugin Credential plugin für Ihre Anmeldeinformationen zu speichern. Verwenden Sie dann die ID in der httpRequest.

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' 

Oder Sie können Ihren Benutzernamen und Ihr Passwort direkt in die Kopfzeile eingeben.

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

Vielen Dank. Gibt es einen anderen Ansatz, um den Endpunkt zu besuchen, mit Ausnahme der http-Anfrage? Ich hoffe, dass mein Benutzername und Passwort im Tresor anstatt der Anmelde-ID gespeichert sind. Beste Grüße, – neilxie

+0

Ich habe meine Antwort mit einem anderen Beispiel bearbeitet. –

+0

Vielen Dank. Aber ich habe hier ein neues Problem mit Anmeldefehler gefunden. – neilxie

Verwandte Themen