Проблема
Чтобы сначала подтвердить вашу проблему, я полагаю, у вас есть такая настройка:
.gitlab-ci.yml
:
stages:
- build-binaries
- build-images
# Binaries
build-release-binary:
stage: build-binaries
script:
- make release
build-debug-binary:
stage: build-binaries
script:
- make debug
# Docker Images
build-release-image:
stage: build-images
dependencies:
- build-release-binary
script:
- docker build -t wvxvw:release .
build-debug-image:
stage: build-images
dependencies:
- build-debug-binary
script:
- docker build -t wvxvw:debug .
И это должно привести к конвейеру, подобному следующему:
build-binaries build-images
______________________ _____________________
| | | |
| build-release-binary |----+--+--->| build-release-image |
|______________________| / \ |_____________________|
| |
______________________ | | _____________________
| | | | | |
| build-debug-binary |---/ \-->| build-debug-image |
|______________________| |_____________________|
Оценка
Вы правы, что никакие задания со стадии build-images
не начнутся, пока все задания со стадии build-binaries
не будут завершены (несмотря на то, что зависимости задания выполнены).
Существует открытая проблема GitLab, в которой обсуждается следующее:
gitlab-org/gitlab-ce#49964
: разрешить запуск задания CI, если его зависимости преуспели
Я добавил комментарий, указывающий на улучшения, которые могут быть сделаны в этом случае.В будущем конвейер может выглядеть следующим образом (обратите внимание на отдельные соединительные линии):
build-binaries build-images
______________________ _____________________
| | | |
| build-release-binary |----------->| build-release-image |
|______________________| |_____________________|
______________________ _____________________
| | | |
| build-debug-binary |----------->| build-debug-image |
|______________________| |_____________________|
Обходной путь
Иногда, если у вас есть последовательные задачи, проще просто запустить их вхолостая работаЭто позволяет избежать лишних затрат при запуске другой работы, когда у вас уже есть все готовое к работе на первой работе.
В качестве обходного пути вы можете просто сгладить свой конвейер в одну стадию, которая создаст какдвоичный файл и образ Docker:
.gitlab-ci.yml
:
stages:
- build
build-release:
stage: build
script:
- make release
- docker build -t wvxvw:release .
build-debug:
stage: build
script:
- make debug
- docker build -t wvxvw:debug .
Ваш конвейер тогда, конечно, будет выглядеть так:
build
_______________
| |
| build-release |
|_______________|
_______________
| |
| build-debug |
|_______________|
Я работал с командой, чтобы упростить их конвейер аналогичным образом, и мы были довольны результатами.