我正在尝试将
Nuke.Build
推送到 Azure DevOps 内部源。
如果我在 Azure Pipelines 中执行此操作,并添加一个发布 nuget 的步骤,它将给我一个如下步骤:
对于经典:
steps:
- task: DotNetCoreCLI@2
displayName: 'dotnet push'
inputs:
command: push
publishVstsFeed: 'faeeeeee-eeee-eeee-eeee-c48a92cb3804/2a06fd96-0000-0000-0000-643ff5710000'
对于 yaml:
- task: NuGetCommand@2
inputs:
command: 'push'
packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg'
nuGetFeedType: 'internal'
publishVstsFeed: 'faeeeeee-eeee-eeee-eeee-c48a92cb3804/2a06fd96-0000-0000-0000-643ff5710000'
在这两种情况下,它都依赖于用于发布到内部 NuGet Feed 的内部变量或令牌。
现在,当我从 Nuke 执行此操作时,我的发布步骤如下:
Target Publish => _ => _
.DependsOn(Pack)
.Executes(() =>
{
DotNetTasks.DotNetNuGetPush(x => x
.SetApiKey("????")
.SetSource("https://pkgs.dev.azure.com/company/project/_packaging/feed/nuget/v3/index.json")
.SetTargetPath(PackagesDirectory));
});
我从中得到:
错误:响应状态代码不表示成功:401(未经授权)。
所以需要API Key。
从哪里获取 ApiKey?必须有一种从管道导入秘密的方法,这样我就可以以非交互式方式从 Nuke.Build 中的发布步骤使用它(除了 PAT 方式)?
希望我没有为您的问题迟到。
以下是我们在 Azure Pipeline 中发布 nuget 包的方式。
假设您正在使用 NuGetSource 和 NuGetApiKey 的参数。
Target NugetPublish => definition => definition
.Requires(() => NuGetApiKey, () => NuGetSource)
.Executes(() =>
{
DotNetNuGetPush(pushSettings => pushSettings
.SetSource(NuGetSource)
.SetApiKey(NuGetApiKey)
.EnableNoSymbols()
.EnableSkipDuplicate()
.CombineWith(PushPackageFiles, (settings, path) => settings
.SetTargetPath(path)));
});
在我们的 Azure Pipeline 中,我像这样使用 nuke
# this authenticates the pipeline with the azure artifacts storage
- task: NuGetAuthenticate@1
# feedName is the name of the feed within your nuget.config, ApiKey is static AzureDevops to tell the preauthentication should be used
- pwsh: './build.ps1 NugetPublish --NuGetSource feedName --NuGetApiKey AzureDevops'
在 nuget.config 中定义 feed:
<add key="feedName" value="https://org.pkgs.visualstudio.com/software/_packaging/feedName/nuget/v3/index.json" />
致以诚挚的问候