【问题标题】:Jenkins transferring 0 files using publish over SSH pluginJenkins 使用 SSH 插件发布传输 0 个文件
【发布时间】:2014-04-05 04:04:37
【问题描述】:

我想将文件从构建后的 Jenkins 工作区传输到远程服务器上的某个位置。构建工作的所有步骤都很顺利,但总是传输 0 个文件。

这是控制台输出:

    Started by user Patrick
    Building in workspace /var/lib/jenkins/jobs/20eyes Build/workspace
    Fetching changes from the remote Git repository
    Fetching upstream changes from https://github.com/project/project.git
    using .gitcredentials to set credentials
    Checking out Revision a758e0f8e534271b999a2fc8696b6fd5a3d5e500 (origin/master)
    executing script:

    cd /var/www/20eyes-web
    [SSH] exit-status: 0
    SSH: Connecting from host [dev1.remotehost]
    SSH: Connecting with configuration [dev2.remotehost] ...
    SSH: Disconnecting configuration [dev2.remotehost] ...
    SSH: Transferred 0 file(s)
    Build step 'Send files or execute commands over SSH' changed build result to  SUCCESS
    Finished: SUCCESS

作业被配置为在任何提交被推送到 GitHub 后构建

转移集是: 源文件:

/var/lib/jenkins/jobs/20eyes Build/workspace/**/*

删除前缀:

/var/lib/jenkins/jobs/20eyes Build/workspace

【问题讨论】:

标签: git ssh jenkins continuous-integration jenkins-plugins


【解决方案1】:

我认为,您的配置有问题。 我们有 2 个位置要配置。

  1. 在系统配置(全局配置)。 --> 如果测试正常 ==> 远程服务器配置正常。
  2. 在您的项目中。 我们将重点关注传输集:(源文件,删除前缀,远程目录)

    2.1 源文件:如果它是空白 = 工作区目录。 在你的情况下,我认为你应该输入**/*
    2.2 删除前缀:更多信息请参考Here
    2.3 远程目录:如果为空=上面系统配置中配置的目录。

希望对您有所帮助! 对不起我的英语。

【讨论】:

  • 这处理了它,特别是 2.1。谢谢!
  • 我正在尝试复制不在我的工作区中的文件(从 /var/www/ 到目标 VM),但我总是得到 SSH: Transferred 0 file(s) 我尝试了 @987654324 的许多变体@ 用于源文件,以 **/ 为前缀,或以 /*、/** 或 /*/** 为后缀……似乎没有任何效果。我做错了什么?
  • @Balmipour 您是否找到了进入当前工作工作区父目录的方法?
  • @Bruno 我刚刚在项目中创建了一个符号链接,它以某种方式“修复”了这个问题,但它又脏又脏。请注意,重命名项目会将 Jenkins 使用的目录更改为不包含链接的新目录。我想要一个更好的解决方案:)
  • @Balmipour 好的,谢谢,符号链接实际上可以工作。是的,这是 hacky 而不是一个顺利的解决方案。我认为插件用例是另一个我们打算使用的用例。
【解决方案2】:

首先要快速尝试:仅使用以下命令设置源文件夹:**/* 以查看是否复制了任何文件。如果文件被复制然后看看这里看看如何写正确的路径here

【讨论】:

    【解决方案3】:

    我的建议:

    1. 您应该避免在 Jenkins 作业名称中使用空格!
      • 在您的情况下:名称20eyes Build 可能会在文件/目录匹配中产生一些麻烦
    2. 您应该使用相对路径而不是绝对路径!
      • 在您的情况下:/var/lib/jenkins/... 应替换为作业工作区的相对路径
    3. 您不应复制整个工作区!
      • 仅指定上次构建中的适当文件(例如目标目录中的 WAR 文件)
    4. 您应该查看Publish Over plugins 的文档和示例

    【讨论】:

    • 感谢您的建议!肯定会修复我的工作以反映您的建议
    【解决方案4】:

    在我的情况下,我在“传输集源文件:”中使用绝对路径(从根目录)。当我更改相对于工作区的路径时,它起作用了!

    【讨论】:

      【解决方案5】:

      sourceFiles 的另一个常见错误

      这不起作用:

      • sourceFiles: '/path/dir/**'
      • sourceFiles: '../dir/**'
      • 甚至sourceFiles: './dir/**'

      虽然这会:

      • sourceFiles: 'dir/**'

      行为解释 in plugin docs: sourceFiles 是一个字符串,以逗号分隔,包含 Ant 文件集 的包含列表,例如。 '**/*.jar'(参见 Ant 手册中的模式)。

      而 Ant 手册中的模式说:

      通常,模式被认为是相对路径,relative 到依赖于任务的基本目录(在 的情况下为 dir 属性)。 考虑在该基本目录下找到的文件。因此,虽然像 ../foo.java 这样的模式是可能的,但应用时它不会匹配任何东西,因为永远不会扫描基目录的父目录中的文件。

      【讨论】:

        【解决方案6】:
        After Appropriated configuring the SSH server/host in: 
        

        管理 Jenkins >> 配置系统 >> SSH 服务器

        Then you can configure the source file in this format **/*.war or **/*.jar as the case may be.
        
        
        The remote directory in this format: //opt//copyfolder
        

        参考下图:

        【讨论】:

          最近更新 更多