如何访问共享库中的文件?

时间:2017-09-30 02:08:36

标签: jenkins jenkins-plugins jenkins-pipeline

我有一个带有.groovy脚本的共享库,我在这样的jenkins文件中调用:

MySharedLibFunction{ .. some args}

我的共享库中还有一个.ps1文件,我想执行。但是当我从我的共享库函数中执行powershell pwd时,我从jenkinsfile调用该函数时,当前工作目录是我的管道的jenkins工作目录,其中jenkinsfile位于(通常是你想要的)。 / p>

有没有办法访问共享库中的文件?我想做powershell -File ps1FileInMySharedLibVarsFolder.ps1

2 个答案:

答案 0 :(得分:9)

您只能使用内置步骤libraryResource获取内容。这就是为什么在my shared library中使用以下函数将其复制到临时目录并返回文件的路径:

/**
  * 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内的文件。

答案 1 :(得分:2)

stephenking的答案较为完整,但在简单情况下,可以执行以下操作:

foreach ($content as $item) {
    echo $item->title;
}