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脚本步骤中执行批处理文件之前,应该始终预先结束调用
因此,在您的情况下,纱线…
应更改为调用纱线…