Наследование в gitlab
Я хочу научиться наследоваться в .gitlab. Я нашёл, как это делать в документации. Это можно делать с помощью before_script и after_script. Описано тут. Под наследованием я понимаю возможность переиспользование кода:
default:
before_script:
- IMAGE=${IMAGE} make build
- IMAGE=${VERSION} make run
golang-tesseract:
when: manual
variables:
VERSION: test
IMAGE: golang-tesseract
script:
- echo "Finished"
Таким образом, в данном случае, при запуске golang-tesseract выполнится сначала before_script из default, а затем -- script. При этом, переменные будут взяты из golang-tesseract. Но в script у меня остаётся одна не нужная команда. Возможно ли от неё избавиться? В документации .gitlab явно сказано, что в каждом правиле есть один обязательный раздел script. Может быть есть какие-нибудь обходные пути?
Ответы (2 шт):
!! Оба варианта не работают !!
Можно в базовом таске сделать
scriptвместоbefore_script. Тогда в наследнике скрипт не нуженМожно попробовать в наследнике сделать
script: [](не уверен, что сработает)
Можно вместо default использовать extends
.default:
script:
- IMAGE=${IMAGE} make build
- IMAGE=${VERSION} make run
golang-tesseract:
extends: .default
when: manual
variables:
VERSION: test
IMAGE: golang-tesseract
Наследование в gitlab Это можно делать с помощью before_script и after_script.
before_script и after_script это вовсе не про наследования, а про before и after скрипты.
Вам нужны .job_template, они же якоря (anchors), подробнее тут:
https://docs.gitlab.com/ee/ci/yaml/#anchors
Решения, с примерами использования наследований:
Через
anchorиextends:.pytest_template: # это anchor, джоба с точкой в начале является якорем, от которого можно наследоваться script: - pytest $TESTS test_first: extends: .pytest_template # это само наследование через extends свойство джобы variables: TESTS: '/first' # в итоге выполнится скрипт "pytest /first" test_second: extends: .pytest_template variables: TESTS: '/second' # в итоге выполнится скрипт "pytest /second"Через алиасы
alias:.job_template: &job_definition # Hidden key that defines an anchor named 'job_definition' image: ruby:2.6 services: - postgres - redis test1: <<: *job_definition # Merge the contents of the 'job_definition' alias script: - test1 project test2: <<: *job_definition # Merge the contents of the 'job_definition' alias script: - test2 projectРаз речь идет про скрипты, то можно наследовать даже скрипты:
.some-script: &some-script - echo "Execute this script in `before_script` sections" .some-script-before: &some-script-before - echo "Execute this script in `script` sections" .some-script-after: &some-script-after - echo "Execute this script in `after_script` sections" job_name: before_script: - *some-script-before script: - *some-script after_script: - *some-script-after