首页 > 解决方案 > Jenkinsfile 进行存储/取消存储的原因?

问题描述

在我的项目的 Jenkinsfile 中,我经常遇到像stash "src"unstash "src"

stash unstash从事Jenkins Pipeline 工作的主要原因是什么?

标签: jenkinsjenkins-pipeline

解决方案


管道允许您为要执行的每个阶段指定一个代理。例如,当您想在 Jenkins Windows 从站和 Jenkins Linux 从站上运行测试时。在一个管道中为不同阶段使用不同从站时的问题是,您的工作区的内容没有提供给新的从站。

因此,您可以git clone在标有“Linux”的从属设备上执行操作,当需要在 Windows 从属设备上执行下一阶段时,Windows 从属设备需要从git clone当前位于 Linux 从属设备上的工作区(来自 )获取数据。

在这里你可以使用 stash/unstash。您可以从 Linux 从站存储您的内容(这会将您存储的文件保存在您的主站上)并在 Windows 从站上取消存储(= 在该从站的工作区中提取数据并将其从主站删除)。在您的示例中,您将文件保存在src您的主服务器上,以便您可以在稍后阶段再次将它们加载到不同的从服务器上。

Stash 和 unstash 应该用于小文件,所以上面的例子不是一个很好的例子(或者你的 repo 应该很小)。Stash 是为存储一些小文件/资源​​而创建的,而不是用于存储整个存储库(将非常慢)。然后,您需要查看在多个从属之间共享工作空间的系统。

如果您为整个管道定义“全局”代理并在同一个从属设备上运行整个管道,则不需要使用 stash,因为不需要发送/共享工作区的内容。但在这种情况下,您将失去管道的一些灵活性,例如在不同的从站上运行并行阶段。


推荐阅读