2016-11-15 87 views
2

詹金斯管道使用藏匿我有詹金斯管道看起来像这样在没有节点

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

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

的建立app-buildcontainer-build从我们Kubernetes系统获得新的节点。

With 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

+0

隐藏将使用上下文隐藏所以如果你不在一个节点上或在不同的节点上,那么源代码就建立了,你可能不会隐藏你想要的东西,詹金斯可以有效地处理执行者。是空闲的,它可以在一个执行器上运行多个 – Rik

回答

0

使用build你正在构建一个外部工作。 但是,您不能使用'藏匿'将作业从一个作业复制到另一个作业。

您可能需要在'app-build'中存档工件并使用aritfact副本插件复制它们,或者您必须将内容从'app-build'移动到管道本身。这样做时,您将拥有存储所需的节点上下文。

btw .: Unstash需要一个节点上下文以及它想要将文件复制到某个地方。

1

您可以使用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 /数据从一个作业复制到另一个作业。管道插件中的此功能要比Artifact更好,因为它仅在本地保存数据。该构件在构建后被删除(有助于数据管理)。

不可能在没有节点的情况下使用存储。 (

+0

你是什么意思?'不可能使用没有节点的存储器。''?你能详细说明吗?我运行它,可能它与此有关:https ://stackoverflow.com/questions/43942073/unstash-is-not-putting-anything-in-the-next-step-of-jenkins-pipeline – aholbreich