首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用GitLab CI通过python脚本部署到FTP

使用GitLab CI通过python脚本部署到FTP
EN

Stack Overflow用户
提问于 2021-10-21 23:32:17
回答 1查看 201关注 0票数 2

我是GitLab的新手。我正在构建我的第一个管道,将我的GitLab项目的内容部署到一个使用TLS加密的FTP服务器上。我已经使用ftplib编写了一个Python脚本,将文件上传到FTP服务器,当我在本地Windows机器上运行它时,它工作得很好。该脚本将项目的全部内容上载到FTP服务器上的文件夹中。现在,我试图通过调用项目的.gitlab-ci.yml文件中的脚本来使其在GitLab上工作。脚本和yml文件都位于我的GitLab项目的顶层。目前设置非常简单:

代码语言:javascript
运行
复制
image: python:latest

deploy:
    stage: deploy
    script: 
        - python ftpupload.py
    only:
        - main

但是,上载始终超时,并显示以下错误消息:

代码语言:javascript
运行
复制
  File "/usr/local/lib/python3.9/ftplib.py", line 156, in connect
    self.sock = socket.create_connection((self.host, self.port), self.timeout,
  File "/usr/local/lib/python3.9/socket.py", line 843, in create_connection
    raise err
  File "/usr/local/lib/python3.9/socket.py", line 831, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out
Cleaning up file based variables
ERROR: Job failed: exit code 1

以下是在Python脚本中建立连接的基本设置,该脚本在本地运行良好,但在GitLab上失败:

代码语言:javascript
运行
复制
class ReusedSslSocket(ssl.SSLSocket):
    def unwrap(self):
        pass


class MyFTP_TLS(ftplib.FTP_TLS):
    """Explicit FTPS, with shared TLS session"""
    def ntransfercmd(self, cmd, rest=None):
        conn, size = ftplib.FTP.ntransfercmd(self, cmd, rest)
        if self._prot_p:
            conn = self.context.wrap_socket(conn,
                                            server_hostname=self.host,
                                            session=self.sock.session)  # reuses TLS session            
            conn.__class__ = ReusedSslSocket  # we should not close reused ssl socket when file transfers finish
        return conn, size

session = MyFTP_TLS(server, username, password, timeout=None)
session.prot_p()

我知道我可以在Python中使用其他工具,如lftp和git-ftp,但我已经在GitLab脚本中构建了许多自定义功能,并希望使用它。如何在GitLab CI中成功部署脚本?提前感谢您的帮助!

EN

Stack Overflow用户

回答已采纳

发布于 2021-10-25 21:00:30

这要求GitLab Runner (执行管道)能够与您的FTP服务器建立SFTP连接。

Shared runners可能被锁定为仅连接到GitLab服务器(以防止攻击载体)。

要解决这个问题,可以install你自己的runner并将其register到你的GitLab中。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69669851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档