Рубрики
Uncategorized

Обработка YAML в GitHub Рабочие процессы

Моя команда развертывает инфраструктуру в облаке, используя рабочие процессы GitHub, позволяя нам проверять, проверить, … Tagged с GitHub, Yaml, TypeScript, DevOps.

Моя команда развертывает инфраструктуру в облаке, используя рабочие процессы GitHub, позволяя нам проверять, тестировать и гибко создавать инфраструктуру как код перед применением изменений. Чтобы нацелиться на конкретные среды и решения, мы разработали глобальные и конфигурации YAML для PER-проекта для сопровождения нашей стратегии матрицы рабочего процесса.

Чтобы использовать эти конфигурации, нам нужно что -то в нашем рабочем процессе, чтобы прочитать их. На рынке GitHub есть широкий выбор валидаторов YAML и линтеров, но только пара реальных процессоров YAML.

На момент написания этой статьи процессоры, существующие, имели различную степень функциональности и надежности, либо в их способности, либо в неспособности, чтобы по умолчанию установить переменные рабочего процесса, оставляя разработчику дополнительные шаги в создании переменных. У других была правильная идея, как описано в их Readme, но само действие не выполнится из -за ошибок.

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

- name: 'Config'
  run: echo "::set-output name=foo::$(echo $(egrep "^foo\:\ [^\S]*" .ci_config.yaml | cut -d':' -f2 | sed s/\S//g))"
  id: config

- name: 'Use The Output'
  Run: echo "${{ steps.config.outputs.foo }}

Попробуйте сделать это для более чем двух значений в вашем файле конфигурации рабочего процесса GitHub, и вы быстро почувствуете боль. Введите дракона … эвер … Ямлер Анкет

Ямлер это действие GitHub, которое обрабатывает весь документ YAML и предоставляет все элементы доступны в виде выходных переменных рабочего процесса GitHub.

- name: yamler
  uses: juliojimenez/yamler@v0
  id: yamler
  with:
    yaml-file: "example.yaml"

Допустим, наш пример. Файл.

foo: bar
bar: foo

Мы можем получить доступ к этим ключам/значениям в качестве выходных переменных рабочего процесса GitHub с шага Yamler выше:

# Use the output from the yamler step
- name: Output
run: |
  echo "${{ steps.yamler.outputs.foo }}"
  echo "${{ steps.yamler.outputs.bar }}"

Yamler сохраняет структуру документа с использованием обозначения Double-underscore ( __ ). Если значение расположено в foo.bar , выходная переменная Yamler станет foo__bar Анкет Массивы индексируются аналогичным образом, элемент bar.foo [5] можно получить доступ с Ямлером в bar__foo__5 Анкет

Я был фальшивым удивленным при экономии времени проверки GitHub после перехода на Yamler от Другое процессор. Причина этого заключается в том, что Yamler написан в TypeScript (который собирает JavaScript), и наш предыдущий процессор был установлен из контейнера Docker, который занял почти целую минуту.

Вы можете найти больше информации о различных типах действий и создании собственных действий Здесь Анкет

Спасибо за чтение, и я надеюсь, что Ямлер облегчит день. Оставьте нам звезду!

https://github.com/marketplace/actions/yamler https://github.com/juliojimenez/yamler

Оригинал: «https://dev.to/juliojimenez/processing-yaml-in-github-workflows-4en2»