Как получить доступ к файлам в общей библиотеке?
У меня есть общая библиотека со скриптом.groovy, который я вызываю в jenkinsfile следующим образом:
MySharedLibFunction{ .. some args}
У меня также есть файл.ps1 в моей общей библиотеке, которую я хочу выполнить. Но если я сделаю powershell pwd
из моей функции общей библиотеки, когда я вызываю эту функцию из моего jenkinsfile, текущим рабочим каталогом является рабочий каталог jenkins моего конвейера, где расположен файл jenkinsfile (что обычно и требуется).
Есть ли способ получить доступ к файлам в общей библиотеке? я хочу делать powershell -File ps1FileInMySharedLibVarsFolder.ps1
1 ответ
Вы можете получить только содержимое, используя встроенный шаг libraryResource
, Вот почему в моей общей библиотеке есть следующие функции, чтобы скопировать ее во временный каталог и вернуть путь к файлу:
/**
* Generates a path to a temporary file location, ending with {@code path} parameter.
*
* @param path path suffix
* @return path to file inside a temp directory
*/
@NonCPS
String createTempLocation(String path) {
String tmpDir = pwd tmp: true
return tmpDir + File.separator + new File(path).getName()
}
/**
* Returns the path to a temp location of a script from the global library (resources/ subdirectory)
*
* @param srcPath path within the resources/ subdirectory of this repo
* @param destPath destination path (optional)
* @return path to local file
*/
String copyGlobalLibraryScript(String srcPath, String destPath = null) {
destPath = destPath ?: createTempLocation(srcPath)
writeFile file: destPath, text: libraryResource(srcPath)
echo "copyGlobalLibraryScript: copied ${srcPath} to ${destPath}"
return destPath
}
Так как он возвращает путь к временному файлу, вы можете передать его любому шагу, ожидающему имя файла:
sh(copyGlobalLibraryScript('test.sh'))
для файла, находящегося в resources/test.sh
в вашей общей библиотеке.
Ответ Stephenking более полный, но для простых случаев подойдет следующее:
writeFile file: 'ps1FileInMySharedLibVarsFolder.ps1', text: libraryResource('ps1FileInMySharedLibVarsFolder.ps1')
powershell ".\\ps1FileInMySharedLibVarsFolder.ps1"