我有一个如下所示的 yaml Azure DevOps 管道,它正在尝试使用来自另一个组织的 nuget 提要。
如您所见,我正在使用 nugetauthenticate@1 任务使用目标组织中的用户创建的服务连接来创建有效凭据。
我有一个由管道调用的 docker 文件,在其中我通过它们的 sh 脚本安装工件凭证提供程序。
我正在 dockerfile 中设置 JSON 环境变量,并将有效的 PAT 传递到 docker 任务中:
arguments: '--build-arg FEED_ACCESSTOKEN=$(VSS_NUGET_ACCESSTOKEN)'
nb 我已尝试使用 cred 提供程序变量 $(VSS_NUGET_ACCESSTOKEN) 并使用包含有效 PAT 的我自己的管道变量。
当我在 docker 步骤中调用 dotnet restore 时,该步骤出现以下错误:
error NU1301: Unable to load the service index for source https://pkgs.dev.azure.com/{org}/_packaging/{feed}/nuget/v3/index.json
我已经打开了详细日志记录,并且凭据提供程序正在使用提供的配置,但我没有收到 Auth (401) 问题,只是在访问 nuget 索引页面 feed 时出现错误,所以我认为它甚至没有机会进行身份验证。
如有任何建议,我将不胜感激。
管道:
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
NUGET.PLUGIN.HANDSHAKE.TIMEOUT.IN.SECONDS: 20
NUGET.PLUGIN.REQUEST.TIMEOUT.IN.SECONDS: 20
steps:
- task: NuGetAuthenticate@1
inputs:
nuGetServiceConnections: 'nuget-feed'
- task: NodeTool@0
inputs:
versionSpec: '18.17.1'
- task: DotNetCoreCLI@2
inputs:
command: 'build'
arguments: 'xxx/xxx.sln'
- task: Docker@2
inputs:
command: 'build'
Dockerfile: 'xxx/xxx/Dockerfile'
buildContext: 'xxx'
arguments: '--build-arg FEED_ACCESSTOKEN=$(VSS_NUGET_ACCESSTOKEN)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Docker 文件:
FROM mcr.microsoft.com/dotnet/aspnet:6.0.14-bullseye-slim-amd64 AS base
ARG FEED_ACCESSTOKEN
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0.427-1-bullseye-slim-amd64 AS build
ENV NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS=60
ENV NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS=60
RUN curl -L https://raw.githubusercontent.com/Microsoft/artifacts-credprovider/master/helpers/installcredprovider.sh | sh
WORKDIR /src
COPY ["xxx/xxx.csproj", "xxx/"]
COPY ["xxx/nuget.config", "xxx/"]
ENV VSS_NUGET_EXTERNAL_FEED_ENDPOINTS="{\"endpointCredentials\": [{\"endpoint\":\"https://pkgs.dev.azure.com/{org}/_packaging/{feed}/nuget/v3/index.json\", \"username\":\"docker\", \"password\":\"${FEED_ACCESSTOKEN}\"}]}"
RUN echo $VSS_NUGET_EXTERNAL_FEED_ENDPOINTS
RUN dotnet restore "xxx/xxx.csproj" --verbosity detailed