Чтение данных JSON из файла YAML - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть .gitlab-ci.yml файл, который я использую для установки нескольких плагинов (craftcms / aws-s3, craftcms / redactor и т. Д.) На этапе публикации.Файл представлен ниже (частично):

# run the staging deploy, commands may be different baesed on the project
deploy-staging:
  stage: publish
  variables:
    DOCKER_HOST: 127.0.0.1:2375

    # ...............
    # ...............


    # TODO: temporary fix to the docker/composer issue
    - docker-compose -p "ci-$CI_PROJECT_ID" --project-directory $CI_PROJECT_DIR -f build/docker-compose.staging.yml exec -T craft composer --working-dir=/data/craft require craftcms/aws-s3
    - docker-compose -p "ci-$CI_PROJECT_ID" --project-directory $CI_PROJECT_DIR -f build/docker-compose.staging.yml exec -T craft composer --working-dir=/data/craft require craftcms/redactor

У меня есть файл JSON, в котором содержатся данные для плагинов.Файл .butler.json. предоставлен ниже,

{
  "customer_number": "007",
  "project_number": "999",
  "site_name": "Welance",
  "local_url": "localhost",
  "db_driver": "mysql",


  "composer_require": [
      "craftcms/redactor",
      "craftcms/aws-s3",
      "nystudio107/craft-typogrify:1.1.17"
],
  "local_plugins": [
  "welance/zeltinger",
    "ansmann/ansport"
 ]
}

Как мне взять имена плагинов из "composer_require" и "local_plugins" внутри файла .butler.json и создать цикл for в .gitlab-ci.yml файл для установки плагинов?

1 Ответ

1 голос
/ 06 апреля 2019

Вы не можете создать цикл в .gitlab-ci.yml, поскольку YAML не является языком программирования.Он описывает только данные.Вы можете использовать инструмент типа jq для запроса ваших значений (cat .butler.json | jq '.composer_require') внутри скрипта, но вы не можете устанавливать переменные оттуда (для этого есть запрос функции ).

Вы можете использовать шаблонизатор, такой как Jinja (который часто используется с YAML, например, Ansible и SaltStack), чтобы сгенерировать .gitlab-ci.yml из шаблона.Существует инструмент командной строки j2cli , который принимает переменные в качестве входных данных JSON, вы можете использовать его следующим образом:

j2 gitlab-ci.yml.j2 .butler.json > .gitlab-ci.yml

Затем вы можете использовать выражение Jinja, чтобы зациклить ваши данные и создать соответствующиеYAML в gitlab-ci.yml.j2:

{% for item in composer_require %}
  # build your YAML
{% endfor %}

Недостатком является то, что вам необходимо обработать .gitlab-ci.yml, зарегистрированный в вашем хранилище.Это можно сделать с помощью pre-commit-hook (перед каждым коммитом регенерируйте файл .gitlab-ci.yml и, если он изменился, зафиксируйте его вместе с другими изменениями).

...