我遇到cd
在窗口节点中不起作用的问题:
node("Window-node") {
stage('unstash'){
echo 'unstash..'
deleteDir()
unstash name: uat_stash
unstash name: prd_stash
bat "cd ${path}"
bat "mkdir ${params.tag_name}"
}
}
问题发生在bat "cd ${path}"
中,它并没有真正到达特定的路径,因此mkdir
失败了。
path
在jenkins工作空间之外的某处,当我在下面使用时,它工作正常:
dir("${path}") {
bat "mkdir ${params.tag_name}"
}
我不太清楚为什么,但是我不喜欢使用dir
,因为它会创建一个临时文件夹xxx@tmp
,但是在詹金斯(Jenkins)工作完成后再也不会清理。
谁知道cd
为什么失败?或者,我是否可以使用dir
而无需创建Jenkins临时文件夹?
答案 0 :(得分:2)
第一个命令bat "cd ${path}"
完成您的期望。但是,第二个bat
步骤不会在上一步的上下文中运行,因此它是从工作程序节点根工作区目录开始的。
您可以通过用单个多行脚本替换两个bat
步骤来解决此问题,例如
node("Window-node") {
stage('unstash'){
echo 'unstash..'
deleteDir()
unstash name: uat_stash
unstash name: prd_stash
bat """
cd ${path}
mkdir ${params.tag_name}
""".stripIndent().trim()
}
}
答案 1 :(得分:1)
1)添加选项/d
,以防交叉驱动,例如${path}
在D:\
中,但是您当前在C:\
2)将$ {path}包裹在"
内,以防$ {path}中有空格
bat """ cd /d "${path}" """