Это мой сценарий конвейера Yaml
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/DockerImage.tar'
ArtifactName: 'Docker-Image'
publishLocation: 'Container'
Это журналы ошибок
Не удалось загрузить «/home/vsts/work/1/a/DockerImage.tar» из-за «Доступ к пути «/home/vsts/work/1/a/DockerImage.tar» запрещен». System.UnauthorizedAccessException: доступ к пути «/home/vsts/work/1/a/DockerImage.tar» запрещен. ---> System.IO.IOException: разрешение отклонено --- Конец внутренней трассировки стека исключений --- в Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func
2 errorRewriter) at Interop.CheckIo(Error error, String path, Boolean isDirectory, Func2 errorRewriter) в Microsoft.Win32.SafeHandles.SafeFileHandle.Open (строковый путь, флаги OpenFlags, режим Int32) в Microsoft.Win32.SafeHandles.SafeFileHandle.Open (строка FullPath, режим FileMode, доступ FileAccess, общий ресурс FileShare, параметры FileOptions, Int64 preallocationSize) в System.IO.Strategies.OSFileStreamStrategy..ctor (строковый путь, режим FileMode, доступ FileAccess, общий ресурс FileShare, параметры FileOptions, Int64 preallocationSize) в Microsoft.VisualStudio.Services.Agent.Worker.Build.FileContainerServer.UploadAsync(контекст IAsyncCommandContext, Int32 uploaderId, токен CancellationToken) в /mnt/vss/_work/1/s/src/Agent.Worker/Build/FileContainerServer.cs: строка 251
Я пытался найти, как дать разрешение моему конвейеру, я также использовал Местоположение Pipeline.workspace для публикации моих артефактов, но там я также получил ту же ошибку. Я не уверен, как дать разрешение моему конвейеру.
Я относительно новичок в платформе Azure Devops.
Я использую агент, размещенный в Microsoft. Код: - script: | sudo docker save $(AccountId).dkr.ecr.${AWS_REGION}.amazonaws.com/dev:build-v1 -o $(Build.ArtifactStagingDirectory)/DockerImage.tar displayName: Docker Save Command
Привет @SanskarArya! Есть ли у тебя возможность проверить ответ Руи ниже, чтобы не использовать sudo для запуска docker save? Надеюсь, это поможет решить вашу проблему в этой теме. Спасибо.
Да, эта проблема решена, на самом деле это была та же проблема, которую Руи объяснил ниже, поскольку я использовал команду sudo, разрешения в файле были только для пользователя root, и, следовательно, конвейер не смог получить права на чтение и запись. Чтобы команда работала. Спасибо


Ваша проблема в том, что вы используете sudo для сохранения файла, который сохраняет его в другом пользовательском контексте, чем текущий выполняющийся конвейер. Агент конвейера должен иметь достаточные разрешения для агента, чтобы делать все, что вам нужно. Запуск sudo не требуется.
Следующие работы:
trigger: none
pool:
vmImage: ubuntu-latest
steps:
- script: |
docker pull busybox
docker save busybox -o $(Build.ArtifactStagingDirectory)/DockerImage.tar
displayName: Docker Save Command
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/DockerImage.tar'
ArtifactName: 'Docker-Image'
Спасибо за разъяснения, проблема решена. То же самое вы указали при использовании команды sudo.
Используете ли вы агенты сборки, размещенные на сервере Microsoft или самостоятельно? Можете ли вы поделиться кодом, который генерирует файл
.tar?