Как загрузить файлы из папки ресурсов в общей библиотеке, не зная их имен (или номера)? - PullRequest
0 голосов
/ 04 июля 2018

Как вы знаете, в общих библиотеках в Jenkins можно загрузить ресурс (расположенный в папке ресурсов), выполнив:

libraryResource("script.sh")

Теперь мой вариант использования заключается в том, что я хочу загрузить количество файлов в папке под ресурсами:

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

И я хочу загрузить все эти файлы, прежде чем делать что-либо: Я сделал метод в общей библиотеке:

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

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

где scriptsFolder= "teamA"

Конечно, я получаю java.io.IOException: Is a directory Потому что libraryResource должен получить параметр пути к файлу.

Так есть ли способ загрузить все эти файлы, не зная их имен или номеров?

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Вы можете получить абсолютный путь к вашей общей библиотеке, используя аннотацию Groovy @SourceURI:

// 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()
}

Используя путь, вы можете вызывать ваши скрипты как обычно:

sh "${get_resource_dir()}/com/example/test.sh"
0 голосов
/ 31 октября 2018

Я решил использовать возможности сценариев оболочки. Сервер Дженкинс и подчиненные работают в Linux.

дано: я нахожусь в подкаталоге, а папка ресурсов на одну папку вверх.

String folder = "resources/teamA"
sh(script: "cp -R ../${folder}/. .")

// Verify files
def status = steps.sh(script: "diff ../${folder}/ .", returnStatus : true)

if(status.equals(0)) {
    // do that thing you do
} else {
    error "FAILURE not all files required exist"
}
...