%20%E5%BE%9E%E7%B6%93%E9%81%8E%E9%A9%97%E8%AD%89%E7%9A%84%20Jenkins%20%E4%BC%BA%E6%9C%8D%E5%99%A8%E4%B8%8B%E8%BC%89%E6%96%87%E4%BB%B6.png)
我知道如果工作區是匿名訪問,可以使用以下命令從 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.
答案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