【问题标题】:How do I use a Nuget package in the Artifacts page in my Docker Build step?如何在 Docker Build 步骤的 Artifacts 页面中使用 Nuget 包?
【发布时间】:2020-11-24 09:28:24
【问题描述】:

在我的 Azure Devops 项目中,在“工件”选项卡下,我有一个包 MyPackage

在我的构建管道中,我有这一步:

  - stage: Build
    displayName: "Build"
    jobs:
    - job: 
      steps:
      - task: Docker@2
        inputs:
          containerRegistry: 'TEST container registry'
          repository: 'mycontainerregistry/backend'
          command: 'buildAndPush'
          buildContext: '$(System.DefaultWorkingDirectory)'
          Dockerfile: '**/Dockerfile'
          tags: |
            $(Build.BuildId)
            latest

正在构建的 Dockerfile 是 Visual Studio 生成的标准文件:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["MyProject.API.csproj", "MyProject.API/"]
RUN dotnet restore "MyProject.API/MyProject.API.csproj"
COPY . .
WORKDIR "/src/MyProject.API"
RUN dotnet build "MyProject.API.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyProject.API.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyProject.API.dll"]

现在,问题出在dotnet restore 命令上。此步骤失败,因为还原命令无法从 docker 构建上下文中找到 MyPackage nuget。运行docker build时如何让dotnet restore找到MyPackage

【问题讨论】:

    标签: azure-devops azure-pipelines azure-pipelines-build-task


    【解决方案1】:

    如果您有私人订阅源,您需要使用 dotnet nuget add source 添加来源

    dotnet  nuget sources add -name "SomeName" -source https://pkgs.dev.azure.com/YourFeed/nuget/v3/index.json -username anything -password $TOKEN
    

    要传递 System.AccessToken 你需要使用ARG

    FROM alpine
    
    ARG TOKEN
    RUN dotnet  nuget sources add -name "SomeName" -source https://pkgs.dev.azure.com/YourFeed/nuget/v3/index.json -username anything -password $TOKEN
    

    然后在 YMAL 中

    - task: Docker@2
      inputs:
        containerRegistry: 'devopsmanual-acr'
        command: 'build'
        Dockerfile: 'stackoverflow/85-docker/DOCKERFILE'
        arguments: '--build-arg TOKEN=$(System.AccessToken)'
    

    请拆分您的 buildAndPush,因为它不允许将参数传递到两个单独的任务中。更多详情请查看question

    还请确保您可以Build Service 在供稿设置中担任贡献者角色。

    【讨论】:

    • 感谢您的帮助。可以肯定的是,如果我使用AccessToken方法,如何生成token?
    • System.AccessToken 是预定义变量,无需生成 - 请检查hereTOKEN 是您的 dockerfile 中的一个参数。
    • 对于任何阅读本文的人,“新”语法是:RUN dotnet nuget add source
    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2021-05-14
    • 2021-04-10
    相关资源
    最近更新 更多