Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to load files from resources folder in Shared library without knowing their names (or number)?

As you know, in Shared libraries in Jenkins, it is possible to load a resource (located in resources folder) by doing:

libraryResource("script.sh")

Now my use case is that I want to load number of files inside a folder under resources :

+ resources
 + teamA
  + script1.sh
  + script2.sh

And I want to load all those files before doing anything : I did a method in the shared library:

new File(scriptsFolder).eachFile() { file->

 writeFile([file:"${env.workspace}/${file.getName()}",text:libraryResource("$scriptsFolder/${file.getName()}")])
 sh("chmod +x ${env.workspace}/${file.getName()}")
}

where scriptsFolder= "teamA"

Of cource I'm getting java.io.IOException: Is a directory Because libraryResource must get a file path parameter.

So is, there a way to load all those files without knowing their names or their number?

like image 652
sirineBEJI Avatar asked Jul 04 '18 09:07

sirineBEJI


1 Answers

You can get absolute path of your shared library using Groovy @SourceURI annotation:

// vars/get_resource_dir.groovy
import groovy.transform.SourceURI
import java.nio.file.Path
import java.nio.file.Paths

class ScriptSourceUri {
    @SourceURI
    static URI uri
}

def call() {
    Path scriptLocation = Paths.get(ScriptSourceUri.uri)
    return scriptLocation.getParent().getParent().resolve('resources').toString()
}

Using the path you can invoke your scripts as usual:

sh "${get_resource_dir()}/com/example/test.sh"
like image 142
Alexey Novgorodov Avatar answered Nov 03 '22 01:11

Alexey Novgorodov