无法发布到 Azure devops Nuget
Unable to publish to Azure devops Nuget
我构建了一个同时使用 PSGallery 和 Azure Devops 的模块(我有一个免费的存储库,我一直在使用它)。这是模块:https://www.powershellgallery.com/packages/xanderu.helpers/0.1.9
我 运行 遇到的问题是,当我尝试利用安全存储库时,我不断收到禁止错误。这是我调用模块的方式:
Publish-ToPSGallery -PSGalleryKey $PSGalleryKey `
-secureRepoName 'PowershellAZDO' `
-secureRepopublishApiKey $PATToken `
-secureRepopublishApiURL "https://pkgs.dev.azure.com/$orgName/$projectName/_packaging/$feedName/nuget/v2/" `
-secureRepoUser $secureRepoUser `
-secureRepoPass $PATToken `
-codePath .
它是一个非常简单的前向模块,但基本上创建了一个带有标签 'private' 的模块(或脚本),它应该相应地发布到 PSGallery 或 AZDO。我确定这与我使用令牌和凭据(或 API 密钥)的方式有关。有人知道我在这里做错了什么吗?
编辑:作为 xanderu.helpers 的一部分,有一个函数 new-powershelltemplate,它将自动构建可用于发布管道的模块清单或脚本基线
附加编辑:
我还尝试了以下推送到 myget nuget 并且它推送但它不会使用 find-module -repository myget 找到模块:
Publish-ToPSGallery -PSGalleryKey $PSGalleryKey `
-secureRepoName 'MyGet' `
-secureRepopublishApiKey $nugetAPIKey `
-secureRepopublishApiURL "https://www.myget.org/F/$feedName/api/v2" `
-secureRepoUser $secureRepoUser `
-secureRepoPass $secureRepoPass `
-codePath .
编辑 #3
当我 运行
nuget.exe sources
在我 运行 脚本之后,我可以看到 nuget 获取 PowershellAZDO 作为源。然后我运行:
nuget push -Source "PowershellAZDO" -ApiKey AzureDevOps .\xanderu.helpers.0.1.9.nupkg
然后系统提示我输入用户名和密码。当我输入用户名和 PATToken 时,它会推送包。这似乎是 Publish-Module 命令中的错误,但我不确定原因。就像模块传递的 PSCredential 不被尊重一样。我一直在挖掘,发现在 PowerShellGet v2.2.5 PSModule.psm1 文件中,有一个调用(第 10990 行):
Publish-PSArtifactUtility @PublishPSArtifactUtility_Params
我确实在其中看到了 PSCredential 对象。我已将以下步骤添加到 PowerShellGet 模块中,似乎可以解决此问题...但这是它会出现的源代码中的错误(从第 6018 行开始):
elseif ($NuGetExePath) {
& $NuGetExePath sources update -Name $Repository -UserName $Credential.Username -Password $Credential.GetNetworkCredential().Password
Publish-NugetPackage -NupkgPath $NupkgFullName -Destination $Destination -NugetApiKey $NugetApiKey -NugetExePath $NuGetExePath -Verbose:$VerbosePreference
}
NuGet 版本:5.7.0.6726
PowerShellGet 版本:2.2.5
这是由我使用的 Powershellget 模块 v 2.2.5 中的错误引起的。根本原因是因为 repo 没有传入密码,您需要将密码添加到 nuget 的配置中。这似乎在 PowerShellGet 的 3.0.0 版本中得到了解决。我将需要更新我的 manifest/modules 以强制加载该版本的模块来解决问题。
编辑:从头开始...我认为这似乎有效,但这是因为我的 nuget.exe 信誉被保留了。
编辑2:
这可以正常工作,并且不需要拧紧核心模块。在 运行 执行 Register-PSRepository 命令后,请确保您也 运行 以下内容,否则发布到 Azure Devops 的管道将无法工作。这是模块中的一个错误,因为它可以在其他地方使用。
nuget sources update -Name $secureRepoParams.Name -UserName $secureRepoParams.Credential -Password $secureRepoParams.Credential.GetNetworkCredential().Password
我构建了一个同时使用 PSGallery 和 Azure Devops 的模块(我有一个免费的存储库,我一直在使用它)。这是模块:https://www.powershellgallery.com/packages/xanderu.helpers/0.1.9
我 运行 遇到的问题是,当我尝试利用安全存储库时,我不断收到禁止错误。这是我调用模块的方式:
Publish-ToPSGallery -PSGalleryKey $PSGalleryKey `
-secureRepoName 'PowershellAZDO' `
-secureRepopublishApiKey $PATToken `
-secureRepopublishApiURL "https://pkgs.dev.azure.com/$orgName/$projectName/_packaging/$feedName/nuget/v2/" `
-secureRepoUser $secureRepoUser `
-secureRepoPass $PATToken `
-codePath .
它是一个非常简单的前向模块,但基本上创建了一个带有标签 'private' 的模块(或脚本),它应该相应地发布到 PSGallery 或 AZDO。我确定这与我使用令牌和凭据(或 API 密钥)的方式有关。有人知道我在这里做错了什么吗?
编辑:作为 xanderu.helpers 的一部分,有一个函数 new-powershelltemplate,它将自动构建可用于发布管道的模块清单或脚本基线
附加编辑: 我还尝试了以下推送到 myget nuget 并且它推送但它不会使用 find-module -repository myget 找到模块:
Publish-ToPSGallery -PSGalleryKey $PSGalleryKey `
-secureRepoName 'MyGet' `
-secureRepopublishApiKey $nugetAPIKey `
-secureRepopublishApiURL "https://www.myget.org/F/$feedName/api/v2" `
-secureRepoUser $secureRepoUser `
-secureRepoPass $secureRepoPass `
-codePath .
编辑 #3 当我 运行
nuget.exe sources
在我 运行 脚本之后,我可以看到 nuget 获取 PowershellAZDO 作为源。然后我运行:
nuget push -Source "PowershellAZDO" -ApiKey AzureDevOps .\xanderu.helpers.0.1.9.nupkg
然后系统提示我输入用户名和密码。当我输入用户名和 PATToken 时,它会推送包。这似乎是 Publish-Module 命令中的错误,但我不确定原因。就像模块传递的 PSCredential 不被尊重一样。我一直在挖掘,发现在 PowerShellGet v2.2.5 PSModule.psm1 文件中,有一个调用(第 10990 行):
Publish-PSArtifactUtility @PublishPSArtifactUtility_Params
我确实在其中看到了 PSCredential 对象。我已将以下步骤添加到 PowerShellGet 模块中,似乎可以解决此问题...但这是它会出现的源代码中的错误(从第 6018 行开始):
elseif ($NuGetExePath) {
& $NuGetExePath sources update -Name $Repository -UserName $Credential.Username -Password $Credential.GetNetworkCredential().Password
Publish-NugetPackage -NupkgPath $NupkgFullName -Destination $Destination -NugetApiKey $NugetApiKey -NugetExePath $NuGetExePath -Verbose:$VerbosePreference
}
NuGet 版本:5.7.0.6726
PowerShellGet 版本:2.2.5
这是由我使用的 Powershellget 模块 v 2.2.5 中的错误引起的。根本原因是因为 repo 没有传入密码,您需要将密码添加到 nuget 的配置中。这似乎在 PowerShellGet 的 3.0.0 版本中得到了解决。我将需要更新我的 manifest/modules 以强制加载该版本的模块来解决问题。
编辑:从头开始...我认为这似乎有效,但这是因为我的 nuget.exe 信誉被保留了。
编辑2: 这可以正常工作,并且不需要拧紧核心模块。在 运行 执行 Register-PSRepository 命令后,请确保您也 运行 以下内容,否则发布到 Azure Devops 的管道将无法工作。这是模块中的一个错误,因为它可以在其他地方使用。
nuget sources update -Name $secureRepoParams.Name -UserName $secureRepoParams.Credential -Password $secureRepoParams.Credential.GetNetworkCredential().Password