Подключение к каналу артефактов Azure из образа докера, запущенного в агенте сборки

Мой файл azure-pipelines.yml

  jobs:
  - job: linux_bionic
    displayName: 'Linux (Bionic)'
    pool:
      vmImage: 'Ubuntu 16.04'
    steps:
    - template: ci/docker.yml
      parameters:
        imageName: 'microsoft/dotnet:2.1-sdk-bionic'
        environmentVariables: |
          BUILD_CONFIG=Release

Мой ci/docker.yml

steps:
- bash: chmod 755 ./ci/*.sh
  displayName: 'Ensure build script permissions'

- task: docker@0
  displayName: Build
  inputs:
    action: 'Run an image'
    imageName: ${{ parameters.imageName }}
    volumes: |
      $(Build.SourcesDirectory):/src
      $(Build.BinariesDirectory):/build
    envVars: ${{ parameters.environmentVariables }}
    workDir: '/src'
    containerCommand: '/src/ci/build.sh'
    detached: false

в моем build.sh у меня есть dotnet build команда witch должна восстанавливать пакеты из nuget.org, а также из моей личной ленты артефактов Azure

<add key="MyFeed" 
value="https://pkgs.dev.azure.com/MyOrg/_packaging/MyFeed/nuget/v3/index.json" />

Это часть лазурных трубопроводов

Microsoft (R) Build Engine version 15.8.166+gd4e8d81a88 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restoring packages for /src/src/MyProj/MyProj.csproj...
/usr/share/dotnet/sdk/2.1.402/NuGet.targets(114,5): error : Unable to load the service index for source https://pkgs.dev.azure.com/MyOrg/_packaging/MyFeed/nuget/v3/index.json. [/src/MyProj.sln]
/usr/share/dotnet/sdk/2.1.402/NuGet.targets(114,5): error :   Response status code does not indicate success: 401 (Unauthorized). [/src/MyProj.sln]

Build FAILED.

Я думаю, что можно добавить ключ api канала в nuget.config, он есть в моем глобальном nuget.config, но я не хочу проверять это в контроле исходного кода.

Есть ли способ сделать канал доступным из образа докера, так же, как он доступен из агента сборки?

1 ответ

Вы можете использовать провайдер учетных данных артефактов Azure в своем контейнере вместе с VSS_NUGET_EXTERNAL_FEED_ENDPOINTS Переменная окружения для передачи в токене доступа сборки.

Вы можете использовать учетные данные конечной точки. Проверка подлинности доступа с помощью токенов личного доступа: https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env


RUN apt-get update && apt-get install -y locales
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && dpkg-reconfigure --frontend=noninteractive locales && update-locale LANG=en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL=en_US.UTF-8

RUN wget -qO- https://raw.githubusercontent.com/Microsoft/artifacts-credprovider/master/helpers/installcredprovider.sh | bash

ENV NUGET_CREDENTIALPROVIDER_SESSIONTOKENCACHE_ENABLED true
ENV VSS_NUGET_EXTERNAL_FEED_ENDPOINTS {\"endpointCredentials\": [{\"endpoint\":\"YOUR_FEED_URL/nuget/v3/index.json\", \"username\":\"YOUR_USER\", \"password\":\"YOUR_PAT\"}]}

WORKDIR /myapp

#Copy everything else and build
COPY . .
RUN dotnet restore -s YOUR_FEED_URL/nuget/v3/index.json -nowarn:msb3202,nu1503
Другие вопросы по тегам