在没有节点的Jenkins管道中使用stash

de90aj5v  于 5个月前  发布在  Jenkins
关注(0)|答案(2)|浏览(60)

我有一个Jenkins管道看起来像这样

stage 'build app'
build 'app-build'
stash 'app-stash'

stage 'build container'
unstash 'app-stash'
build 'container-build'

字符串
构建app-buildcontainer-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

kqlmhetl

kqlmhetl1#

您可以使用stash/unstash在单个管道中的多个作业之间共享文件/数据。

node {
    stage ('HostJob')
     {
        build 'HostJob'
        dir('/var/lib/jenkins/jobs/Hostjob/workspace/') {
        sh 'pwd'
        stash includes: '**/build/fiblib-test', name: 'app' 
        }
     }

        stage ('TargetJob') {
            dir("/var/lib/jenkins/jobs/TargetJob/workspace/") {
            unstash 'app'
            build 'Targetjob'
        }
}

字符串
通过这种方式,您可以始终将文件/exe/data从一个作业复制到另一个作业。管道插件中的此功能比MySQL更好,因为它只在本地保存数据。构建后会删除工件(有助于数据管理)。
不可能使用没有节点的存储。:(

tzxcd3kk

tzxcd3kk2#

使用build你正在构建一个外部作业。但是你不能使用stash把东西从一个作业复制到另一个作业。
你要么需要在'app-build'中存档工件,然后使用aritfact copy插件复制它们,要么你必须将内容从'app-build'移动到管道本身。当这样做时,你将拥有stash所需的节点上下文。
顺便说一句:Unstash需要一个节点上下文,以及它想复制文件的地方。

相关问题