С помощью
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
Т.е. проблем с подключением нет. Ошибка возникает только на командах, которые требуют от сервера какие-либо данные.
Когда я запуская этот же скрипт на своей машине, всё работает!
-------
Буду благодарен за любую предоставленную помощь!