#gitlab #gitlab-ci
# #gitlab #gitlab-ci
Вопрос:
Я работаю над шаблоном Auto-Devops для my .gitlab-ci.yml. Попытка использовать оба include:
и needs:
как часть партнерской лаборатории GitLab. Инструмент CI Lint сообщает, что это допустимо, но конвейер завершается с ошибкой, сообщая: «dast: требуется’dast_environment_deploy'». После попытки выполнения приведенного ниже кода я даже попытался скопировать содержимое всего шаблона dast_environment_deploy и поместить его в файл, по-прежнему получая ту же ошибку.
Как мне заставить мой файл конвейера использовать needs:
на основе include:
шаблона?
image: alpine:latest
stages:
- build
- test
- scan
- deploy # dummy stage to follow the template guidelines
- review
- dast
- staging
- canary
- production
- incremental rollout 10%
- incremental rollout 25%
- incremental rollout 50%
- incremental rollout 100%
- performance
- cleanup
scan:
stage: scan
trigger:
include:
- template: Security/License-Scanning.gitlab-ci.yml
- template: Security/Container-Scanning.gitlab-ci.yml
- template: Security/Dependency-Scanning.gitlab-ci.yml
review:
needs: ["build"]
dast:
needs: ["dast_environment_deploy"]
sast:
needs: []
cache:
paths:
- node_modules
include:
- template: Jobs/Build.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Build.gitlab-ci.yml
- template: Jobs/Test.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Test.gitlab-ci.yml
- template: Jobs/Code-Quality.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Code-Quality.gitlab-ci.yml
- template: Jobs/Code-Intelligence.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Code-Intelligence.gitlab-ci.yml
- template: Jobs/Deploy.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml
- template: Jobs/Deploy/ECS.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Deploy/ECS.gitlab-ci.yml
- template: Jobs/Deploy/EC2.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Deploy/EC2.gitlab-ci.yml
- template: Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/DAST-Default-Branch-Deploy.gitlab-ci.yml
- template: Jobs/Browser-Performance-Testing.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Browser-Performance-Testing.gitlab-ci.yml
- template: Security/DAST.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Security/DAST.gitlab-ci.yml
- template: Security/SAST.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml
- template: Security/Secret-Detection.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Security/Secret-Detection.gitlab-ci.yml
Комментарии:
1. Похоже, это может быть проблема с правилами в одном из последующих шаблонов. На первый взгляд я не увидел проблемы, но кто-то предложил мне это, и мне нужно будет подробнее ознакомиться с правилами.
Ответ №1:
Я не проверял каждый из ваших включенных шаблонов, но, основываясь на ошибке и нескольких, которые я проверил, ошибка, скорее всего, вызвана needs
ключевым словом, требующим задания, которое не добавляется в конвейер из-за when
условия или rules:if
условия.
Если задание needs
— другое задание, а другое задание не добавляется в конвейер (фактический запущенный экземпляр конвейера, а не определение конвейера в .gitlab-ci.yml), yml считается недействительным во время выполнения. Вы можете увидеть все требования и ограничения needs
в документах: https://docs.gitlab.com/ee/ci/yaml/#requirements-and-limitations
Глядя на первый включенный шаблон, - template: Jobs/Build.gitlab-ci.yml # https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Jobs/Build.gitlab-ci.yml
, оба build
build_artifact
задания и имеют правила, которые могут привести к тому, что задание не будет добавлено в конвейер. Например, если переменная $AUTO_DEVOPS_PLATFORM_TARGET
не является «EC2», ни одно задание не будет добавлено, поэтому любое задание, которое needs
эти задания будут выдавать ошибку YML.