Azure devops Azure Devops脚本赢得';t执行2个命令 Azure devops构建管道。

Azure devops Azure Devops脚本赢得';t执行2个命令 Azure devops构建管道。,azure-devops,yarnpkg,Azure Devops,Yarnpkg,我们看到了一个奇怪的问题,脚本块中的任何纱线命令都会在纱线命令之后终止该脚本块 steps: - script: | echo "*********1*********" cd D:\my\src echo "*********2*********" yarn add --dev jest-junit echo "*********3*********&q

我们看到了一个奇怪的问题,
脚本
块中的任何
纱线
命令都会在纱线命令之后终止该脚本块

  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虚拟机上运行相同的脚本,它就可以正常工作。

问题在于
warn
不是一个可执行文件,而是一个批处理文件

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

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

因此,在您的情况下,
纱线…
应更改为
调用纱线…