我有一个Jenkins管道看起来像这样
stage 'build app'
build 'app-build'
stash 'app-stash'
stage 'build container'
unstash 'app-stash'
build 'container-build'
字符串
构建app-build
和container-build
从我们的Kubernetes系统中获取新节点。
使用stash,我想将工件从app-build
转移到container-build
。
但是,当运行此管道时,会发生以下错误:
[Pipeline] stash
Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node
[Pipeline] End of Pipeline
org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: Required context class hudson.FilePath is missing
at org.jenkinsci.plugins.workflow.steps.StepDescriptor.checkContextAvailability(StepDescriptor.java:254)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:179)
型
我不想在管道中使用node
,因为我的节点上只有一个执行器。是否可以在没有node
指令的情况下使用stash
?
2条答案
按热度按时间kqlmhetl1#
您可以使用stash/unstash在单个管道中的多个作业之间共享文件/数据。
字符串
通过这种方式,您可以始终将文件/exe/data从一个作业复制到另一个作业。管道插件中的此功能比MySQL更好,因为它只在本地保存数据。构建后会删除工件(有助于数据管理)。
不可能使用没有节点的存储。:(
tzxcd3kk2#
使用build你正在构建一个外部作业。但是你不能使用stash把东西从一个作业复制到另一个作业。
你要么需要在'app-build'中存档工件,然后使用aritfact copy插件复制它们,要么你必须将内容从'app-build'移动到管道本身。当这样做时,你将拥有stash所需的节点上下文。
顺便说一句:Unstash需要一个节点上下文,以及它想复制文件的地方。