在 Azure Devops Pipeline 中发布工件:获取路径拒绝错误的权限

问题描述 投票:0回答:1

这是我的 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,字符串路径,布尔isDirectory,Func

2 errorRewriter) at Interop.CheckIo(Error error, String path, Boolean isDirectory, Func
2 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) 在 /mnt/vss/_work/1/s/src/Agent.Worker/Build/FileContainerServer.cs 中的 Microsoft.VisualStudio.Services.Agent.Worker.Build.FileContainerServer.UploadAsync(IAsyncCommandContext context, Int32 uploaderId, CancellationToken token) 处: 251号线

我尝试寻找如何授予我的管道权限,我也在使用 Pipeline.workspace 位置来发布我的工件,但我也遇到了同样的错误。 我不知道如何授予我的管道许可。

我对 Azure DevOps 平台还比较陌生。

azure azure-devops azure-pipelines cicd azure-pipelines-yaml
1个回答
0
投票

您的问题是您正在使用

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'
© www.soinside.com 2019 - 2024. All rights reserved.