正确使用stash\unstash到另一个目录

min*_*rse 17 jenkins jenkins-plugins jenkins-pipeline

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

我实际上是将自由式作业转换为管道,并且一直在使用工件部署器插件.阅读,看起来像stash和unstash命令应该有助于我想要实现的目标.

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

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'
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

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

谢谢

编辑

我已经意识到我真正想要做的是将构建的源复制到不同的节点(运行不同的操作系统).所以在我的代码片段中,我已经共享,在我切换目录的地方,该目录实际上是在我设置的不同机器(节点)上.

我需要dir()node('my-node-name')块包裹块吗?我很难找到例子.

谢谢

rus*_*inc 24

我希望它是这样的:

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

stash includes: 'config/**/*', name: 'appConfig'
Run Code Online (Sandbox Code Playgroud)

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

休息似乎没问题,只是提到路径"/ some-dir"应该是jenkins用户(用户用来运行jenkins守护进程)可写的.

是的,当它退出dir块时,它会回到它当时封闭的工作空间路径(在这种情况下是默认值).

编辑

因此,当您存储路径时,可以在管道中的任何步骤中取消存储.所以是的,你可以把dir块放在一个node('<nodename>')块下面.

你可以添加这样的东西:

stage('Move the Build'){
  node('datahouse'){
    dir('/opt/jenkins_artifacts'){
      unstash 'builtSources'
      unstash 'appConfig'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 如何在相对路径上存储文件?我使用包括:'../../../.gradle/**',例如,我得到"没有文件包含在藏匿处",我知道他们在那里 (2认同)