Записать динамическую переменную в JSON файл в .gitlab-ci.yml

нужно записать в json файл динамическую переменную $CI_PIPELINE_SOURCE" из gitlab, подскажите, пожалуйста, как это сделать?

пробовал так:

after_script:
        - touch allure-results/executor.json
        - echo '{"name":"Gitlab", "buildName":"$CI_PIPELINE_SOURCE", "type":"gitlab"}' > allure-results/executor.json

но в таком случае в файл записывается имя переменной, а не сама переменная


Ответы (1 шт):

Автор решения: mrgervant

Необходимо экранировать кавычки обратной косой чертой - перед каждой кавычкой должна стоять \:

  after_script:
    - touch allure-results/executor.json
    - echo "{\"name\":\"Gitlab\", \"buildName\":\"$CI_PIPELINE_SOURCE\", \"type\":\"gitlab\"}" > allure-results/executor.json

Кроме того, как кавычки для ключей и значений json, так и обрамляющие кавычки для echo, должны быть двойными:

  • Формат JSON требует двойных кавычек, которые будут использоваться вокруг строк и имён свойств.
  • В bash строки внутри одинарных кавычек считаются буквально и переменные не раскрываются - указываются их названия (что и произошло у Вас). При использовании двойных кавычек переменные будут развернуты - статья с примерами.

Внутри ключей/значений одинарные кавычки можно использовать:

- echo "{\"na 'm'e\":\"Gitlab\"}" > allure-results/executor.json
→ Ссылка