次のようなjenkinsfileで呼び出す.groovyスクリプトを含む共有ライブラリがあります。
MySharedLibFunction{ .. some args}
実行したい共有ライブラリに.ps1ファイルもあります。しかし、私がそうするならpowershell pwd
共有ライブラリ関数からjenkinsfileからその関数を呼び出すと、現在の作業ディレクトリは、jenkinsfileが配置されているパイプラインのjenkins作業ディレクトリになります(通常はこれが必要です)。
共有ライブラリ内のファイルにアクセスする方法はありますか?私はやってみたいです powershell -File ps1FileInMySharedLibVarsFolder.ps1
組み込みのステップ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
にあるファイルの場合。