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

Mar*_*arc 3 azure-devops yarnpkg

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*********"
Run Code Online (Sandbox Code Playgroud)

将产生以下输出:

"*********1*********"
"*********2*********"
yarn add v1.16.0
[1/4] Resolving packages...
...
Done in 107.91s.
Finishing: CmdLine
Run Code Online (Sandbox Code Playgroud)

所以我们永远无法到达echo "*********3*********"

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

  - script: |
      echo "Start"
      yarn -v
      echo "We never get here"
Run Code Online (Sandbox Code Playgroud)

看起来 Cmdline 任务在第一个纱线任务之后就停止了。

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

Oz *_*mon 5

问题是这yarn不是可执行文件,而是批处理文件。

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

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

所以在你的情况下,yarn ...应该改为call yarn ...