Azure 管道 yaml 权限被拒绝

Posted

技术标签:

【中文标题】Azure 管道 yaml 权限被拒绝【英文标题】:Azure pipelines yaml permission denied 【发布时间】:2020-03-23 21:29:39 【问题描述】:

我在尝试使用 azure 管道进行部署时遇到错误。

Error: EACCES: permission denied, access '/usr/local/lib/node_modules'

我认为这是因为 node_modules 文件夹没有在阶段之间共享。但我不知道什么是正确的方法。

这是我的 yaml 文件:

variables:
  - group: netlify

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

stages: 
  - stage: Build
    jobs:
      - job: ARM
        steps:
        - task: NodeTool@0
          inputs:
            versionSpec: '10.x'
          displayName: 'Install Node.js'

        - script: |
            npm install
            npm run unit
          displayName: 'Setup and test'

        - script: npm run build
        - publish: $(System.DefaultWorkingDirectory)
          artifact: dist
  - stage: Deploy
    dependsOn: Build
    condition: succeeded()
    jobs:
      - job: APP
        steps:
        - bash: |
           npm i -g netlify-cli
           netlify deploy --site $(NETLIFY_SITE_ID) --auth $(NETLIFY_AUTH_TOKEN) --prod

运行 npm install 后,包 node_modules 应该出现在目录中,但似乎没有正确共享。

【问题讨论】:

【参考方案1】:

您正在使用Ubuntu 映像,并尝试在没有sudoLinux 中全局安装netlify-cli

如果Ubuntu是你必须使用的必要系统,你最好在这个命令前加上sudo

sudo npm i -g netlify-cli

Command succeed on my pipeline

在此文档中,Upgrading on *nix (OSX, Linux, etc.):

您可能需要在这些命令前加上 sudo,尤其是在 Linux 上, 或 OS X,如果您使用默认安装程序安装 Node。

同样在VSTS,你必须在命令中使用sudo,让你拥有Ubuntu的无密码sudo权限。


如果你对构建环境没有特殊要求,另一种方法是把镜像改成vs2017-win2016

pool:
  vmImage: 'vs2017-win2016'

当使用这个镜像时,你可以安装任何东西,不需要使用sudo


其实我们已经在所有托管镜像中预装了很多基础工具,包括node.js

在我们的github description 中,我们列出了为所有图像预安装的所有工具。您可以查看以了解有关 VSTS 的更多信息。

【讨论】:

@AlexT,您可以但不推荐。把它们放在一起可以让你避免那些路径错误。但像往常一样,部署应该在一个单独的阶段。受限于评论,可以参考本票中的YAML:***.com/questions/57617482/… @AlexT,该票中报告的问题已由我们修复。因此,您可以直接在他的问题中显示该操作的 YAML。 @AlexT,只是想确认一下我可以在这个谜题上为您提供什么帮助吗?如果您需要,请随时告诉我。 @AlexT,您使用的是 YAML,它在构建管道中结合了构建和发布,其局限性在于所有编译逻辑都遵循构建,尤其是 构建目录。这意味着即使它是一个发布管道,它的工作空间和工作目录仍然是s。对于发布的经典 UI,它是a。这就是为什么它从s 中挑选一些东西的原因。我认为在这里,您最好按照以下文档在netlify deploy 脚本中指定文件位置:docs.netlify.com/cli/get-started/#deploy-directories。我对这个netlify不是很熟悉,希望对您有所帮助。 @AlexT。不,它可以,只是你不能再使用当前的下载格式了。请参阅此docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/… 和docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/…。这两个任务都可以让您更改目标目录。建议你为你所面临的这个难题提出一张新票,这样我和其他社区成员可以一起向你分享我们的建议。你知道,评论有字数限制。

以上是关于Azure 管道 yaml 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Azure 构建管道 yaml 模板参考

Azure DevOps、YAML 发布管道? [关闭]

azure devops yaml管道未设置变量

Azure DevOps - 使用参数在 yaml 管道定义中设置路径触发器

在 azure 上部署 React Web 应用程序的权限被拒绝

使用“扩展”的 Azure yaml 管道