问题 如何在OS X上安装Hudson作为服务?


运行 哈德森 它很简单,但目前文档中缺少在OS X上安装正在运行的hudson作为守护程序/服务的教程。

切换到生产时,您需要确保正确配置和保护。

要求:

  • 能够在端口80上运行它
  • 不以root身份运行(或者至少不以root身份运行作业)
  • 确保它在系统重启时正确启动/停止
  • 启用自动升级,直接从Web界面运行。

最好的,是有一个安装脚本,下载最新的哈德森并安装它。

我们将整合Hudson wiki的最佳答案。

资源:


7371
2017-09-15 07:43


起源

我认为这真的属于Serverfault或超级用户......我说我计划关注这个问题:-) - prodigitalson
我希望您不是那些认为配置持续集成服务器是IT任务的人之一。如果我们将它移动到其中一个服务器,我们就会将其删除。 - sorin
这可能有所帮助 stackoverflow.com/questions/1157844/... 一旦Tomcat运行,Hudson就可以正常运行。如果您想重用现有的Apache安装并将Hudson添加到其中,请执行此操作 tomcat.apache.org/connectors-doc/webserver_howto/apache.html 可能会有所帮助。 - sal
我同意sal,将其部署到应用服务器,大部分要点都已解决。我也同意prodigitals,设置和保护Hudson服务器是IT的一部分,配置和使用是用户的任务(在这种情况下是开发人员或部署者或QA)。 - Peter Schuetze


答案:


如果您希望在登录时在Mac上运行本地Hudson,请尝试此操作。

你需要为它设置一个launchctl plist;应该看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>UserName</key>
 <string>yourid</string>
 <key>Label</key>
 <string>Hudson</string>
 <key>EnvironmentVariables</key>
   <dict>
     <key>HUDSON_HOME</key>
     <string>/Users/yourid/.hudson</string>
   </dict>
 <key>ProgramArguments</key>
 <array>
 <string>/usr/bin/java</string>
 <string>-jar</string>
 <string>/Users/yourid/Hudson/hudson.war</string>
 </array>
 <key>RunAtLoad</key>
 <true/>
</dict>
</plist>

假设您已下载 hudson.war 到你的主目录下 ~/Hudson,并且你想自己运行它(可能是最好的决定。)确保你定义 <UserName> 键或它将以root身份运行!

从登录开始

  1. 将上面保存为 /Library/LaunchAgents/hudson.plist
  2. 第一次启动它

    sudo launchctl load -w /Library/LaunchAgents/hudson.plist

或者退出并重新登录,这将自动执行相同的操作。

从重启开始

  1. 将上面保存为 /Library/LaunchDaemons/hudson.plist 
  2. 第一次启动它

    sudo launchctl load -w /Library/LaunchDaemons/hudson.plist

或重新启动您的机器,这将自动执行相同的操作。

重启哈德森

Hudson无法在OS X下自动重启,因此如果需要停止它,请发出restart命令

launchctl unload -w path_to_plist

我发现有时它不会在第一次执行时停止 launchctl unload;在这些情况下,只需再次发出命令。

这将在端口8080下运行,就像您自己使用内置的Winstone服务器从命令行运行命令一样 .war 文件。

我意识到这并没有具体回答“在端口80上运行它”的问题,但是对于你自己的笔记本电脑上的开发,我建议这是一个更好的选择。


12
2017-09-22 02:25



感谢您的努力,但这种方法并没有解决几个要求:包括从系统重启(不登录!),端口80,...开始... - sorin
/ Library目录中的LaunchAgent在系统启动时启动。要在端口80上运行,请参阅winstone命令行选项: winstone.sourceforge.net/#commandLine - jdkoftinoff
@jdkoftinoff你的意思是LaunchDaemons,而不是LaunchAgents @ Sorin-Sbarnea然后它满足你的所有要求 - James
更好的方法(如上面提到的詹姆斯)是要取代 LaunchAgents 同 LaunchDaemons。这将以root身份在系统引导时运行服务,而不是要求您在用户下登录并运行它。 - Gili


正确的解决方案是在tomcat中安装hudson并使tomcat作为守护进程运行

这也将满足安全要求,并允许您轻松升级哈德森。

以下是OS X 10.6的完整指南: https://serverfault.com/questions/183496/full-guide-for-installing-tomcat-on-os-x/183527#183527


2
2017-09-23 14:16



顺便说一下,一段时间后我决定用Ubuntu替换OS X作为服务器。它更容易维护。 - sorin
在Tomcat中部署更难,并且不允许自动升级。唯一可能的优势是它更安全,但大多数构建机器都是内部开始的,因此没有真正的安全风险。 - Gili


我有一个小小的解决方案(也是在登录时开始)是这样的: 首先手动运行一次hudson(所以它构建它的.hudson目录)。 创建一个 hudson.command 在OSX中的某台机器上安装文件,内容有点像这样:

nohup java -jar .hudson/hudson.war --httpPort=8080 &

然后,打开系统首选项,选择您的用户,然后选择登录项。单击“+”按钮,您将能够使用finder选择命令。

下次登录时,hudson将启动。

缺点:

  • Hudson没有特定的用户 - 只有你
  • 哈德森在8080港口
  • Hudson重启意味着找到进程,杀死它并再次启动hudson.command文件。
  • 只有用户登录后,Hudson才会启动。

2
2017-12-18 14:45



我相信你的意思是说“创建一个hudson.command文件”,而不是文件夹。 - Josh Brown
绝对正确。可能在没有咖啡因的情况下运作。 - Danny Staple