jenkins - 正确使用 stash\unstash 到不同的目录

标签 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'
        }
      }
    }

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

谢谢

编辑

我已经意识到我真正想要做的是将构建的源复制到不同的节点(运行不同的操作系统)。所以在我分享的片段中,我正在切换目录,该目录实际上位于我设置的另一台机器(节点)上。

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

谢谢

最佳答案

我希望它是这样的:

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'
    }
  }
}

关于jenkins - 正确使用 stash\unstash 到不同的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43050248/

相关文章:

Jenkins 奴隶悬挂/ Jenkins 楔入

json - Jenkins 多分支插件和远程 API

使用参数化触发器插件触发的 Jenkins 构建被触发它的作业阻止

android - calabash-android - 安装 APK 时出错 - 远程只读文件系统

jenkins - 尝试使用共享库并行触发所有作业

docker - 如何将 Jenkins 管道中的 git 凭据输入到 docker 文件中?

jenkins - 如何获取下游项目的上游项目信息 - Jenkins

jenkins - hudson / Jenkins : share parameters between several jobs

jenkins - 如果当前正在运行的作业失败,如何触发作业?

jenkins - 在Jenkins管道并行阶段,如果一个阶段失败,如何及时杀死其他阶段?