问题 使用Jenkins管道在节点之间复制构建工件


我正在尝试将现有的Jenkins构建作业移动到单个Jenkins 2管道,并想知道是否可以在构建中将文件从一个节点复制到另一个节点。我的想法是:

Node A (Windows)
  Checkout scm
  Execute ant build
  Archive artifact (or whatever required action)
Node B (Unix)
  Checkout scm
  Copy build artifact from node A --> is this possible ?
  Execute ant build
  Then followed by tests...

我试图使用复制工件步骤,但它似乎没有正常工作,所以我想知道是否有一种方法在管道中间复制文件,或者如果我必须保持当前构建建筑(使用 复制神器插件,但完全独立的构建工作)。


2128
2018-06-07 19:11


起源

欢迎来到stackoverflow。您可以在发布中包含“似乎无法正常工作”的代码...... ;-) - StephenKing
我在用 step([$class: 'ArtifactArchiver', artifacts: 'dist/*.zip']) 在第一个节点上存档工件,和 step([$class: 'CopyArtifact', filter: 'dist/*.zip', fingerprintArtifacts: true, projectName: 'PCT') 但是工件似乎只能在构建结束后才可用 - Gilles QUERRET


答案:


是的,这可以使用 stash/unstash 脚步。

关于这个的教程也可以在 詹金斯博客 (专注于并行执行):

parallel (
    "stream 1" : { 
                     node { 
                           unstash "binary"                           
                           sh "sleep 20s" 
                           sh "echo hstream1"
                       } 
                   },
    "stream 2" : { 
                     node { 
                           unstash "binary"
                           sh "echo hello2"
                           sh "hashtag fail"                                                       
                       } 
                   }
          )

10
2018-06-07 20:26



随意提供额外的答案。 - StephenKing
还在寻找它:)可能这个 stackoverflow.com/a/46567313/3679490 ? - vks
我实际上想知道它是否可以用于大文件。詹金斯文档说它应该用于小于5 MB的文件。你用它来做大文件吗?它会起作用吗? - vks
它肯定也适用于较大的文件。我们使用通常(非)存储一段时间将大约400MB的工件复制到最多8个代理。由于这使得多个并行构建变得困难,因为它使得Jenkins大师非常反应迟钝,我们重构了我们的管道以通过S3复制文件并使Jenkins master不在循环中。但是从一开始(或者如果没有那么多并行版本),我真的建议从简单开始。继续使用(un)stash实现管道。如果它成为一个痛点,上传到一些外部数据存储。 - StephenKing
你可以请分享d s3代码..我是groovy的新手 - vks