Трэвис: как создать шаблонную работу без ее запуска - PullRequest
0 голосов
/ 14 сентября 2018

В настоящее время я работаю над примером проекта с открытым исходным кодом для запуска теста 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?

...