#gitlab #devops #gitlab-ci
#gitlab #devops #gitlab-ci
Вопрос:
Я настраиваю конвейер gitlab CI для своего проекта. На данный момент он состоит из 3 этапов — build, build-async и build-all и deployment_mode «dev». На этапе сборки, создания папок, будут выполняться архивы развертывания. В асинхронной сборке будут выполняться все асинхронные действия, такие как копирование наборов в корзину aws s3, и все сборки должны по существу состоять из сборки плюс этап асинхронной сборки. Предположим, что переменные среды stage и deployment_mode были настроены в переменных среды gitlab. Вот пример фрагмента —
stages:
-build
-build-async
-build-all
dev-build:
image: python:3.7.4-alpine3.9
script:
- echo "Hello from dev-build. "
stage: build
tags:
- docker
- linux
only:
variables:
- $stage =~ /^build$/ amp;amp; $deployment_mode =~ /^dev$/
dev-build-async:
image: python:3.7.4-alpine3.9
script:
- echo "Hello from dev-build-async. "
stage: build-async
tags:
- docker
- linux
only:
variables:
- $stage =~ /^build-async$/ amp;amp; $deployment_mode =~ /^dev$/
dev-build-all:
image: python:3.7.4-alpine3.9
script:
- echo "Hello from dev-build-all. "
stage: build-all
tags:
- docker
- linux
needs: ["dev-build", "dev-build-async"]
only:
variables:
- $stage =~ /^build-all$/ amp;amp; $deployment_mode =~ /^dev$/
Я не могу запускать задания dev-build и dev-build-async как часть dev-build-all. У кого-нибудь есть идеи, как запустить их оба?
В этом случае результат, ожидаемый, когда я предоставляю stage как build-all и deployment-mode как dev, равен
Hello from dev-build.
Hello from dev-build-async.
Hello from dev-build-all.
Ответ №1:
dev-build-all
находится на третьем этапе, означает, что оно выполняется таким образом:
dev-build
-> dev-build-async
-> dev-build-all
needs:
это задание означает, что оно выполняется только после успешного выполнения обоих заданий. В данном случае это по умолчанию и needs:
не требуется, если только вам не нужны артефакты.
Чтобы запустить dev-build
и dev-build-async
из dev-build-all
, вы должны поместить оба задания на этапы после третьего. Необязательно использовать needs:
в обоих из них. Невозможно вызвать предыдущий этап.
Пример:
stages:
- build-all
- build
- build-async
dev-build-all:
image: python:3.7.4-alpine3.9
script:
- echo "Hello from dev-build-all. "
stage: build-all
tags:
- docker
- linux
only:
variables:
- $stage =~ /^build-all$/ amp;amp; $deployment_mode =~ /^dev$/
dev-build:
image: python:3.7.4-alpine3.9
script:
- echo "Hello from dev-build. "
stage: build
tags:
- docker
- linux
needs:
- job: dev-build-all
artifacts: false
only:
variables:
- $stage =~ /^build$/ amp;amp; $deployment_mode =~ /^dev$/
dev-build-async:
image: python:3.7.4-alpine3.9
script:
- echo "Hello from dev-build-async. "
stage: build-async
tags:
- docker
- linux
needs:
- job: dev-build
artifacts: true
only:
variables:
- $stage =~ /^build-async$/ amp;amp; $deployment_mode =~ /^dev$/
Комментарии:
1. Спасибо за предложения. Ваш CI изменяет неудачный конвейер с ошибкой «dev-build: требуется ‘dev-build-all’ » . Кроме того, здесь изменения предполагают, что для сборки dev-build требуется сначала выполнить dev-build-all, что не так. Я хочу, чтобы dev-build и dev-build-async обязательно запускались при выполнении dev-build-all. Итак, в этом случае результат, ожидаемый, когда я предоставляю stage как build-all и deployment-mode как dev, — это привет от dev-build. Привет от dev-build-async. Привет от dev-build-all.