Сделайте работу DEPLOY автоматической для веток релиза и руководство для других с GitLab CI - PullRequest
0 голосов
/ 30 августа 2018

Следующее решение должно работать.

deploy_release:
  stage: deploy
  tags:
  - linux
  only: 
  - master
  - stable
  retry: 2
  script:
  - do_action 1
  - do_action 2
  - git push artifacts

deploy_manual:
  stage: deploy
  tags:
  - linux
  except: 
  - master
  - stable
  when: manual
  retry: 2
  script:
  - do_action 1
  - do_action 2
  - git push artifacts

Но у него есть один ☝️ значительный недостаток - script: повторяется 2 раза.

Я думаю, что было бы неплохо написать что-то вроде:

.deploy_base:
  stage: deploy
  tags:
  - linux
  retry: 2
  script:
  - do_action 1
  - do_action 2
  - git push artifacts

deploy_release:
  include: .deploy_base
  only: 
  - master
  - stable

deploy_manual:
  include: .deploy_base
  except: 
  - master
  - stable
  when: manual

Но я сомневаюсь, что это сработает. Возможно ли сделать что-то подобное в YAML?


Другая простая идея состоит в том, чтобы

переместить script: в отдельный файл deploy_script.sh

и довести проблему до конца.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Вот оно https://docs.gitlab.com/ce/ci/yaml/README.html#extends

продолжается

Представлено в GitLab 11.3

extends определяет имя записи, от которой наследуется задание, которое использует extends.
extends альтернатива использованию якорей YAML, которая немного более гибкая и удобочитаемая.

.tests:
  only:
    refs:
      - branches

rspec:
  extends: .tests
  script: rake rspec
  stage: test
  only:
    variables:
      - $RSPEC
0 голосов
/ 30 августа 2018

Благодаря этому Q & A повторяющийся узел yaml, который является ключом

Решение:

.deploy_base:  &deploy_base
  stage: deploy
  tags:
  - linux
  retry: 2
  script:  &deploy_script
  - do_action 1
  - do_action 2
  - git push artifacts

deploy_release:
  only:  &deploy_release_only
  - master
  - stable
  script: *deploy_script

deploy_manual:
  except: *deploy_release_only
  when: manual
  script: *deploy_script

И даже лучше:

наследовать .deploy_base:

.deploy_base: &deploy_base
  stage: deploy
  tags:
  - DlpcsCore
  - linux
  retry: 2
  variables:
    URL: 'git@gitlab.com:Yahoo/HeavenShine-bin.git'
  script: &deploy_script
  - do_act_1
  - do_action_2

deploy_release:
  << : *deploy_base
  only: &deploy_release_only
  - master
  - stable
  - CI
  #- /^master[-_].+$/
  #- /^(.+)[+]bin$/

deploy_manual:
  << : *deploy_base
  except: *deploy_release_only
  when: manual

Чтобы узнать больше, ищите YAML merge

...