为什么Jenkins Shell文件复制无法按预期工作(不覆盖现有文件)

时间:2018-09-30 20:00:53

标签: jenkins jenkins-pipeline

我在Jenkins管道中迈出了一步,将一些源文件复制到工作区中。

stage('Copy Files') {
  script {
    echo 'Staging files'
    sh "cp -ar /home/dev/src/ ${env.WORKSPACE}"
  }
}

但是,当我重新运行构建时,它使用的是旧代码。唯一的解决方案是在复制之前删除工作空间。在普通的Linux文件系统中,副本将覆盖目标。为什么詹金斯的行为有所不同-即旧文件没有被覆盖?从语法上看,它似乎只是在运行shell命令,所以为什么它没有预期的行为?

1 个答案:

答案 0 :(得分:0)

这是因为,Jenkins在主节点上运行,而工作区将在工作节点上。

checkout scmsh ""代码块处于不同阶段时,文件不会从第一阶段保存到其他阶段。您应该使用stashunstash。当您隐藏目录路径时,该目录中的文件将在以后的步骤中可供未隐藏的步骤使用。

Jenkins文档-here