github-actions - “运行|”之间的区别 并在 github 操作中多次运行
问题描述
有什么区别
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 行动中?我试图阅读有关步骤的文档,但没有提及类似的内容
解决方案
不同之处在于第一个示例作为具有三个命令的单个脚本执行,第二个示例作为三个不同的单行脚本执行(旁注:第二个示例无效,因为您使用 step with name
without run
,我将忽略该行)。
让我们假设npm
在运行时不会产生任何输出。在第一个示例中,如果其中一个命令失败,那么识别哪个命令可能会出现问题 - 您只有一个步骤被标记为失败。在第二个示例中,您将确切地知道问题出在哪里,因为每个命令都是它自己的步骤。
让我们假设npm
需要在特定子目录中运行一秒钟。我们需要记住,每个步骤总是从工作区目录/repo 的根目录开始,所以我们需要先进入我们的东西所在的目录。
- run: |
cd my/directory
npm ci
npm run build --if-present
npm test
- 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'
在Actions选项卡下,处理pull_request
事件时,第二个示例将显示为...
- Run npm ci
- Run npm run build...
- Run npm test <-- this one will be grayed out
...您只需快速浏览一下即可看到该npm test
步骤被跳过。在第一个示例中,您必须先扩展步骤并检查日志以发现任何差异。
依此类推,有几十个场景可以更容易/更好地使用多合一步骤,还有很多场景需要逐个命令的步骤;由您决定哪一个最适合您。
归根结底,这两个示例都做了完全相同的事情,毕竟。但是,如果在此过程中出现任何问题,选择一种方式来运行命令而不是另一种方式(这也会改变它们的显示方式)可能会影响准备修复需要多长时间。
推荐阅读
- javascript - 将 Javascript 数组转换为 MySQL 数组
- python - Django使用`mysql.connector.django`作为数据库ENGINE后,如何打印执行的SQL语句
- laravel - 错误:请求失败,状态码为 500 Laravel/Vue
- php - PHP 脚本在没有任何错误的情况下停止
- .net - 在 Azure Functions 中将字节数组转换为图像
- postgresql - Postgres 关键字 DEFAULT 未被识别为 EF 核心中的列值?
- azure-devops - 我应该在构建或发布管道的哪里运行测试?
- json - 发布 Jira 适用于 Python,但不适用于 PowerShell
- java - 文件 listfiles() 返回 Null
- javascript - 将 Uint16 拆分为 Uint8