簡體   English   中英

在 Python 中下載 Azure Devops 工件

[英]Download Azure Devops artifact in Python

I am able to use Azure Rest API in Python ( https://github.com/microsoft/azure-devops-python-api ) to get a download URL for an Artifact eg

artifacts = build_client.get_artifacts(project_name, build_id)

然后我想用類似的東西下載它們

for artifact in artifacts:
    urllib.request.urlretrieve(artifact.resource.download_url, artifactDownloadPath + artifact.name)

但是,它不是下載工件,而是下載 HTML 頁面。 相同的鏈接在 web 瀏覽器中有效。

如何像在 YAML 中一樣下載工件?

我們有 API 版本 6.0 用於 python package 下載 Z3A580F142203677F0BCOpsif89

下面是 API,可以在任何 UI 中使用

GET https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/pypi/packages/{packageName}/versions/{packageVersion}/{fileName}/content?api-version=6.0-preview.1

您可以從 Azure Docs 查看所有參數

在 Windows 中,您可以通過濫用注冊表 + Microsoft Edge 來使用 Powershell 來執行此操作(我猜可以從 Python 調用)。

taskkill > $null /im msedge.exe /f /FI "STATUS eq RUNNING" 
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}" -Value "C:\MyDownloadDirectory\"        
start $artifact.resource.downloadUrl

在腳本中導入請求並使用 GET 類型的 API:

https://dev.azure.com/{organization}/{project}/_apis/build/builds/{build_id}/artifacts?artifactName={artifactName}&api-version=6.0&%24format=zip

工件名稱是您在構建管道的發布構建任務中提供的名稱(默認為 drop)

然后檢索內容並在本地創建文件。

resp = requests.get(api, auth=("", PAT))
with open(f"{artifact_name}.zip", "wb") as f:
 f.write(resp.content)

然后,您將在當前工作目錄中獲得已發布工件的 zip 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM