LINUX.ORG.RU
ФорумAdmin

gitlab cicd , тест приложения к докере.

 , , , ,


0

1

Привет, есть апп, допустим на питоне, который в пайплайне собирается в докер, кладется к реп на gitlab и затем пушится в виде докера на прод.

Как его тестировать? Я бы хотел тестировать после билда, те в идеале я бы хотел взять Dockerfile из самого проекта, собрать апп( оно и так делается) и запускать тесты уже на собраном докере , а затем деплоить.

Я не хочу писать в тесте еще раз руками сборку того, что уже и так написано в Dockerfile

Вот тестовый проект

Dockerfile


FROM alpine:3.11

WORKDIR /app



RUN apk add --update --no-cache python3 openssl tzdata git\
 && pip3 install --upgrade pip \
 && pip3 install --upgrade flask flask-restful notion

COPY main.py /app

CMD ["python3", "-u", "/app/main.py"]

gitlab-ci.yml


stages:
  - publish
  - deploy

variables:
  TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
  TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA

publish:
  image: docker:latest
  stage: publish
  services:
    - docker:dind
  script:
    - docker build -t $TAG_COMMIT -t $TAG_LATEST .
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
    - docker push $TAG_COMMIT
    - docker push $TAG_LATEST

deploy:
  image: alpine:latest
  stage: deploy
  tags:
    - deployment
  script:
    - chmod og= $ID_RSA
    - apk update && apk add openssh-client
    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY"
    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker pull $TAG_COMMIT"
    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker container rm -f my-app || true"
    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker run -d -p 5050:5050 --name my-app $TAG_COMMIT"
  environment:
    name: production
    url: http://XX.XX.XX.XX
  only:
    - master

★★★★

Ответ на: комментарий от anonymous

как это относится к моему вопросу? те может и относится, но не понятно как.

я хочу собрать докер, запустить его и прогнать тесты, а затем деплоить.

вероятно, что если тестировать каким-то curl, то запускать надо докер в докере? или же писатт тестовые скрипты внутри проекта и запускать докер с нужными командами, забирая выхлоп.

я бы хотел увидеть более разжеванный ответ, как для дебила.

constin ★★★★
() автор топика

собирай в gitlab container registry, в тестах используй image: $CI_REGISTRY_IMAGE

как сделано у меня:

base_image:
  stage: prepare
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - ci_auth=$(echo -n $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD | base64)
    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$ci_auth\"}}}" > /kaniko/.docker/config.json
    - >
        /kaniko/executor 
        --context $CI_PROJECT_DIR 
        --dockerfile $CI_PROJECT_DIR/Dockerfile 
        --destination $CI_REGISTRY_IMAGE:base

tests:
  stage: tests
  image: $CI_REGISTRY_IMAGE:base
  script:
    - coverage run src/manage.py test
MaZy ★★★★★
()
Ответ на: комментарий от MaZy

те у тебя внутри твоего докера (и проекта) тесты. и ты запускашь их внутри своего докера ?

спасибо

constin ★★★★
() автор топика
Ответ на: комментарий от constin

в base-image я просто добавляю необходимый софт, gitlab-ci уже монтирует папку проекта в запускаемый контейнер

MaZy ★★★★★
()
Ответ на: комментарий от MaZy

но base-image это то, что уйдет потом в деплой? или собирается два разных контейнера один для тестов, а второй для деплоя?

constin ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.