“运行|”之间的区别并在github操作中多次运行

时间:2019-12-30 10:08:12

标签: github-actions

两者之间有什么区别

steps:
  - name: npm install, build, and test
    run: |
      npm ci
      npm run build --if-present
      npm test

steps:
  - name: npm install, build, and test
  - run: npm ci
  - run: npm run build --if-present
  - run: npm test

在github动作中? 我尝试阅读有关步骤的documentation,但未提及类似内容

1 个答案:

答案 0 :(得分:2)

区别在于,第一个示例以三个命令作为单个脚本执行,第二个示例以三个不同的单行脚本执行(注意:第二个示例无效,因为您使用带有name且没有{ {1}},我将忽略该行。


让我们假设run在运行时不创建任何输出。在第一个示例中,如果其中一个命令失败,则确定哪个命令可能是一个问题-您只有一个步骤被标记为失败。在第二个示例中,您将确切地知道问题出在哪里,因为每个命令都是其自己的步骤。


让我们假设npm需要在特定的子目录中运行。我们需要记住,每个步骤总是从工作空间目录/ repo的根目录开始,因此我们需要输入首先是我们东西的目录。

npm
- run: |
       cd my/directory
       npm ci
       npm run build --if-present
       npm test

OR

- run: npm ci
  working-directory: my/directory
- run: npm run build --if-present
  working-directory: my/directory
- run: npm test
  working-directory: my/directory

让我们假设仅在- run: cd my/directory && npm ci - run: cd my/directory && npm run build --if-present - run: cd my/directory && npm test 事件上运行第二个npm test,但是将工作流配置为运行push

on: [push, pull_request]
- run:   |
         npm ci
         npm run build --if-present
         if [ "${{ github.event_name }}" == "push" ]; then
            npm test
         fi
  shell: bash

操作标签下,当处理- run: npm ci - run: npm run build --if-present - run: npm test if: github.event_name == 'push' 事件时,第二个示例将显示为...

pull_request

...,您只需要快速查看一下即可跳过- Run npm ci - Run npm run build... - Run npm test <-- this one will be grayed out 步骤。在第一个示例中,您必须首先展开步骤并检查日志以发现任何差异。


依此类推,在许多情况下,使用多合一步骤更容易/更好,而在 command-by-command < / em>步骤是必经之路;由您决定哪一个最适合您。

归根结底,这两个示例毕竟做的完全一样。但是,如果在此过程中出现任何问题,选择一种在另一种方法上运行命令的方式(这也会改变它们的显示方式)可以改变准备修复所需的时间。