В настоящее время я работаю над примером проекта с открытым исходным кодом для запуска теста Unity3d, сборки и развертывания конвейера для нескольких элементов конфигурации .Мне удалось заставить вещи работать в gitlab-ci, но сейчас я борюсь с travis CI.Достаточно вступления, вот где я сейчас застрял:
Скажем, у меня есть следующее (упрощенно) .travis.yml
:
sudo: required
language: bash
jobs:
include:
- &test
stage: test
script: |
echo "some multi-line script I don't want to repeat"
echo "some complicated command with $FOO" | tee test_output.txt
addons:
artifacts:
target_paths:
- $(pwd)/test_output.txt
- <<: *test
env: FOO=1
- <<: *test
env: FOO=2
- &build
stage: build
script: |
echo "some other multi-line script I don't want to repeat"
echo "some other complicated command with $BAR" | tee build_output.txt
addons:
artifacts:
target_paths:
- $(pwd)/build_output.txt
- <<: *build
env: BAR=a
- <<: *build
env: BAR=b
- <<: *build
env: BAR=c
- <<: *build
env: BAR=d
Это почти работает, вот каждый из прогонов:
job 1: some multi-line script I don't want to repeat
job 1: some complicated command with
job 2: some multi-line script I don't want to repeat
job 2: some complicated command with 1
job 3: some multi-line script I don't want to repeat
job 3: some complicated command with 2
job 4: some other multi-line script I don't want to repeat
job 4: some other complicated command with
job 5: some other multi-line script I don't want to repeat
job 5: some other complicated command with a
job 6: some other multi-line script I don't want to repeat
job 6: some other complicated command with b
job 7: some other multi-line script I don't want to repeat
job 7: some other complicated command with c
job 8: some other multi-line script I don't want to repeat
job 8: some other complicated command with d
Как видите, задания 1 и 4 имеют пустые переменные env, потому что шаблон &test
выполняется, даже если env var не задан.Я хотел бы избавиться от работы 1 и 4 выше и при этом сохранить файл travis DRY.Я не хочу добавлять условие if
, чтобы проверить, установлена ли env var, так как это создаст пустых заданий в travis.
Обход WET
Единственный способ добиться этого - использовать сценарии оболочки и повторять все, например, такие части как artifacts
(мне действительно трудно это читать):
test.sh
#!/usr/bin/env bash
echo "some multi-line script I don't want to repeat"
echo "some complicated command with $FOO" | tee test_output.txt
build.sh
#!/usr/bin/env bash
echo "some other multi-line script I don't want to repeat"
echo "some other complicated command with $FOO" | tee build_output.txt
.travis.yml
:
jobs:
include:
- stage: test
script: ./test.sh
env: FOO=1
addons:
artifacts:
target_paths:
- $(pwd)/test_output.txt
- stage: test
script: ./test.sh
env: FOO=2
addons:
artifacts:
target_paths:
- $(pwd)/test_output.txt
- stage: build
script: ./build.sh
env: BAR=a
addons:
artifacts:
target_paths:
- $(pwd)/build_output.txt
- stage: build
script: ./build.sh
env: BAR=b
addons:
artifacts:
target_paths:
- $(pwd)/build_output.txt
- stage: build
script: ./build.sh
env: BAR=c
addons:
artifacts:
target_paths:
- $(pwd)/build_output.txt
- stage: build
script: ./build.sh
env: BAR=d
addons:
artifacts:
target_paths:
- $(pwd)/build_output.txt
Итак, вопрос: как мы можем создать шаблон задания yaml без его запуска в travis CI?