2017-11-25 15 views
0

誰かが基本認証でJenkinsfileパイプラインでhttpRequestを使用する方法を知っていますか? https://github.com/jenkinsci/http-request-pluginでチェックしましたが、基本認証をサポートしています(グローバル設定を参照)。しかし、私がグルーヴィースクリプトで実装したとき、私は次のエラーを発見しました。誰でも、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はありません。 org.jenkinsci.plugins.structs.describable.DescribableModelにおける247) 。(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 authrizationの問題。 しかし、私は正しい信用証明書を使用し、それらを訪問することができます。

私の認証形式が正しくないことが分かっていますが、正しい方法であるはずですか?おかげさまで

よろしく、

答えて

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リクエスト以外のエンドポイントの訪問を実現するための他の方法はありますか?私は、クレデンシャルIDの代わりにボールトに保存されているユーザー名とパスワードを願っています。 よろしく、 – neilxie

+0

私は別の例で私の答えを編集しました。 –

+0

ありがとうございます。しかし、私は信任状のエラーでここで新たな問題に会った。 – neilxie

関連する問題