認証された Jenkins サーバーからファイルをダウンロードする bitsadmin.exe (Windows) の使用方法

認証された Jenkins サーバーからファイルをダウンロードする bitsadmin.exe (Windows) の使用方法

ワークスペースが匿名アクセスの場合、次のコマンドを使用して Jenkins サーバーからファイルをダウンロードできることはわかっています。

bitsadmin.exe /transfer replica /priority FOREGROUND http://1.1.1.1:8080/job/dump_data/ws/dump_data.zip %WORKSPACE%\dump_data.zip

しかし、Jenkins サーバーがユーザー名/パスワードで認証されている場合はどうなるでしょうか?

編集: /setcredentials は動作しますが、/create、/addfile、/resume、/complete しか使用できないという問題があります。転送が完了するまで待ってからバッチ スクリプトを続行するにはどうすればよいでしょうか?

編集: さらにテストすると、/setcredential が機能しなかったことがわかります。前のテストでは、Jenkins が匿名アクセスを許可していたため、機能することが示されています。bitadmin を使用しているときにパケットをキャプチャしました。http 要求が資格情報のない HEAD であることがわかります。ダウンロードに curl-win を使用すると、http 要求は基本認証のユーザー名とパスワードを含む GET になります。

答え1

BITS ジョブで資格情報を設定する必要がある場合は、/setcredentialsスイッチを使用します。

 /SETCREDENTIALS job target scheme username password
     Adds credentials to a job.
     target may be either SERVER or PROXY
     scheme may be BASIC, DIGEST, NTLM, NEGOTIATE, or PASSPORT.

BITSadminの優れたss64コマンドリファレンスはここにあります。

答え2

.bat質問に対応するスクリプトは次のとおりです。

bitsadmin /Create DownloadDumpData
bitsadmin /SetCredentials DownloadDumpData target scheme username password
bitsadmin /AddFile DownloadDumpData http://1.1.1.1:8080/job/dump_data/ws/dump_data.zip %WORKSPACE%\dump_data.zip
bitsadmin /SetPriority DownloadDumpData "FOREGROUND"
bitsadmin /Resume DownloadDumpData
:WAIT_DUMP_DATA_DOWNLOAD_LOOP_START
    @rem state thanks to http://ss64.com/nt/bitsadmin.html & http://serverfault.com/a/646948/93281
    call bitsadmin /info DownloadDumpData /verbose | find "STATE: TRANSFERRED"
    if %ERRORLEVEL% equ 0 goto WAIT_DUMP_DATA_DOWNLOAD_LOOP_END
    call bitsadmin /RawReturn /GetBytesTransferred DownloadDumpData
    @rem sleep thanks to http://stackoverflow.com/a/1672375/535203
    timeout 2
    goto WAIT_DUMP_DATA_DOWNLOAD_LOOP_START
:WAIT_DUMP_DATA_DOWNLOAD_LOOP_END
call bitsadmin /Complete DownloadDumpData

関連情報