一尘不染

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

jenkins

我有一个带有.groovy脚本的共享库,可以在jenkinsfile中这样调用:

MySharedLibFunction{ .. some args}

我要执行的共享库中也有一个.ps1文件。但是,如果powershell pwd当我从jenkinsfile调用共享库函数时从共享库函数中执行该操作,则当前工作目录就是jenkinsfile所在管道的jenkins工作目录(通常是您想要的)。

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


阅读 316

收藏
2020-07-25

共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共享库中的文件。

2020-07-25