Написание файла Yaml в конвейере со сценариями Jenkins

У меня есть файл yaml, который является началом сценария тестирования производительности Neoload в виде кода;

name: TestFile
servers:
- name: myserver
  host: myhost.world.com
  scheme: https

Я хочу, чтобы Дженкинс создал файл yaml на основе переменных из предыдущих шагов / конвейеров. Я видел, что writeYaml может делать то, что я хочу, и его довольно легко использовать. Это то, что у меня есть до сих пор;

script{
    def map = ['name':'TestFile]
    map.put('name','myserver')
    writeYaml, file: filename, data: map
}

Def работает нормально, но я не могу понять синтаксис добавления раздела «серверы» к объекту карты. С тем, что у меня есть выше, я просто получаю имя: myserver в файле.

Я действительно пробовал;

map.put("servers", new String[] {"name","myserver"})

Но он не компилируется (неожиданное "имя" токена), я предполагаю, потому что я пытаюсь использовать неправильный язык в конвейере сценариев.

Я также ценю то, что я мог просто сделать эквивалент «строки записи» в файл для генерации YAML, но дальше этот файл становится намного сложнее, поэтому я бы предпочел использовать этот объектно-ориентированный подход.


person Slimy43    schedule 26.02.2020    source источник
comment
Разве вы не пропустили апостроф в def map = ['name':'TestFile]? Не могли бы вы вместо этого попробовать def map = ['name':'TestFile']?   -  person sumid    schedule 09.06.2021


Ответы (1)


Учитывая существующую карту Groovy с парой "ключ-значение" ['name': 'TestFile], вы можете добавлять ключи и значения к этой карте с другим синтаксисом.

Чтобы сгенерировать нужный YAML, вам понадобится дополнительный ключ servers с массивом из одного элемента (- обозначает тип массива в YAML). Элемент-член этого массива должен быть другой картой со всеми вашими парами значений ключа.

Вы хотели бы добавить ['servers': [['name': 'myserver', 'host': 'myhost.world.com', 'scheme': 'https']]] на свою карту. В этом синтаксисе есть три []; первая и третья означают карту, а вторая - список. servers - это ключ на вашей первой карте, а значение - это список. Единственный элемент списка - это карта пар ключ-значение. Три пары ключ-значение составляют карту в этом элементе List.

Учитывая два общих синтаксиса для добавления пар ключ-значение к карте, вы можете сделать одно из следующих действий:

map['servers'] = [['name': 'myserver', 'host': 'myhost.world.com', 'scheme': 'https']]

or

map.servers = [['name': 'myserver', 'host': 'myhost.world.com', 'scheme': 'https']]

для достижения желаемого результата.

person Matt Schuchard    schedule 26.02.2020