docker_entrypoint. sh не может получить доступ к файлу manage.py при раскрутке контейнера с изображения - Jenkins, Django, Docker - PullRequest
0 голосов
/ 01 апреля 2020

Я упаковал приложение Django и заставил его хорошо работать на моей локальной машине. Но то же самое не работает в конвейере CI / CD Jenkins

Вот Dockerfile

FROM python:3.7.3

RUN apt-get update
RUN apt-get install -y libldap2-dev libsasl2-dev libssl-dev
RUN pip3 install pipenv
ADD Pipfile Pipfile.lock /app/
WORKDIR /app
RUN pipenv install 
ADD docker-entrypoint.sh /app/
ADD docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
......
......

docker -входная точка. sh

#!/usr/bin/env bash
echo "Apply database migrations...."
python manage.py migrate

echo "Starting server via manage.py...."
python manage.py runserver 0.0.0.0:8000
.......
......

docker -compose.yml

django-server:
    build:
      context: ./local_app/
      dockerfile: Dockerfile
      args:
        PIPENV_EXTRA: "--dev"
    restart: always
    command: docker-entrypoint.sh
    ports:
      - "8000:8000"
    stdin_open: true
    tty: true
    container_name: django-server

Когда я выполнил docker -композитный файл локально, используя

docker-compose up

Он успешно запустился без ошибок и может получить доступ к серверу django в браузере по адресу http://localhost: 8000

Структура проекта

local_app
|-- docker-entrypoint.sh         # We added the executable entry script here
|-- Dockerfile                   # And the Dockerfile here
`-- hello_django
    |-- hello
    |   |-- __init__.py
    |   |-- settings.py
    |   |-- urls.py
    |   `-- wsgi.py
    |-- manage.py
    `-- requirements.txt

Но когда я выполнил ту же команду в конвейере Jenkins, как показано ниже

timestamps {

    node () {
        stage ('1-pull-git-code - Checkout - Pull the latest git code base') {
            checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxxxx-xxx-xxx-xxx', url: 'https://github.local.com/project_name/app-superman.git']]]) 
        }
        stage ('2-build-docker-images-and-spin-up-the-containers - Build - Create docker images from the code base and spin up containers') {
            sh """
                # Make the Python file executable
                chmod +x local_app/hello_django/manage.py

                echo "Running the build to create images....."
                docker-compose build

                echo "Spinning up the containers...."
                docker-compose up
            """ 
        }
   }
}

Я столкнулся с проблемой ниже

10:16:11  [django-server         |[0m Applying database migrations.
10:16:11  [django-server         |[0m + python manage.py migrate
10:16:11  [django-server         |[0m python: can't open file 'manage.py': [Errno 2] No such file or directory

Когда я запускаю ту же docker-compose up Команда локально, у меня нет проблем со скриптом docker-entrypoint.sh bash.

Но не уверен, почему docker-entrypoint.sh не может найти файл manage.py при запуске его из скрипта Jenkins.

Любые источники света, идеи, пропуски здесь были бы более полезными.

...