如何使用 bitsadmin.exe (Windows) 从经过身份验证的 Jenkins 服务器下载文件

如何使用 bitsadmin.exe (Windows) 从经过身份验证的 Jenkins 服务器下载文件

如果工作区是匿名访问,我知道使用以下命令从 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

相关内容