Команда "cd" конвейера Jenkins не работает, "cd" против "dir"? - PullRequest
0 голосов
/ 04 марта 2019

Я сталкиваюсь с проблемой, когда 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 голосов
/ 04 марта 2019

1) Добавить опцию /d, если кросс-драйвер, например, ${path} в D:\, но вы используете C:\

2) Обернуть $ {path} внутри ", если в $ {path}

bat """ cd /d "${path}" """
есть место
0 голосов
/ 04 марта 2019

Первая команда 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()
    }
}
...