一尘不染

正确使用stash \ unstash到其他目录

jenkins

在我的一个阶段中,我需要在构建完成后复制两个文件夹的内容并将其复制到另一个目录。

我实际上是在将自由式作业转换为管道,并且一直在使用工件部署程序插件。通读一遍,似乎隐藏和取消隐藏命令应该可以帮助我实现目标。

有人可以验证这是否是下面的正确方法吗?

stage('Build') {
      steps {
        sh '''
          gulp set-staging-node-env
          gulp prepare-staging-files
          gulp webpack
        '''
        stash includes: '/dist/**/*', name: 'builtSources'
        stash includes: '/config/**/*', name: 'appConfig'
        dir('/some-dir') {
          unstash 'builtSources'
          unstash 'appConfig'
        }
      }
    }

如果我在一个阶段中更改dir,是否意味着此后所有其他阶段都将尝试从该目录执行命令,或者它们是否又回到使用工作区默认位置?

谢谢

编辑

我已经意识到我真正想要做的是将构建的源复制到另一个节点(运行另一个OS)。因此,在我的代码段中,我共享了要切换目录的目录,该目录实际上位于我设置的另一台计算机(节点)上。

我需要dir()node('my-node-name')块包装块吗?我正在努力寻找例子。

谢谢


阅读 642

收藏
2020-07-25

共1个答案

一尘不染

我希望它是这样的:

stash includes: 'dist/**/*', name: 'builtSources'

stash includes: 'config/**/*', name: 'appConfig'

其中dist和config是工作空间路径中的目录,因此它应该是上面的相对路径。

休息似乎还不错,仅提及路径“ / some-dir”应该由jenkins用户(用于运行jenkins守护程序的用户)可写。

是的,当它退出dir块时,它会退回到其随后的工作空间路径(在本例中为默认)。

编辑

因此,当您存储路径时,可以在管道的任何后续步骤中取消隐藏该路径。是的,您可以将dir块放在块下node('<nodename>')

您可以添加如下内容:

stage('Move the Build'){
  node('datahouse'){
    dir('/opt/jenkins_artifacts'){
      unstash 'builtSources'
      unstash 'appConfig'
    }
  }
}
2020-07-25