web-dev-qa-db-ja.com

共有ライブラリ内のファイルにアクセスするにはどうすればよいですか?

次のようなjenkinsfileで呼び出す.groovyスクリプトを含む共有ライブラリがあります。

MySharedLibFunction{ .. some args}

実行したい共有ライブラリに.ps1ファイルもあります。しかし、私がそうするならpowershell pwd共有ライブラリ関数からjenkinsfileからその関数を呼び出すと、現在の作業ディレクトリは、jenkinsfileが配置されているパイプラインのjenkins作業ディレクトリになります(通常はこれが必要です)。

共有ライブラリ内のファイルにアクセスする方法はありますか?私はやってみたいです powershell -File ps1FileInMySharedLibVarsFolder.ps1

8
red888

組み込みのステップ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にあるファイルの場合。

14
StephenKing