【问题标题】:Azure Devops Script won't execute 2 yarn commandsAzure Devops 脚本不会执行 2 个 yarn 命令
【发布时间】:2020-11-13 10:13:19
【问题描述】:

Azure devops 构建管道。

我们看到了一个奇怪的问题,即 script 块中的任何 yarn 命令都会在 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 任务似乎在第一个 yarn 任务之后就停止了。

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

【问题讨论】:

    标签: azure-devops yarnpkg


    【解决方案1】:

    问题是yarn 不是可执行文件,它是一个批处理文件。

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

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

    因此,在您的情况下,yarn ... 应更改为 call yarn ...

    【讨论】:

    • 谢谢!这太令人困惑了,因为一个简单的 yarn install 确实有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 2014-08-24
    相关资源
    最近更新 更多