【问题标题】:Publish to FTPS using Jenkins使用 Jenkins 发布到 FTPS
【发布时间】:2014-06-04 11:56:11
【问题描述】:

我的提供商目前仅提供FTPS 作为将文件上传到服务器的一种方式。

现在我想将文件从 Jenkins 发布到该服务器。我可以使用支持 FTPS 的 FTP 客户端访问服务器,但两个 FTP-Publisher 插件似乎都无法使用 FTPS 发布。

我发现的 FTPS 和 Jenkins 的唯一参考是 open bug

我知道 SSH 会是一个不错的选择,但由于我的托管服务提供商不支持这一点,我想知道如何通过 jenkins 有效地将文件上传到我的服务器。

我的 jenkins 服务器在 OSX 上运行。

更新:根据下面我自己的回答,我尝试了 CURL,但遇到了一般错误:

curl -v -T index.html ftps://myusername:mypassword@myserver.com:21/www/
  • 添加句柄:conn: 0x7fa9d500cc00
  • 添加句柄:发送:0
  • 添加句柄:recv: 0
  • Curl_addHandleToPipeline:长度:1
  • Conn 0 (0x7fa9d500cc00) send_pipe: 1, recv_pipe: 0

    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                   Dload  Upload   Total   Spent    Left  Speed
    0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* 
    

    即将 connect() 到 myserver.com 端口 21 (#0)

  • 正在尝试 xx.xx.xx.xx...
  • 已连接到 myserver.com (xx.xx.xx.xx) 端口 21 (#0)
  • 连接到 myserver.com:-9800 时出现未知 SSL 协议错误
  • 关闭连接 0

curl: (35) 连接到 myserver.com:-9800 时出现未知 SSL 协议错误

【问题讨论】:

    标签: macos jenkins ftp jenkins-plugins ftps


    【解决方案1】:

    目前没有可以处理 FTPS(基于 SSL 的 FTP)的 Jenkins 插件。相反,cURL 程序能够使用 FTPS 上传。

    首先检查 Jenkins 主机上是否安装了 cURL。

    在 linux 环境下试试这个命令:

    which curl
    

    现在确保 cURL 位于 Jenkins 用户帐户的路径中。或者完全限定 cURL 的路径。

    现在使用构建后步骤、任务或使用提升的构建插件添加包含以下内容的 shell 脚本:

    FILEPATH=$WORKSPACE/path/to/some/file
    REMOTEPATH=/new/path/for/file
    curl -T $FILEPATH -u username:password ftps://myserver.com$REMOTEPATH
    

    更正$FILEPATH$REMOTEPATH 以反映环境。

    例子:

    FILEPATH=$WORKSPACE/index.html
    REMOTEPATH=/www/index.html
    

    如果远程主机上正在使用自签名证书,则 cURL 需要跳过验证。这是通过-k 参数完成的。

    curl -T $FILEPATH -u username:password -k ftps://myserver.com$REMOTEPATH
    

    【讨论】:

      【解决方案2】:

      一种上传方式可能是通过 CURL 进行,这不是最好的选择,因为我宁愿使用 Jenkins 插件,但至少这可以让我暂时这样做。

      来自Curl docs

      上传中

      FTP / FTPS / SFTP / SCP

      将标准输入上的所有数据上传到指定服务器:

      curl -T - ftp://ftp.upload.com/myfile
      

      从指定文件上传数据,使用用户名和密码登录:

      curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile
      

      将本地文件上传到远程站点,在远程站点也使用本地文件名:

      curl -T uploadfile -u user:passwd ftp://ftp.upload.com/
      

      上传本地文件以附加到远程文件:

      curl -T localfile -a ftp://ftp.upload.com/remotefile
      

      请注意,使用FTPS:// 作为前缀是“隐式”方式,如 标准,而推荐的“显式”方式是通过使用 FTP://--ftp-ssl 选项。

      【讨论】:

      • 我遇到了与 FTPS 要求相同的问题。此外,如果 Jenkins 没有找到 curl 命令,请确保它已安装在盒子和路径中。如果无法修改路径,则完全限定路径(例如 /usr/bin/curl 而不是 curl)。
      • @Romoku curl 由于某种奇怪的原因无法正常工作,请参阅我在问题中的更新。
      • 看起来您在 url 中使用了用户名和密码。试试curl -T index.html -u username:password ftps://myserver.com/www/index.html。如果您使用的是自签名证书,请添加 -k 以绕过验证。
      • @Romoku 你是对的。这解决了问题。我不知道正在使用我的自签名证书这一事实。您可以添加您的评论作为答案,如果您愿意,我会接受。
      猜你喜欢
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 2017-09-22
      • 2016-03-28
      相关资源
      最近更新 更多