Чтение файла из рабочей области Jenkins с помощью системного скрипта groovy

У меня вопрос очень похожий на этот: чтение файла из рабочей области в Jenkins с помощью Groovy script

однако мне нужно прочитать файл из системного скрипта Groovy, поэтому решение использования Text-finder или плагина Groovy PostBuild не будет работать.

Как я могу получить путь к рабочей области из системного скрипта groovy? Я попробовал следующее:

System.getenv('WORKSPACE')
System.getProperty("WORKSPACE")
build.buildVariableResolver.resolve("WORKSPACE")

спасибо!

2 ответов


каждая сборка имеет рабочее место, так что вам нужно сначала найти нужный проект. (Термины "работа" и "проект" используются довольно взаимозаменяемыми в Jenkins - также в API.)

после этого вы можете либо скрестить пальцы и просто позвонить getWorkspace(), который устарел (см. JavaDoc для деталей).

или вы можете найти конкретную сборку (например, последнюю), которая может дать вам рабочее место используется для этой конкретной сборки через the getWorkspace() способ, как он определен в AbstractBuild класса.

пример кода:

Jenkins.instance.getJob('<job-name>').lastBuild.workspace;

Если у вас есть файл под названием "a.txt" в своем рабочее место, вместе со сценарием под названием " sysgvy.groovy", который вы хотите выполнить как системный скрипт groovy. Предположим, ваш " sysgvy.groovy " скрипт должен прочитать файл "a.txt".

проблема этой темы в том, что если ваш сценарий читается "a.txt" непосредственно без предоставления какого-либо пути", sysgvy.groovy "выполняет и бросит сообщение об ошибке" не может найти "a.txt".

я протестировал и обнаружил, что следующее метод работает хорошо.

def build = Thread.currentThread().executable

затем использовать

build.workspace.toString()+"\a.txt"

в качестве полной строки местоположения для замены "a.txt".

также важно работать на главной машине Дженкинса, поместив "a.txt" и " sysgvy.groovy " на рабочее пространство Дженкинса master machine. Выполнение на подчиненной машине не работает.

попробуйте, файл должен быть найден и прочитан в скрипте без каких-либо проблем.

Если есть проблема с переменным потоком, это просто что некоторые модули нужно импортировать. Поэтому добавьте эти строки в начало кода:

import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*