詹金斯管道“ cd”命令不起作用,“ cd” vs“ dir”?

时间:2019-03-04 08:49:45

标签: jenkins groovy jenkins-pipeline

我遇到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临时文件夹?

2 个答案:

答案 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}" """