Jenkins 使用 SSH 插件发布传输 0 个文件

Posted

技术标签:

【中文标题】Jenkins 使用 SSH 插件发布传输 0 个文件【英文标题】:Jenkins transferring 0 files using publish over SSH plugin 【发布时间】: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

【问题讨论】:

去那里你会找到答案***.com/a/48842747/8327498 【参考方案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】:

我的建议:

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

【讨论】:

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

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

【讨论】:

【参考方案5】:

sourceFiles 的另一个常见错误

这不起作用:

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

虽然这会:

sourceFiles: 'dir/**'

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

而 Ant 手册中的模式说:

http://ant.apache.org/manual/dirtasks.html#patterns

通常,模式被认为是相对路径,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

参考下图:

【讨论】:

以上是关于Jenkins 使用 SSH 插件发布传输 0 个文件的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins 通过 SSH 发布无法更改到远程目录

jenkins 构建后传输文件到服务器

Jenkins SSH 插件/SSH 代理插件:异常:超时:未建立套接字

Jenkins - 通过 SSH 插件发布:如何复制目录

解决SSH: Transferred 0 file(s)

如何为 jenkins git 插件指定 ssh 密钥