.net - 在 Docker 映像中使用“dotnet”测试 Nuget 身份验证凭据
问题描述
如果提供的凭据无效,我正在寻找一种安全且直接的方法来使我的图像构建失败。问题是我需要从中提取包的仓库有一个策略,该策略会在尝试太多失败后锁定帐户——并且由于每个单独的包都算作一次单独的身份验证尝试,因此一次错误的构建尝试将锁定该帐户。
在我Dockerfile
的中,我像这样设置了 nuget 源,然后像这样恢复(或发布/运行等)。
RUN dotnet nuget add source https://my-example-repo.jfrog.io/my-example/api/nuget/nuget \
-n Artifactory \
-u ${JFROG_USERNAME} \
-p ${JFROG_PASSWORD} \
--store-password-in-clear-text
RUN dotnet restore
理想的解决方案将是以下两件事之一:
- 如果任何包无法恢复,则该标志
dotnet restore
立即以非零代码退出,例如dotnet restore --failfast
- 使用当前凭据进行身份验证并在凭据不起作用时退出非零的单个、安全、幂等命令。
解决方案
它看起来有点hacky,但我建议采用这种方法。
您可以简单地创建一个测试 C# 项目,其中一个引用来自您的私有存储库中的包。
然后您尝试通过dotnet
CLI 恢复它。
如果您的凭据无效,它将失败,将有一个非零退出代码。
- 使用凭据配置 NuGet 源
如您所知,当您运行时dotnet restore
,它使用一种特殊的机制来累积不同级别的设置:
- 解决方案
- 用户
- 计算机
因此,当您运行此命令时,您的用户nuget.config
文件将被更新。
(在 Windows 上它位于那里%APPDATA%\NuGet\nuget.config
)
dotnet nuget add source https://my-example-repo.jfrog.io/my-example/api/nuget/nuget \
-n Artifactory \
-u ${JFROG_USERNAME} \
-p ${JFROG_PASSWORD} \
--store-password-in-clear-text
- 创建一个名为的测试项目文件
credentials-test.csproj
:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<!-- Replace an example by your package from private repository. -->
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" />
</ItemGroup>
</Project>
- 然后只需运行一个
dotnet restore
命令:
dotnet restore .\credentials-test.csproj
如果凭据有效,PowerShell 中的结果将是:
> dotnet restore .\credentials-test.csproj
Determining projects to restore...
Restored C:\Projects\nuget-restore-2\credentials-test.csproj (in 340 ms).
> $LastExitCode
0
如果凭据无效或任何其他故障,结果将是:
> dotnet restore .\credentials-test.csproj
Determining projects to restore...
<SOME ERROR MESSAGE>
> $LastExitCode
1 <-- Or some different non-zero exit code
看起来不是很好。但有效。
只是为了好玩,我花了一些时间实现一个 .NET CLI 工具来为您提供一个 CLI 命令。然而,它比上面描述的想法更糟糕。
你可以在这里查看: https ://youtu.be/SanQAVAZM2o
推荐阅读
- xamarin.forms - 当前的 .NET/Xamarin 是否存在 GetTextExtentPoint 等效性
- c# - ComboBox 中的 WPF MVVM 绑定,两个外键都引用同一个表
- excel - VBA删除最后粘贴范围下方的单元格
- javascript - 如何检查对象数组中是否存在唯一索引
- android - Android Studio 拒绝在除 Android R 之外满足所需 API 级别的设备上运行应用程序
- c++ - 快速排序算法:线程 1 EXC 错误访问(代码=2)
- javascript - 如何通过动态输入更改二维数组的索引
- java - 如文档中所提到的,如何在 java gRPC 中交换传输?
- python - django.db.utils.ProgrammingError:无法将类型 uuid 转换为整数
- linker - 编译器中链接概念的混淆