Jenkins 管道“cd”命令不起作用,“cd”与“dir”?

GMs*_*soF 3 groovy jenkins jenkins-pipeline

我遇到了cd无法在 Window 节点中工作的问题:

node("Window-node") {                       

    stage('unstash'){
        echo 'unstash..'

        deleteDir()                             

        unstash name: uat_stash
        unstash name: prd_stash

        bat "cd ${path}"
        bat "mkdir ${params.tag_name}"          

    }
}
Run Code Online (Sandbox Code Playgroud)

问题发生在bat "cd ${path}",它并没有真正转到特定路径,因此mkdir失败。

path是 jenkins 工作区之外的某个地方,当我在下面使用时,它工作正常:

dir("${path}") {
    bat "mkdir ${params.tag_name}"
}
Run Code Online (Sandbox Code Playgroud)

我不太确定为什么,但我不喜欢使用,dir因为它会创建一个临时文件夹xxx@tmp,但在 Jenkins 工作完成后永远不会清理。

有谁知道为什么cd失败?或者,我可以在dir不创建 Jenkins 临时文件夹的情况下使用吗?

Szy*_*iak 7

第一个命令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()
    }
}
Run Code Online (Sandbox Code Playgroud)