Моя команда развертывает инфраструктуру в облаке, используя рабочие процессы 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»