dima12101
@dima12101
Студент СПБГУ IT-специальности

Как решить проблему с деплоем на Travis-CI через FTP [TimeoutError: Connection timed out]?

С помощью Travis-CI я хочу реализовать следующий сценарий:
  • Запуск тестов
  • Сборка приложения в продакшен вид
  • Развёртывание на сервере

С первым и вторым пунктом проблем нет.
-------
Содержимое .travis.yml :
language: python
branches:
  only:
    - project/feature/CI&CD
python:
    - "3.7"
env:
    - DJANGO_VERSION=2.2.6
install:
    - pip install -q Django==$DJANGO_VERSION
    - sh install.sh
script: sh test.sh
after_success: 
    - sh build.sh
    - python deploy.py

-------
Насчёт третьего поподробней:
  • Развёртка идёт по принципу доставки файлов на FTP-сервер
  • FTP-сервер сервер настроен на Windows Server 2012 через IIS
  • FTP-клиентом выступает Python библиотека 'ftplib'

-------
Когда Travis-CI запускает следующий скрипт (упрощённая версия):
import os
import ftplib

ftp = ftplib.FTP()
print(ftp.connect(HOST, PORT))
print(ftp.login(os.environ['FTP_USER'], os.environ['FTP_PASSWORD']))

if 'mainService-test' not in ftp.nlst():
    ftp.mkd('mainService-test')

Падает с ошибкой:
220 Microsoft FTP Service
230 User logged in.
Traceback (most recent call last):
  File "deploy.py", line 151, in <module>
    if 'mainService-test' not in ftp.nlst():
  File "/opt/python/3.7.1/lib/python3.7/ftplib.py", line 559, in nlst
    self.retrlines(cmd, files.append)
  File "/opt/python/3.7.1/lib/python3.7/ftplib.py", line 468, in retrlines
    with self.transfercmd(cmd) as conn, \
  File "/opt/python/3.7.1/lib/python3.7/ftplib.py", line 399, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "/opt/python/3.7.1/lib/python3.7/ftplib.py", line 361, in ntransfercmd
    source_address=self.source_address)
  File "/opt/python/3.7.1/lib/python3.7/socket.py", line 727, in create_connection
    raise err
  File "/opt/python/3.7.1/lib/python3.7/socket.py", line 716, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out

Т.е. проблем с подключением нет. Ошибка возникает только на командах, которые требуют от сервера какие-либо данные.
Когда я запуская этот же скрипт на своей машине, всё работает!
-------
Буду благодарен за любую предоставленную помощь!
  • Вопрос задан
  • 186 просмотров
Пригласить эксперта
Ответы на вопрос 2
@vitaly_il1
DevOps Consulting
Когда я запуская этот же скрипт на своей машине, всё работает!

Может быть ваш ftp server открыт только для внутренней сети?
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
Т.е. проблем с подключением нет. Ошибка возникает только на командах, которые требуют от сервера какие-либо данные.
Когда я запуская этот же скрипт на своей машине, всё работает!


надо переписать в сетевых терминах
и, глядишь, сами и ответите
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы