как запустить тест на созданном образе перед тем, как отправить его в реестр контейнера?
Из документации gitlab вот как создать образ докера с помощью kaniko:
build:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
only:
- tags
но я хочу сначала запустить тест (pytest), прежде чем помещать его в реестр контейнеров. Любая помощь приветствуется. Благодарность!
1 ответ
Я предполагаю, что вы хотите запустить тесты внутри контейнера Docker, для которого вы создаете образ.
Лучшее решение, которое я придумал до сих пор, это
- добавить тесты как еще один этап в многоэтапном
- в вашей
test-image
job, запустите Kaniko, не загружая образ в конце (это запустит ваши тесты во время сборки образа) - в
build-image
задание, запустите Kaniko с отправкой изображения и укажите этап/слой изображения, которое вы хотите отправить, используя--target
директива
Вот пример:
.gitlab-ci.yml
build:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
before_script:
- mkdir -p /kaniko/.docker
- >-
echo "{\"auths...}" > /kaniko/.docker/config.json
script:
- >-
/kaniko/executor
--context $KANIKO_BUILD_CONTEXT
--dockerfile $DOCKERFILE_PATH
--destination $IMAGE_TAG
--target image
Dockerfile
FROM ubuntu as image
RUN apt update -y && \
apt upgrade -y
RUN apt install -y git
FROM devimage as test
# smoke test to see whether git was installed as expected
RUN git --version
# you can add further tests here...
Это запустит тесты на втором этапе сборки Docker. Это место, где вы также можете установить тестовые фреймворки и другие ресурсы только для тестирования, которые не должны попадать в образ, помещенный в реестр контейнеров.
Канико не будет продвигать изображение, если тесты не пройдут.