Azure Devops 脚本不会执行 2 个纱线命令

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

Azure DevOps 构建管道。

我们看到一个奇怪的问题,

yarn
块中的任何
script
命令都会在yarn命令之后终止该脚本块。

  steps:
    - script: |
        echo "*********1*********"
        cd D:\my\src
        echo "*********2*********"
        yarn add --dev jest-junit
        echo "*********3*********"
        yarn test:unit --silent --ci --reporters=jest-junit
        echo "*********4*********"

将产生以下输出:

"*********1*********"
"*********2*********"
yarn add v1.16.0
[1/4] Resolving packages...
...
Done in 107.91s.
Finishing: CmdLine

所以我们永远无法到达

echo "*********3*********"

即使是像这样简单的事情:

  - script: |
      echo "Start"
      yarn -v
      echo "We never get here"

似乎 Cmdline 任务在第一个纱线任务之后就停止了。

这是在本地 Windows Server 2016 上运行的。如果我们在 ubuntu 虚拟机上运行相同的脚本,它可以正常工作。

azure-devops yarnpkg
2个回答
5
投票

问题是

yarn
不是可执行文件,它是批处理文件。

根据文档,调用批处理文件时应该使用

call

Azure Pipelines 将内联脚本内容放入临时批处理文件 (.cmd) 中以便运行它。当您想在 Windows CMD 中从另一个批处理文件运行一个批处理文件时,必须使用 call 命令,否则第一个批处理文件将终止。这将导致 Azure Pipelines 运行预期的脚本,直到第一个批处理文件,然后运行该批处理文件,然后结束该步骤。第一个脚本中的其他行将不会运行。在 Azure Pipelines 脚本步骤中执行批处理文件之前,您应该始终预先调用。

所以在你的情况下,

yarn ...
应该改为
call yarn ...


0
投票

我刚刚遇到了同样的问题。在我的 Azure Pipeline yml 中,我有以下内容:

      - task: CmdLine@2
        displayName: 'Install and Build'
        inputs:
          script: |
            yarn install
            yarn build

使用 Linux 代理运行我的项目时效果很好。但在 Windows 代理上运行相同的操作,它只会执行纱线安装并跳过纱线构建。

© www.soinside.com 2019 - 2024. All rights reserved.