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

问题描述 投票:0回答:7

我想将文件从构建后的 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
7个回答
30
投票

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

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

    2.1 源文件:如果为空=工作空间目录。 在你的情况下,我认为你应该输入

    **/*

    2.2 删除前缀:请参阅这里了解更多信息。
    2.3 远程目录:如果为空=上面系统配置中配置的目录。

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


10
投票

首先尝试的快速操作:仅使用 **/* 设置源文件夹以查看是否复制了任何文件。如果文件被复制,请查看此处,了解如何编写正确的路径here


5
投票

我的建议:

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

1
投票

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


0
投票

另一个常见错误

sourceFiles

这行不通:

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

虽然这会:

  • sourceFiles: 'dir/**'

行为解释在插件文档中:

sourceFiles
是一个字符串,逗号分隔的包含列表,用于 Ant 文件集,例如。 '**/*.jar'(请参阅 Ant 手册中的模式)。

Ant 手册中的模式说:

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


0
投票
管理 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
请参考下图:


0
投票

确保您的路径不以“/”开头

© www.soinside.com 2019 - 2024. All rights reserved.