Azure 管道 yaml 权限被拒绝

Ale*_*x T 7 yaml azure-devops azure-pipelines

尝试使用 azure 管道进行部署时出现错误。

Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
Run Code Online (Sandbox Code Playgroud)

我认为这是因为 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
Run Code Online (Sandbox Code Playgroud)

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

Mer*_*SFT 8

您正在使用Ubuntu映像,并尝试netlify-cli没有sudo.

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

sudo npm i -g netlify-cli
Run Code Online (Sandbox Code Playgroud)

命令在我的管道上成功

在本文档中,在 *nix(OSX、Linux 等)上升级

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

VSTS相同,您必须sudo在命令中使用才能让您拥有Ubuntu.

在此处输入图片说明


vs2017-win2016如果对构建环境没有任何特殊要求,另一种方法是将映像更改为:

pool:
  vmImage: 'vs2017-win2016'
Run Code Online (Sandbox Code Playgroud)

使用此映像时,您可以安装任何东西,不需要使用sudo.


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

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