#python #django #jenkins #geckodriver
#python #django #дженкинс #geckodriver
Вопрос:
У меня есть 2 сервера. Я пытаюсь настроить его для непрерывной интеграции для моего основного сервера веб-сайта
Веб-сервер 1 (облачный хостинг): Python3.6 Django3.1 Ubuntu16.04 Веб-сервер 2 (VPS): Python3.7 Django3.1 Ubuntu16.04 Дженкинс --ShiningPanda (плагин)
Я новичок в веб-разработке, поэтому, если это кажется странным для типов моих веб-серверов, вот почему. Я следил за книгой «Разработка на основе тестирования с помощью Python». Моя проблема в том, что при запуске python manage.py test [app]
мое [приложение] наследуется от класса StaticLiveSever для создания среды тестирования. На веб-сервере 1 это работает нормально. На веб-сервере 2 я получаю сообщение об ошибке, что адрес запроса не может быть назначен. Я использую jenkins для создания среды, но я получаю ошибку OSerror[99]:cannot assign requested address
. Я не понимаю, почему это происходит, когда я запускаю те же команды в Web Sever 1. Он работает нормально. Хотя, опять же, команды выполняются дженкинсом, а дженкинс настроен на запуск python3.7
Полная трассировка (основная проблема)
Traceback (most recent call last):
File "/var/lib/jenkins/shiningpanda/jobs/ddc1aed1/virtualenvs/d41d8cd9/lib/python3.7/site-packages/django/test/testcases.py", line 1449, in setUpClass
raise cls.server_thread.error
File "/var/lib/jenkins/shiningpanda/jobs/ddc1aed1/virtualenvs/d41d8cd9/lib/python3.7/site-packages/django/test/testcases.py", line 1374, in run
self.httpd = self._create_server()
File "/var/lib/jenkins/shiningpanda/jobs/ddc1aed1/virtualenvs/d41d8cd9/lib/python3.7/site-packages/django/test/testcases.py", line 1389, in _create_server
return ThreadedWSGIServer((self.host, self.port), QuietWSGIRequestHandler, allow_reuse_address=False)
File "/var/lib/jenkins/shiningpanda/jobs/ddc1aed1/virtualenvs/d41d8cd9/lib/python3.7/site-packages/django/core/servers/basehttp.py", line 67, in __init__
super().__init__(*args, **kwargs)
File "/usr/lib/python3.7/socketserver.py", line 452, in __init__
self.server_bind()
File "/usr/lib/python3.7/wsgiref/simple_server.py", line 50, in server_bind
HTTPServer.server_bind(self)
File "/usr/lib/python3.7/http/server.py", line 137, in server_bind
socketserver.TCPServer.server_bind(self)
File "/usr/lib/python3.7/socketserver.py", line 466, in server_bind
self.socket.bind(self.server_address)
OSError: [Errno 99] Cannot assign requested address
После жестко запрограммированного хоста
Traceback (most recent call last):
File "/var/lib/jenkins/workspace/Superlists/functional_tests/base.py", line 47, in setUp
self.browser = webdriver.Firefox()
File "/var/lib/jenkins/shiningpanda/jobs/ddc1aed1/virtualenvs/d41d8cd9/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
self.service.start()
File "/var/lib/jenkins/shiningpanda/jobs/ddc1aed1/virtualenvs/d41d8cd9/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 100, in start
self.assert_process_still_running()
File "/var/lib/jenkins/shiningpanda/jobs/ddc1aed1/virtualenvs/d41d8cd9/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 113, in assert_process_still_running
% (self.path, return_code)
selenium.common.exceptions.WebDriverException: Message: Service geckodriver unexpectedly exited. Status code was: 69
geckodriver.log с жестко заданным IP-адресом хоста в LiveTestServer
eckodriver: error: Address not available (os error 99)
geckodriver 0.27.0 (7b8c4f32cdde 2020-07-28 18:16 0000)
WebDriver implementation for Firefox
USAGE:
geckodriver [FLAGS] [OPTIONS]
[...]
Надеюсь, приведенные выше трассировки не слишком сбивают с толку. В конечном счете, я заметил, что когда я на веб-сервере 2, я получаю доступ к Django testcases.py модуль, который имеет LiverServerThread и hardcode host=0.0.0.0
вместо host=localhost
(1-й трассировки). Затем устанавливается соединение, хотя тогда проблема связана с geckodriver и тем же (2-й трассировщик). Мне нужно жестко указать ip 0.0.0.0, чтобы иметь возможность установить соединение, но тогда geckodriver просто прослушивает, что я предполагаю, в совершенно другом месте (здесь не показано error.log).
Итак, 1-й идентификатор хотел бы, по крайней мере, иметь возможность установить соединение для правильного запуска класса LiveServerThread. Затем попробуйте решить проблему с помощью geckodriver. Я также не был уверен, представляет ли проблему тип серверов, на которых я работаю.