github-actions - 我应该使用 MarketPlace 操作而不是普通的 bash `cp` 命令来复制文件吗?

标签 github-actions

我注意到 GitHub 市场中有许多操作具有相同的功能。这是一个例子: https://github.com/marketplace/actions/copy-file

使用 GitHub 市场操作而不是普通的 bash 命令有什么好处吗?我们是否有推荐的实践指南来帮助我决定是使用 MarketPlace 操作还是使用普通 bash 或命令行

最佳答案

这些行为在我看来似乎没有任何实际值(value)......

除此之外,这些在 docker 中运行,不需要在主机上使用 cpwgetcurl,并且他们确保使用一致版本的工具。如果幸运的话,这些操作在 Windows、Linux 和 Mac 上也能以相同的方式一致运行,而您的 bash 脚本可能无法在 Windows 上运行。但操作作者必须确保这一点,这不是默认的。

使用市场上这些操作的一个原因可能是它们可以作为后续步骤运行,而 run: script/bash/pwsh 步骤则不能。

它们并不更稳定或更安全,除非您将操作固定在提交哈希上或 fork 它,否则操作的所有者可以随时更改操作的行为。所以,你信任原作者。

许多操作提供了便利的功能,例如更好的日志记录或输出变量或安全传递凭据的能力,但这些任务似乎更多是作者构建操作的练习,它们并没有真正提供服务。伟大的目标。

每个操作附带的文档没有提供使用这些操作的明确原因,这些操作不遵循首选版本控制方案...我不会使用这些。


那么,您什么时候会使用市场中的操作......?在一般操作中,例如某些 cli 提供特定目的,并且操作应包含其运行所需的所有内容。

一个操作可以包含一组复杂的步骤,确保正确处理参数,issue special logging commands to make the output more human-readable or update the environment for tasks running further down in the workflow .

在现有 cli 之上添加此额外功能的操作可以更轻松地将数据从一个操作传递到另一个操作,甚至从一个作业传递到另一个作业。

操作也更容易跨存储库重用,因此,如果您在多个存储库中使用相同的脚本,您可以将它们包装在一个操作中,并轻松地从该位置引用它们,而不是在每个存储库中重复脚本操作工作流程或将脚本添加到每个存储库。

GitHub 几乎没有提供关于何时使用操作或作者何时应将操作发布到市场的指导。基本上任何人都可以publish anything to the marketplace that fulfills the minimum metadata requirements for the marketplace .

GitHub does provide guidance on versioning for authors, good actions should create tags that a user can pin to 。作者应该练习语义版本控制,以防止意外破坏用户。在他们的文档中指定诸如 mainmaster 之类的分支的操作​​在我看来是可疑的,我不会使用它们,它们的实现可能随时在您的控制下发生变化。

作为任何操作的使用者,您应该了解使用任何操作的安全影响。除此之外,作者在其帐户上启用了 2FA,GitHub 对不属于他们自己的任何操作几乎不进行任何验证。理论上,任何作者都可以用勒索软件或比特币矿工替换他们的实现。因此,对于您尚未与其作者建立信任关系的操作,建议将该操作 fork 到您自己的帐户或组织,并在运行程序上运行它们之前检查内容,特别是如果这是具有访问权限的私有(private)运行程序到 protected 环境。 My colleague Rob Bos has researched this topic deeply and has spoken about this topic frequently on conferences, podcasts and live streams .

关于github-actions - 我应该使用 MarketPlace 操作而不是普通的 bash `cp` 命令来复制文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65045104/

相关文章:

devops - 如何使用 Github Actions 运行特定作业

从 github 操作部署 Azure 函数会导致错误 : connect ECONNREFUSED 127. 0.0.1:443

docker - GitHub 操作 : build outside vs inside container?

bash - 如何正常地在 git action 的 sh 中随机运行 for 循环?

github - 如何在推送时在 github 页面中执行多行 curl 命令?

github - 尝试合并分支时执行 Github Action

git - Github Action |基于分支名称的条件

ssh - Github 操作 SSH 命令上的 libcrypto 出现错误

node.js - GitHub action CI check for npm test keep running non stop

github-actions - GitHub 操作 : how to build a pull request as if it were merged?