3 votes

Problème d'exécution d'un conteneur Docker dans Gitlab CI/CD

Je tente de construire et exécuter mon image Docker en utilisant Gitlab CI/CD, mais il y a un problème que je n'arrive pas à résoudre même si localement tout fonctionne bien.

Voici mon Dockerfile :

FROM 
RUN apt update && \
    apt install --no-install-recommends -y build-essential gcc
COPY requirements.txt /requirements.txt

RUN pip install --no-cache-dir --user -r /requirements.txt

COPY . /src
WORKDIR /src
ENTRYPOINT ["python", "-m", "dvc", "repro"]

Voici comment je lance le conteneur :

docker run --volume ${PWD}:/src --env=GOOGLE_APPLICATION_CREDENTIALS= ./dvc_configs/free/dvc.yaml --force

Tout fonctionne très bien lors de l'exécution en local, mais cela échoue lors de l'exécution sur Gitlab CI/CD.

stages:
  - build_image

build_image:
  stage: build_image
  image: 
  script:
    - echo "Construction de l'image Docker..."
    - mkdir ~/.docker
    - cat $GOOGLE_CREDENTIALS > ${CI_PROJECT_DIR}/key.json
    - docker build . -t 
    - docker run --volume ${PWD}:/src --env=GOOGLE_APPLICATION_CREDENTIALS=  ./dvc_configs/free/dvc.yaml --force
  artifacts:
        paths:
          - "./data/*csv"
        expire_in: 1 week

Cela entraîne l'erreur suivante : ERROR: you are not inside of a DVC repository (checked up to mount point '/src')

Au cas où vous ne sauriez pas ce qu'est DVC, il s'agit d'un outil utilisé en apprentissage automatique pour la version de vos modèles, ensembles de données, métriques et, en plus, pour la configuration de vos pipelines, que j'utilise dans mon cas.

Essentiellement, cela nécessite deux dossiers .dvc et .git dans le répertoire à partir duquel dvc repro est exécuté.

Dans ce cas particulier, je ne sais pas pourquoi il n'arrive pas à exécuter cette commande alors que le contenu des dossiers est exactement le même et que .dvc et .git existent tous deux.

Merci d'avance!

4voto

abcdaa Points 1654

Votre COPY . /src est problématique pour la même raison que Hidden file .env not copied using Docker COPY. Vous avez probablement besoin de !.dvc dans votre .dockerignore.

De plus, docker run --volume ${PWD}:/src va écraser le /src du conteneur donc $PWD lui-même aura besoin de .git & .dvc etc. Il semble que vous n'ayez pas cloné de repo avant d'exécuter ces commandes script.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X