#gitlab #gitlab-ci
#gitlab #gitlab-ci
Вопрос:
В настоящее время в нашем проекте gitlab-ci.yml включает в себя общий шаблон yml со стадиями по умолчанию и определениями заданий. Я хочу включить этап и соответствующую работу, специфичную для этого проекта, который должен выполняться между этапами, определенными в шаблоне yml. Ниже приведены примеры файлов yml, которые представляют сценарий, над которым я работаю.
- .mvn-template.yml
stages:
- build
- static-analysis
- unit-test
- package
- integration-test
compile:
stage: build
tags:
- docker
artifacts:
paths:
- target/
expire_in: 14 days
script:
- mvn $MAVEN_CLI_OPTS compile
interruptible: true
//and job definitions for - static-analysis
// - unit-test
// - package
// - integration-test
- gitlab-ci.yml
include:
- project: 'xxx/common-pipeline'
ref: x.x.x
file: '/.mvn-template.yml'
...
Теперь я хочу включить новый этап, специфичный для этого проекта, скажем, тестирование контракта, между ними
- пакет
- интеграция-тест
Таким образом, контрактное тестирование должно выполняться после пакета и перед интеграционным тестированием.
Поскольку это специфично для этого проекта, я не могу включить в общий шаблон. Таким образом, должен быть включен в gitlab-ci.yml.
Не удалось выяснить, как это сделать. Я ранее работал с GitHub и совсем недавно начал работать над проектом с GitLab.
Могу ли я включить этап в общий шаблон, но не определять там соответствующую работу. И включить определение задания в gitlab-ci.yml? Не уверен, что это правильный путь. Вероятно, могли бы быть лучшие варианты для обработки такого сценария.
Пожалуйста, помогите.
Комментарии:
1. Я думаю, вы можете эмулировать это, используя
needs:
функцию, как описано в gitlab.com/gitlab-org/gitlab/-/issues/30632 и docs.gitlab.com/ee/ci/yaml/index.html#needs . То есть вы не можете ввести новый этап, но вы можете добавлять новые узлы в базу данных заданий практически произвольно.
Ответ №1:
На мой взгляд, вы можете сделать это 2-мя различными способами :
-
Добавьте этап
contract-testing
в свой файл шаблона и определите конкретную работу в.gitlab-ci.yml
вашем проекте. Конфигурация будет действительной: gitlab объединит и расширит includes / anchors, чтобы в конце создать один gitlab-ci. Примечание: вы можете определить этап, даже если нет задания, использующего этот этап (своего рода пустой этап), это не приведет к возникновению ошибки. -
Если вы не хотите, чтобы эта «пустая стадия» включалась во все ваши проекты, ссылающиеся на
include
, вы можете переместитьstages
шаблон за пределы себя и поместить их в.gitlab-ci.yml
свой проект. Как и в случае с решением 1), вам нужно определить задание в.gitlab-ci.yml
вашем проекте (не в шаблоне).
Комментарии:
1. Мне приходится следовать варианту 2, поскольку у меня есть несколько шаблонов, которые мы вводим, и может быть только один
stages
раздел.