GitLab CI / CD — использование обоих включает: и требует:

#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.