0

我正在使用 Jenkins 上的scp插件将我的项目的 WAR 它新构建到远程主机上。

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

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

我在 Precise 服务器上运行 Jenkins,而要部署 WAR 的远程服务器也在运行 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) 获取/var/lib/tomcat6/webapps上的权限,以便我的用户或我专门为该作业创建的其他用户可以复制到该路径,并且 Tomcat 愿意部署在那里复制的任何内容。在构建期间可能需要从 ant 修改 WAR 文件的权限。

4

1 回答 1

5

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

/var/lib/tomcat6 $ chmod a+w webapps

这只需最少的努力,我认为任何观察该子目录权限的人都不会感到惊讶。

于 2013-05-04T13:23:54.810 回答