Я упаковал приложение 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.
Любые источники света, идеи, пропуски здесь были бы более полезными.