Разбор конфигурационного файла с разделами в Jenkins Pipeline и получение указанного раздела c - PullRequest
0 голосов
/ 28 января 2020

Я должен проанализировать конфиг со значениями раздела в Jenkins Pipeline. Ниже приведен пример файла конфигурации

[deployment]
10.7.1.14
[control]
10.7.1.22
10.7.1.41
10.7.1.17
[worker]
10.7.1.45
10.7.1.42
10.7.1.49
10.7.1.43
10.7.1.39
[edge]
10.7.1.13

Ожидаемый результат: control1 = 10.7.1.17, control2 = 10.7.1.22, control3 = 10.7.1.41

Я попробовал приведенный ниже код в моем конвейере Jenkins сценарий раздела. Но, похоже, неправильная функция

def cluster_details = readProperties interpolate: true, file: 'inventory'
echo cluster_details
def Var1= cluster_details['control']
echo "Var1=${Var1}"

Не могли бы вы помочь мне с подходом для достижения ожидаемого результата

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Привет, я получил решение проблемы

control_nodes = sh (script: """
                manish=\$(ansible control -i inventory --list-host |sort -t . -g -k1,1 -k2,2 -k3,3 -k4,4 |awk '{if(NR>1)print}' |awk '{\$1=\$1;print}') ; \
                echo \$manish
                """,returnStdout: true).trim()
echo "Cluster Control Nodes are : ${control_nodes}"
def (control_ip1,control_ip2,control_ip3) = control_nodes.split(' ')
//println c1 // this also works
echo "Control 1: ${control_ip1}"
echo "Control 2: ${control_ip2}"
echo "Control 3: ${control_ip3}"

Объяснение: В разделе сценария. Я получаю список имен хостов. Используя сортировку, я сортирую имя хоста на основе точечного (.) Разделителя. затем с помощью awk удаляем первую строку в выводе. Используя более позднюю версию awk, я удаляю начальные пробелы.

Использование returnStdout для сохранения вывода переменной оболочки в свойство jenkins, у которого список ips разделен пробелом. Теперь, когда у меня есть значения в переменной свойства jenkins, я извлекаю отдельные IP-адреса, используя методы split. Надеюсь, это поможет.

0 голосов
/ 28 января 2020

Относительно документации readProperties - прочитать Java файл свойств. Но не файлы INI.

https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readproperties -read-properties-from-files-in-the-workspace-or-text

Я думаю прочитать INI-файл для этого есть доступная библиотека, например, https://ourcodeworld.com/articles/read/839/how-to-read-parse-from-and-write-to-ini-files-easily-in-java

...