本周,我受命创建一个包含以下组件的开发基础结构:
我又添加了2个组件:
- 为了将来自每个应用程序的数据存储在同一数据存储中的数据库
- LDAP,以便在每个应用程序中使用相同的凭据进行身份验证
由于没有服务器,因此必须在开发机器上安装基础架构,即Windows和1 Gb RAM。 以下是我本周的个人反馈。
颠覆
Subversion表示Apache HTTP Server 。 由于我已经安装了几次Apache,因此再安装一次(并对其进行配置)变得轻而易举。 我真的很喜欢这个软件。
同样,一旦获得Subversion安装程序,即可在不到1小时的时间内完成安装并配置基础Apache实例。
Trac
有趣的来了。 Trac是我自己无法做出的选择(直到本周我才知道该产品)。 这个选择是从Trac的功能中做出的。 我们几乎不知道Trac是在Python上运行的。
我(和我的公司)没有Python技能,所以请不要因为这个而取笑我。
我安装了Python,然后将Apache配置为使用它。 那是容易的部分。
第一课,Trac不能在最新的Python(v3.2)上运行。 我了解到这很困难。
第二课,Trac需要一整套组件连接器:
- 由于Trac可以显示您的Subversion存储库,因此它需要与Subversion通信。 它是通过Python完成的,因此出现了Python svn绑定。 而且,如果您安装了与Trac兼容的Python v2.6,那就太糟糕了,因为绑定仅适用于Python 2.5
- Trac 开箱即用地使用SQLLite (我第一次听说这一点,开始感到自己是个白痴)来存储其数据。 由于所有其他应用程序都可以在MySQL上运行,而我碰巧对MySQL有所了解,因此我希望Trac使用MySQL(这是一个逻辑步骤)。 毫不奇怪,Python需要驱动程序来使用MySQL,就像Java中一样。 这是通过MySQL Python完成的。 与Java完全不同,驱动程序不会放在正在运行的应用程序的类路径中,而是安装在Python发行版中。 尽管Trac支持,但不支持Python 2.6+。 生活很有趣。
- Trac需要一个名为setuptools的安装组件来管理Python鸡蛋(Python扩展的特定格式)。
- Trac使用模板引擎。 Trac的0.10版本需要ClearSilver,0.11版本需要元史 。 由于我使用Trac v0.11并完全忘记安装Genshi,因此它抱怨...找不到ClearSilver。 感谢您提供的误导性错误消息,我损失了大约1个小时。
第三课:为了使用Eclipse Mylyn (一个设法连接到bugtracker并在Eclipse中显示问题的Eclipse 插件 ),Trac需要安装XML-RPC插件 。 使用以前安装的setuptools,它仅需要命令行指令。
第四课,项目与环境相关。 使用命令行工具创建环境,然后在Apache中进行配置。
第五课,尽管存在用于修改代码的补丁,但无法创建子项目。
哈德森
哈德森分为两种口味:
- Hudson独立作为Java Web Start安装程序
- 战争档案
即使我只能猜测底层的复杂性,独立程序也可以很好地运行。 可以将其配置为作为Windows服务运行。 我很惊讶:这太好了,难以置信。 我最敬重开发团队。 最后,我卸载了Hudson(同样简单),因为...
我将必须运行3个Java应用程序:Hudson,Sonar和Nexus。 如果每个都以独立模式运行,则意味着3个JVM同时运行,并且我绑定到了我笨拙的1Gb RAM。 由于这些应用程序均以WAR归档文件的形式提供,因此最好使用轻量级服务器,例如Tomcat(或Jetty)。 由于自从黎明开始就使用Tomcat,并且因为我看到Jetty更像是嵌入式容器,所以我安装了Tomcat(即使是初次使用的用户,这也是禁止操作的)。
在Tomcat中部署Hudson很容易。 只是不要忘记使用-DHUDSON_HOME
Java属性来配置Tomcat的JVM。 这告诉Hudson使用此文件夹存储其文件(运行,构建等)。
声纳
声纳很容易在Tomcat中部署。 我将其配置为使用MySQL,一切正常。 我对Sonar的唯一评论是它存储在超过45 Mb的档案中。 我向开发团队提到了这一点:将来的版本中可能会限制它。
Nexus / Artifactory
我想差不多完成了,然后继续部署Nexus。 在Tomcat中部署Nexus战争进展顺利。 配置Nexus没有。 我找不到关于不以独立模式运行的Nexus的文档,即使可以战争格式下载。 由于在Track上浪费了太多时间,我决定改用Artifactory 。 我已经在客户的站点上安装了该Maven存储库,它使我完全满意。
只是不要忘记使用-artifactory.home
Java属性来配置Tomcat的JVM。 这告诉Artifactory使用此文件夹存储其内部文件。
但是,尝试使用MySQL而不是JavaDB时遇到错误。 无论我使用什么配置,Artifactory都无法使用我提供给MySQL的密码:我一直Access denied for user 'artifactory'@'localhost' (using password: NO)
消息Access denied for user 'artifactory'@'localhost' (using password: NO)
。 花了相当多的时间尝试纠正问题之后,我回到了使用JavaDB的过程。 由于Artifactory提供了开箱即用的存储库备份功能,因此我可以使用它。
最终,在Artifactory启动并运行后,我不断OutOfMemoryError: PermGenSpace
错误。 Tomcat使用的是512Mb(对于3个重要应用程序来说这确实是一个很小的价值),但它对永久生成空间没有影响。 我尝试了不同的-XX:MaxPermSize
配置,但没有任何运气。 因此,我大胆地从Sun JVM切换到JRockit 。 从那时起,尽管我的垃圾回收时间非常长,但我再也没有出现过此类错误。 再多一点的RAM和正确的调校方法都无法解决。
OpenDS的
结论
翻译自: https://blog.frankel.ch/development-infrastructure-a-personal-experience/