2017-09-30 2 views
2

j'ai une bibliothèque partagée avec un script .groovy que j'appelle dans un jenkinsfile comme ceci:Comment accéder aux fichiers dans une bibliothèque partagée?

MySharedLibFunction{ .. some args} 

J'ai aussi un fichier .ps1 dans ma bibliothèque partagée que je veux exécuter. Mais si je fais powershell pwd dans ma fonction de bibliothèque partagée lorsque j'appelle cette fonction de mon fichier jenkins, le répertoire de travail actuel est le répertoire de travail jenkins de mon pipeline où se trouve jenkinsfile (ce qui est généralement ce que vous voulez).

Existe-t-il un moyen d'accéder aux fichiers dans la bibliothèque partagée? Je veux faire powershell -File ps1FileInMySharedLibVarsFolder.ps1

Répondre

3

Vous ne pouvez obtenir le contenu en utilisant l'étape intégrée libraryResource. C'est pourquoi les fonctions suivantes en my shared library pour la copier dans un répertoire temporaire et retourner le chemin du fichier:

/** 
    * 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 
} 

Comme il retourne le chemin du fichier temporaire, vous pouvez passer cela à une étape attendant un fichier nom:

sh(copyGlobalLibraryScript('test.sh')) 

pour un fichier résidant dans resources/test.sh au sein de votre bibliothèque partagée.

+0

Je finis aussi avec une solution comme celle-ci. Mais cela me semble assez maladroit - je préférerais quelque chose comme une option pour copier automatiquement la bibliothèque (ou du moins son dossier 'resource') dans l'espace de travail ... – Roman