如何通过scp插件从Jenkins访问远程主机上的/var/lib/tomcat6/webapps

如何通过scp插件从Jenkins访问远程主机上的/var/lib/tomcat6/webapps,tomcat,jenkins,jenkins-plugins,Tomcat,Jenkins,Jenkins Plugins,我正在使用Jenkins上的scp插件将我的项目的WAR传递给一个远程主机 我会手动将WAR复制到该主机上的用户,然后自己去那里,获取root(sudo)并将WAR复制到/var/lib/tomcat6/webapps,Tomcat会立即在那里部署它 但是,由于用户tomcat6没有可发现的密码,因此我无法找到将tomcat6用作scp用户的方法,因此我无法告诉Jenkins如何在没有键盘交互的情况下执行此操作—使用Jenkins渲染连续部署是无用的 我在Precise服务器上运行Jenkins

我正在使用Jenkins上的scp插件将我的项目的WAR传递给一个远程主机

我会手动将WAR复制到该主机上的用户,然后自己去那里,获取root(sudo)并将WAR复制到/var/lib/tomcat6/webapps,Tomcat会立即在那里部署它

但是,由于用户tomcat6没有可发现的密码,因此我无法找到将tomcat6用作scp用户的方法,因此我无法告诉Jenkins如何在没有键盘交互的情况下执行此操作—使用Jenkins渲染连续部署是无用的

我在Precise服务器上运行Jenkins,部署战争的远程服务器也在运行Precise

感谢所有阅读这个问题的人,也感谢所有能够让我明白实现这个目标的聪明方法的人

以下是Jenkins的相关输出(失败):

BUILD SUCCESSFUL
Total time: 29 seconds
[SCP] Connecting to app-1.site
[SCP] uploading file: '/var/lib/tomcat6/webapps/myapp.war'
ERROR: Failed to upload files
3: Permission denied
    at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2289)
    at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:485)
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:439)
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:406)
    at be.certipost.hudson.plugin.SCPSite.upload(SCPSite.java:239)
    at be.certipost.hudson.plugin.SCPRepositoryPublisher.perform(SCPRepositoryPublisher.java:211)
    at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:36)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:804)
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:776)
    at hudson.model.Build$BuildExecution.post2(Build.java:183)
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:726)
    at hudson.model.Run.execute(Run.java:1600)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:241)
Build step 'Publish artifacts to SCP Repository' changed build result to UNSTABLE
Finished: UNSTABLE
有两种解决方案可以尝试,但我认为两者都不好。在我看来,真正的方法是能够从一开始就将tomcat6作为真正的用户使用。为此,它必须有一个可控制的密码

尝试解决方案

1) 为tomcat6赋予密码。我不知道a)这是否可以做到,b)即使我们尝试也能奏效,或者c)这是否会破坏Tomcat的安装,我现在不想这么做。需要研究

2) Jack/var/lib/tomcat6/webapps上的权限,这样我的用户或我为作业创建的其他用户就可以复制到该路径,并且Tomcat愿意部署复制到该路径的任何内容。在构建过程中,可能需要修改ant对WAR文件的权限。

只需使子目录/var/lib/tomcat6/webapps可写即可

这只需付出最少的努力,我想任何观察此子目录权限的人都不会太惊讶。

只需将子目录/var/lib/tomcat6/webapps设置为可写即可


这只需最少的努力,我想任何观察此子目录权限的人都不会太惊讶。

这也是我的解决方案,但对我来说仍然不起作用。我后来注意到,我试图复制的jar文件已经在目录中,并且我对jar文件没有写权限。所以我也必须对文件做同样的处理。这也是我的解决方案,但对我来说仍然不起作用。我后来注意到,我试图复制的jar文件已经在目录中,并且我对jar文件没有写权限。所以我也必须对文件做同样的处理。
/var/lib/tomcat6 $ chmod a+w webapps