Разрешение на сборку Dotnet в контейнере Docker под управлением Jenkins запрещено - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь создать приложение .NET с помощью Jenkins.Экземпляр Jenkins работает в контейнере Docker.

Мой Jenkinsfile выглядит следующим образом:

pipeline {
  agent {
    docker {
      image 'microsoft/dotnet:2.1-sdk'
      registryUrl 'https://index.docker.io/v1/'
    }
  }
  stages {
    stage('Build') {
      steps {
        sh 'dotnet build MyApplication/Application.csproj -c Release -o /app'
      }
    }
    stage('Test') {
      steps {
        sh 'dotnet test MyApplication/Application.csproj -c Release -r /results'
      }
    }
  }
}

При попытке сборки я вижу следующую ошибку в выводе сборки Jenkins:

System.UnauthorizedAccessException: Access to the path '/.dotnet' is denied. ---> System.IO.IOException: Permission denied
   --- End of inner exception stack trace ---
   at System.IO.FileSystem.CreateDirectory(String fullPath)
   at System.IO.Directory.CreateDirectory(String path)
   at Microsoft.Extensions.EnvironmentAbstractions.DirectoryWrapper.CreateDirectory(String path)
   at Microsoft.DotNet.Configurer.FileSentinel.Create()
   at Microsoft.DotNet.Configurer.DotnetFirstTimeUseConfigurer.Configure()
   at Microsoft.DotNet.Cli.Program.ConfigureDotNetForFirstTimeUse(INuGetCacheSentinel nugetCacheSentinel, IFirstTimeUseNoticeSentinel firstTimeUseNoticeSentinel, IAspNetCertificateSentinel aspNetCertificateSentinel, IFileSentinel toolPathSentinel, Boolean hasSuperUserAccess, DotnetFirstRunConfiguration dotnetFirstRunConfiguration, IEnvironmentProvider environmentProvider)
   at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, ITelemetry telemetryClient)
   at Microsoft.DotNet.Cli.Program.Main(String[] args)

Похоже, чтопапка .dotnet защищена в контейнере Docker.Есть ли способ получить разрешение на чтение / запись для этого или способ изменить его местоположение?Кажется, я не могу найти папку, когда захожу в контейнер.

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 26 июля 2019

Вы можете установить переменную окружения HOME, как предложено @colmulhall, но затем вы установите домашний каталог контейнера докера на /tmp.

Чтобы сделать это "dotnet", задайте переменную средыDOTNET_CLI_HOME:

environment {
    DOTNET_CLI_HOME = "/tmp/DOTNET_CLI_HOME"
}

Или перед вызовом dotnet выполнить:

export DOTNET_CLI_HOME="/tmp/DOTNET_CLI_HOME"
0 голосов
/ 14 декабря 2018

Проблема, по-видимому, связана с попыткой записи данных на верхний уровень контейнера Docker ('/').

Добавление следующего в файл Jenkinsfile гарантирует, что домашний каталог установлен и что.Папка dotnet может быть создана в месте с правильными разрешениями.

environment {
   HOME = '/tmp'
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...