Как повторно использовать работу в .gitlab-ci.yml - PullRequest
0 голосов
/ 22 апреля 2020

В настоящее время у меня есть два задания в файле CI, которые почти идентичны.

Первый - это ручная компиляция сборки выпуска из любой git ветви.

deploy_internal:
  stage: deploy
  script: ....<deploy code>
  when: manual

Второй планировщик должен использовать для выпуска ежедневной сборки из ветки develop .

scheduled_deploy_internal:
  stage: deploy
  script: ....<deploy code from deploy_internal copy/pasted>
  only: 
      variables:
          - $MY_DEPLOY_INTERNAL != null

Неправильно повторять весь код развертывания в двух местах. Становится хуже. Существуют также варианты deploy_external, deploy_release и запланированные.

Мой вопрос: есть ли способ, которым я могу комбинировать deploy_internal и scheduled_deploy_internal таким образом, чтобы сохранить ручное / запланированное поведение (в основном DRY) ?

В качестве альтернативы: есть ли лучший способ структурирования моих работ?

Редактировать:
Оригинальное название: Развернуть задание. Выполнить вручную, за исключением запланированного времени

1 Ответ

1 голос
/ 22 апреля 2020

Вы можете использовать якоря и псевдонимы YAML для повторного использования скрипта.

deploy_internal:
  stage: deploy
  script:
    - &deployment_scripts |
      echo "Deployment Started"
      bash command 1
      bash command 2
  when: manual

scheduled_deploy_internal:
  stage: deploy
  script:
    - *deployment_scripts
  only:
    variables:
      - $MY_DEPLOY_INTERNAL != null

Или вы можете использовать ключевое слово extends .

.deployment_script:
  script:
    - echo "Deployment started"
    - bash command 1
    - bash command 2

deploy_internal:
  extends: .deployment_script
  stage: deploy
  when: manual

scheduled_deploy_internal:
  extends: .deployment_script
  stage: deploy
  only:
    variables:
      - $MY_DEPLOY_INTERNAL != null
...