Доступ к управляемым файлам, локальным файлам и удаленным файлам ssh на этапе предварительной сборки Jenkins - PullRequest
0 голосов
/ 06 июня 2018

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

Это не проблема длядоступ к локальным и удаленным файлам на этапах сборки, но мне нужно, чтобы он работал в плагине Active Choice (или чем-то подобном).

Очевидно, функция sh не работает, но некоторые Java-подобные Groovy APIвсе еще доступны (как описано здесь: https://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin)

jenkinsURL=jenkins.model.Jenkins.instance.getRootUrl()

def propFile=vPropFile //name of properties file
def propKey=vPropKey // name of properties key
def relPropFileUrl=vRelPropFileUrl // userContent/properties/
def propAddress="${jenkinsURL}${relPropFileUrl}$propFile"
def props= new Properties()
props.load(new URL(propAddress).openStream())
def choices=[]

props.get(propKey.toString()).split(",").each{
    choices.add(it)
}

return choices

Интересно, возможно ли получить доступ к управляемым файлам таким же образом или, что еще лучше, получить доступ к чему-либо удаленно с помощью SSH.

Есть лиAPI для этого?

1 Ответ

0 голосов
/ 08 июня 2018

Я не смог найти решение, которое позволило бы SSH во время выполнения сценария параметра Active Choices.

Однако я смог использовать файл (ы) конфигурации, управляемый Jenkins.Вот код, который можно запустить из сценария параметра Active Choices:

def gcf = org.jenkinsci.plugins.configfiles.GlobalConfigFiles.get()
// Read different file based on referencedParameter ENVIRONMENT
def deploymentFileName = 'deployment.' + ENVIRONMENT + '.properties'
def deploymentFile = gcf.getById(deploymentFileName)
def deploymentProperties = new Properties();
deploymentProperties.load(new java.io.StringReader(deploymentFile.content))
def choices = []
// Make use of Properties object here to return list of choices
return choices

Позже в основном скрипте Groovy конвейера можно обновить файл таким же образом, но файл должен быть прочитан / загруженопять же, поскольку контекст сценария отличается:

def gcf = org.jenkinsci.plugins.configfiles.GlobalConfigFiles.get()
def deploymentFile = gcf.getById(deploymentFileName)
def deploymentProperties.load(new java.io.StringReader(deploymentFile.content))

// Update deploymentProperties as necessary here.

def stringWriter = new java.io.StringWriter()
deploymentProperties.store(stringWriter, "comments")

// Content of the deploymentFile object is immutable.
// So need to create new instance and reuse the same file id to overwrite the file.
def newDeploymentFile = deploymentFile.getDescriptor().newConfig(
    deploymentFile.id, deploymentFile.name, deploymentFile.comment, stringWriter.toString())
gcf.save(newDeploymentFile)

Конечно, все необходимые разрешения API должны быть предоставлены в Jenkins.

...