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/SSH: Transferred 0 file(s)
我尝试了 @987654324 的许多变体@ 用于源文件,以 **/ 为前缀,或以 /*、/** 或 /*/** 为后缀……似乎没有任何效果。我做错了什么?首先要快速尝试:仅使用以下命令设置源文件夹:**/* 以查看是否复制了任何文件。如果文件被复制然后看看这里看看如何写正确的路径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 个文件的主要内容,如果未能解决你的问题,请参考以下文章