Написание файла Yaml в скриптовом конвейере Jenkins - PullRequest
1 голос
/ 26 февраля 2020

У меня есть файл 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
}

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

Я пытался;

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

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

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

1 Ответ

1 голос
/ 26 февраля 2020

Учитывая существующую карту 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']]

или

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

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

...