Как получить доступ к файлам в общей библиотеке?

У меня есть общая библиотека со скриптом.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"
Другие вопросы по тегам