Я использую очень удобный Remote Jenkins Provider плагин для получения Jenkinsfile из репозитория, отличного от исходного кода. Сценарий Jenkinsfile и некоторые вспомогательные файлы загружаются в каталог @scripts
в рабочей области задания. Это работает, как ожидалось.
Проблема, с которой я столкнулся, заключается в том, что конвейер работает на нескольких узлах, а каталог @script
доступен только в главном узле (тот, который получил его из репозитория). Я пытаюсь использовать stash/unstash
для совместного использования этого каталога между узлами:
node('master'){
stage('save script'){
sh "ls -l ${env.WORKSPACE}@script/"
stash name: 'scripts', includes: "${env.WORKSPACE}@script/**"
}
}
pipeline {
agent { label 'worker' }
stages {
stage('build') {
steps {
unstash name: 'scripts'
sh "${env.WORKSPACE}@script/helper.sh"
}
}
}
}
Результат шага ls
показывает, что есть как Jenkinsfile, так и вспомогательный скрипт:
-rw-r--r-- 1 jenkins jenkins 166 Jul 10 16:53 Jenkinsfile
-rwxr-xr-x 1 jenkins jenkins 29 Jul 10 15:18 helper.sh
Однако сборка завершается ошибкой на шаге stash
с этим сообщением: ERROR: No files included in stash ‘scripts’
Обратите внимание, что если я запустил весь конвейер на одном и том же узле master
без stash/unstash
, он работает.
Как я могу совместно использовать каталог @script
между узлами?