簡體   English   中英

將 nuget 包從 VSTS 推送到 nuget.org 時忽略重復項

[英]Ignore duplicates when pushing nuget package to nuget.org from VSTS

我在 VSTS 中構建了一個在存儲庫中的每次提交時都會觸發的構建。 除了一個例外,一切都很好。

我們不會在每次提交時發布新版本的 nuget 包。 所以我們的 nuget push 構建步驟失敗,http 狀態代碼為 409。我已經配置了該步驟,以便它可以繼續。

由於錯誤,構建只是“部分成功”。 我正在使用構建徽章,它也說明了相同的內容(沒有上下文)。

如何告訴 VSTS 忽略 409 或僅替換現有包(在 nuget.org 上)?

您不能忽略 VSTS 構建中的 409 錯誤,也不能替換服務器中的現有包。

我建議您可以在發布中推送包,如果包存在,則發布失敗。

另一種方式是,您可以在構建過程中在推送包之前檢查服務器中的包(例如PowerShell,REST API)並設置推送包任務的條件(自定義條件)。

例如:

  1. 添加一個變量來構建定義(例如 hasPackage true)
  2. 檢查包(PowerShell、Rest API 等...)
  3. 如果包存在,將變量設置為 false ( "##vso[task.setvariable variable=hasPackage;]false" )
  4. 為推送包任務設置自定義條件(例如 eq(variables['hasPackage'],'false'))

更新:

現在 NuGet 推送任務支持允許跳過重復項! (只需在 NuGet 推送任務中選中允許跳過重復項選項。

使用-skipDuplicate標志(從 NuGet 5.1 開始可用):

(5.1+) 如果包和版本已經存在,跳過它並繼續推送中的下一個包(如果有)。

來源: https : //docs.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-push#options

我們在 Azure Pipelines 上遇到重復包的問題。

starian chen-MSFT 提出的解決方案很酷,但它需要一些腳本。

我們找到了需要更少努力的解決方案。 您可以創建命令行步驟並使用以下參數調用 dotnet nuget push:

dotnet nuget push $(Build.ArtifactStagingDirectory)/*.nupkg --skip-duplicate --api-key $(Config.NuGetApiKey) --source https://api.nuget.org/v3/index.json

關鍵是參數 --skip-duplicate 如果它們已經存在,它只會跳過包。

在變量 $(Config.NuGetApiKey) 中定義 NuGet.org 的 API 密鑰。 你應該讓它成為秘密變量,這樣它就不會出現在日志中的任何地方。

這是此命令的 YAML:

steps:
- script: |
   dotnet nuget push $(Build.ArtifactStagingDirectory)/*.nupkg --skip-duplicate --api-key $(Config.NuGetApiKey) --source https://api.nuget.org/v3/index.json
   
  failOnStderr: true
  displayName: 'Publish NuGet Package'

暫無
暫無

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

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