在jenkins中将文件从一个目录复制到另一个目录

时间:2016-02-11 23:23:00

标签: jenkins

我正在尝试将测试结果移到公共网页上。

我设置了“构建后动作”> “发布构建任务”来执行脚本。

脚本是:

cp -r /var/lib/jenkins/jobs/instrumentation-tests/htmlreports/HTML_Report/ /var/www/html/test/

Jenkins输出:cp:目录/ var / www / html / test不存在

如果我在运行jenkins的linux机器上以用户jenkins身份登录,我可以导航到源并查看当前有文件。我可以导航到目的地并看到它存在。

另外,我尝试从终端运行该命令作为jenkins用户,并且cp成功完成。

1 个答案:

答案 0 :(得分:3)

正如您在评论中提到的,您的测试结果是在从属计算机上构建期间生成的。因此,您尝试将文件复制到从属服务器上的/var/www,而不是Jenkins主服务器。

有几种不同的方法可以解决这个问题:

  1. 确保在主服务器上进行构建。

    您可以通过在作业配置页面上选择“限制此项目可以运行的位置”,然后在文本字段中输入“master”来执行此操作。

    这可确保您的文件复制在构建结束时起作用,假设Jenkins用户具有写入权限。

  2. 使用Publish over SSH plugin将文件从任何其他计算机直接发布到Jenkins主服务器上的/var/www

    这样做的好处是它可以工作,无论Jenkins构建机器是在哪个构建机构上进行的。

  3. 您还可以将作业分为两部分:一个用于运行测试并生成结果的作业,另一个用于发布测试结果的作业。

    第一个作业可以在任何计算机上运行,​​并使用“归档工件”构建后操作保存生成的HTML文件。然后它将开始第二个工作 - 通过“构建其他工作”后构建操作 - 以进行发布。

    第二个作业可以使用上述任一方法:使用SSH发布,或者确保它在主服务器上运行并使用cp的简单shell步骤。

    在这两种情况下,您都可以使用Copy Artifact plugin从上游版本中复制已归档的HTML文件。