У меня есть следующая git структура репо:
.
├── docker
│ ├── Dockerfile
│ └── requirements.txt
└── software
├── app
│ └── app.py
└── Dockerfile
Папка docker
отвечает за создание docker образа, который будет использоваться моим приложением.
Затем, если я изменю какой-либо файл в папке docker
, я бы хотел воссоздать base image
, а затем создать новый app image
, используя последний созданный base image
.
Но если я только изменю свой app, в папке software
, я хотел бы вызвать только сцену для образа приложения.
Ниже моего .gitlab-ci.yml
файла:
image: docker:latest
services:
- docker:dind
stages:
- buildDockerImage
- buildAppImage
build docker image:
stage: buildDockerImage
script:
- docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
- docker build --target final --build-arg docker_image_version=$CI_COMMIT_SHORT_SHA -t $DOCKER_IMAGE_NAME docker
- docker tag $DOCKER_IMAGE_NAME $CI_REGISTRY/xx/$APP_IMAGE_NAME:base
- docker push $CI_REGISTRY/xx/$APP_IMAGE_NAME
only:
changes:
- docker/**/*
build app image:
stage: buildAppImage
script:
- docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
- docker build --build-arg app_image_version=$CI_COMMIT_SHORT_SHA -t $APP_IMAGE_NAME software
- docker tag $APP_IMAGE_NAME $CI_REGISTRY/xx/$APP_IMAGE_NAME:$CI_COMMIT_SHORT_SHA
- docker push $CI_REGISTRY/xx/$APP_IMAGE_NAME
except:
changes:
- docker/**/*
only / except : changes
работает нормально распознавать место изменения, но не создаю конвейер с обоими этапами, если я изменяю папку docker
. Он создает только buildDockerImage
.
. Если я удаляю конфигурацию only / except : changes
, конвейер работает должным образом.
Можно ли добиться того, что мне нужно? Я имею в виду, я не хочу запускать buildDockerImage
, если я только изменяю свое приложение, но если я действительно изменяю base image
, мне нужно запустить оба buildDockerImage
и buildAppImage
в конвейере.