Передача переменных окружения от одного кубика к другому
В CI/CD SourceCraft вы можете передавать переменные окружения от одного кубика к другому с помощью специальных предопределенных переменных окружения SOURCECRAFT_ENV и SOURCECRAFT_OUTPUT.
SOURCECRAFT_ENV
Переменная, с помощью которой передаются переменные окружения от одного кубика к последующим в виде пар KEY=VALUE. Для записи в переменную используется оператор перенаправления ввода >>.
Значения, записанные в SOURCECRAFT_ENV в одном кубике, передаются последующим кубикам в рамках того же задания.
Пример передачи однострочных значений в SOURCECRAFT_ENV
on:
push:
- workflows: [ env-single-line ]
workflows:
env-single-line:
tasks:
- name: env-single-line-task
cubes:
- name: input
script:
- echo "VER=1.0.1" >> $SOURCECRAFT_ENV # Запись в переменную
- echo "VAR1=SOME_VALUE" >> $SOURCECRAFT_ENV # Запись в переменную
- name: use-env
script:
- echo $VER # Вывод переменной
- echo $VAR1 # Вывод переменной
Пример передачи многострочных значений в SOURCECRAFT_ENV
on:
push:
- workflows: [ env-multi-line ]
workflows:
env-multi-line:
tasks:
- name: env-multi-line-task
cubes:
- name: input
script: # Запись многострочного значения в переменную
- |
echo "my_var_multiline<<EOF
line1
line2
EOF" >> $SOURCECRAFT_ENV
- name: use-env
script:
- echo $my_var_multiline # Вывод переменной
SOURCECRAFT_OUTPUT
Переменная, с помощью которой от одного кубика к другому передаются пары KEY=VALUE через блок outputs. Для записи в переменную используется оператор перенаправления ввода >>.
Значения, записанные в SOURCECRAFT_OUTPUT в одном кубике, становятся доступными для последующих кубиков в рамках того же задания. Чтобы использовать переданное значение, в последующем кубике нужно обратиться к нему через специальный синтаксис: ${{ cubes.<имя_исходного_кубика>.outputs.<ключ> }}.
Пример передачи однострочных значений в SOURCECRAFT_OUTPUT
on:
push:
- workflows: [ output-single-line ]
workflows:
output-single-line:
tasks:
- name: output-single-line-task
cubes:
- name: inputcube
script:
- echo "outputvar=my-value" >> $SOURCECRAFT_OUTPUT # Запись в переменную
- name: outputcube
env:
MY_ENV: "${{ cubes.inputcube.outputs.outputvar }}" # Получение значения
Пример передачи многострочных значений в SOURCECRAFT_OUTPUT
on:
push:
- workflows: [ output-multi-line ]
workflows:
output-multi-line:
tasks:
- name: output-multi-line-task
cubes:
- name: inputcube
script: # Запись многострочного значения в переменную
- |
echo "outputvar<<EOF
line3
line4
EOF" >> $SOURCECRAFT_OUTPUT
- name: outputcube
env:
MY_ENV: "${{ cubes.inputcube.outputs.outputvar }}" # Получение значения