Этап сборки запускается только при наличии изменений в Dockerfile-pentaho.
Шаг запуска должен выполняться каждый раз, если шаг сборки был запущен, я хочу получить образ с тегом CI_PIPELINE_ID, если нет, я хочу запустить его с последним тегом.
Мне нужно запустить шаг «выполнить» с помощью приведенного ниже сценария, если запускается шаг сборки:
А если нет, мне нужно запустить скрипт ниже:
Я пытался создать файл с touch $CI_PROJECT_DIR/success
на этапе сборки и проверить, существует ли он на этапе запуска, но не могу заставить его работать.
вот мой gitlab-ci.yml.
services:
- docker:19.03.1-dind
variables:
PENTAHO_IMAGE: $CI_REGISTRY/xxxx/xxxxx/pentaho
stages:
- build
- run
.docker-configs: &docker-configs
tags:
- interno
image:
name: docker/compose:1.24.1
entrypoint: [""]
variables:
DOCKER_HOST: tcp://docker:2375
BUILD_PENTAHO: latest
services:
- docker:18.09.7-dind
before_script:
- apk add --no-cache bash
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"
build-pentaho:
<<: *docker-configs
stage: build
rules:
- changes:
- Dockerfile-pentaho
script:
- echo "Building pentaho docker image"
- docker build -t $PENTAHO_IMAGE:$CI_PIPELINE_ID -f Dockerfile-pentaho .
- docker push $PENTAHO_IMAGE:$CI_PIPELINE_ID
- touch $CI_PROJECT_DIR/success # creating file to check on running step
run-pentaho:
<<: *docker-configs
stage: run
script:
- echo "Executando pentaho image"
- |
if [[ -f success ]] ; then
echo "condição true"
docker run --rm $PENTAHO_IMAGE:$CI_PIPELINE_ID --v files/pentaho/reps/:/pentaho-di/repo/
else
echo "condição false"
docker run --rm $PENTAHO_IMAGE:latest --v files/pentaho/reps/:/pentaho-di/repo/
fi
У меня работает с артефактами.
Окончательный gitlab-ci:
services:
- docker:19.03.1-dind
variables:
PENTAHO_IMAGE: $CI_REGISTRY/xxxx/xxxxx/pentaho
stages:
- build
- run
.docker-configs: &docker-configs
tags:
- interno
image:
name: docker/compose:1.24.1
entrypoint: [""]
variables:
DOCKER_HOST: tcp://docker:2375
BUILD_PENTAHO: latest
services:
- docker:18.09.7-dind
before_script:
- apk add --no-cache bash
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"
build-pentaho:
<<: *docker-configs
stage: build
rules:
- changes:
- Dockerfile-pentaho
script:
- echo "Building pentaho docker image"
- docker build -t $PENTAHO_IMAGE:$CI_PIPELINE_ID -f Dockerfile-pentaho .
- docker push $PENTAHO_IMAGE:$CI_PIPELINE_ID
- echo "building ..." >> ./result.txt
artifacts:
expire_in: 3 minutes
paths:
- result.txt
run-pentaho:
<<: *docker-configs
stage: run
script:
- echo "Executando pentaho image"
- |
if [[ -f result.txt ]] ; then
echo "condição true"
docker run --rm $PENTAHO_IMAGE:$CI_PIPELINE_ID --v files/pentaho/reps/:/pentaho-di/repo/
else
echo "condição false"
docker run --rm $PENTAHO_IMAGE:latest --v files/pentaho/reps/:/pentaho-di/repo/
fi