stash / unstash将数据从构建容器传输到其他节点(在jenkins中)

时间:2017-11-18 22:40:06

标签: docker jenkins continuous-integration jenkins-pipeline devops

在我的CI基础设施中,我有一个jenkins master作为容器和2个奴隶(vms)运行。 我尝试在节点上的docker容器内运行构建,因此在构建过程中,我将目标文件夹藏起来,以便稍后在其他节点上使用它。 在作业的日志中,我可以看到该文件夹​​成功存储。 当构建完成后,容器会自动销毁,然后在下一步中,我会解压缩该文件夹,以便在单独的节点中实现另一个阶段,但不会发生这种情况。似乎unstash没有任何东西。

PLZ如何将我的目标从容器转移到另一个节点甚至是主机???

这是我的管道代码:



node('docker') {
  stage('Checkout Code') {
      checkout scm
          }
  stage('Build') {
    withMaven( jdk: 'jdk_8', maven: 'maven 3') {
        mvn 'clean install'
        stash name: 'war', includes: 'x.war'
    }
  }

node('master') {
  stage('test') {
    withMaven( jdk: 'jdk_8', maven: 'maven 3') {
      unstash :	'war'
      sh 'mvn clean test'
    }
  }
 }
}




1 个答案:

答案 0 :(得分:2)

我怀疑战争实际上是被搁置的,因为生成的战争不应该在你执行mvn clean install的同一目录中。

我预计战争将成为目标。您可能希望将includes: 'x.war'更改为includes: 'target/x.war'。或者,转到安装了war的maven资源库并从那里存储文件:

withMaven( jdk: 'jdk_8', maven: 'maven 3') {
  mvn 'clean install'
  dir('<path to war>'){
      stash name: 'war', includes: 'x.war'
  }
}