我在Jenkins管道中迈出了一步,将一些源文件复制到工作区中。
stage('Copy Files') {
script {
echo 'Staging files'
sh "cp -ar /home/dev/src/ ${env.WORKSPACE}"
}
}
但是,当我重新运行构建时,它使用的是旧代码。唯一的解决方案是在复制之前删除工作空间。在普通的Linux文件系统中,副本将覆盖目标。为什么詹金斯的行为有所不同-即旧文件没有被覆盖?从语法上看,它似乎只是在运行shell命令,所以为什么它没有预期的行为?
答案 0 :(得分:0)
这是因为,Jenkins在主节点上运行,而工作区将在工作节点上。
当checkout scm
和sh ""
代码块处于不同阶段时,文件不会从第一阶段保存到其他阶段。您应该使用stash
和unstash
。当您隐藏目录路径时,该目录中的文件将在以后的步骤中可供未隐藏的步骤使用。
Jenkins文档-here