我该如何改进我的Perl应用程序部署流程?

11

我开发并维护一个生物信息学应用程序套件,包含50多个脚本,但是其部署过程混乱不堪:

  • 整个套件在一个大的git存储库中。它有很多CPAN依赖项和几十个内部模块。
  • 开发平台为Linux。
  • 部署平台为Windows(20+用户)、Mac(10+)和Linux(2-3)。其中大多数用户都不是'power user'。
  • 对于Windows,我有一个安装程序(使用NSIS制作),用于安装strawberry perl和所需的模块(即我在Windows机器上安装了strawberry,并安装了所有模块,然后压缩c:\strawberry),还有另一个安装程序,用于安装整个套件——我这样做是因为套件要比所需模块更新得多。
  • 对于Mac,我将perl 5.14、所有必需的cpan模块和应用程序套件打包到一个可双击的安装程序中。我不使用系统perl,因为它通常过时。我将所有内容一起捆绑在一起,与Windows不同,因为我不擅长Mac。
  • 对于Linux,我手动处理他们的安装,因为他们只有少量用户,而且使用不同的发行版。

这明显是一个在几代开发人员之间有机生长而成的混乱。理想情况下,我想创建可通过cpan安装的内部库以及各个相关脚本组的分发,并使用模块依赖关系让cpan为我安装它们。

但我不确定最佳方法是什么,因为我仍然需要分发perl本身,必须编写某种非命令行界面来控制第三方CPAN模块的确切版本,将其默认指向我的“DarkPan”(存储我们的模块)以及如何推送更新等等。

我认为我不能使用PerlApp或Par,因为据我所知,它们用于打包单个脚本,而不是整个套件。

非常感谢任何建议。

2个回答

2
除了提到的三个平台(如果计算Linux变体,还有更多),您确实有几个不同的问题:
  1. 部署一个标准的已知良好的Perl可执行文件和库(CPAN模块)。
  2. 部署您的Perl脚本和模块。
曾经,我支持过一个大型的Solaris Perl安装。我尝试过在同一台机器上同时运行Linux Perl安装,重用相同的CPAN模块。但是没有成功。对我来说最大的问题是相当多的Perl模块需要编译,这意味着它们针对特定平台。最终我只安装了两个版本,并且总是记得在两个地方安装新的CPAN模块。
现在我们完全使用Windows,所以我没有同样的问题。然而,我们从共享网络驱动器上运行Perl。所有用户都映射此驱动器,并运行注册表脚本将 .PL 文件与Perl的网络安装相关联。(请参见我的 另一个Perl问题 的答案。)
所以,除了映射的驱动器和注册表脚本外,用户不需要安装任何东西。甚至CPAN模块也是从网络中获取的。这解决了问题#1(仅适用于Windows用户)。
对于问题#2,同样适用:脚本存储在一个网络驱动器上(相同的驱动器),用户运行另一个注册表脚本来将脚本文件夹包含在其搜索路径中。我们在一个区域编辑脚本,并使用“Check-In 'n Release”(“CINR”)将脚本发布到用户指向的区域。用户可以在资源管理器中双击脚本,在DOS中运行它们,或者更好的是在资源管理器中包含它们的上下文菜单等。(实际上,我们使用一个.NET应用程序来映射驱动器并为用户进行所有这些设置,但可以更简单地完成。)
那么,这对于其他平台,如Linux和Mac有何帮助呢?就像我在我的Solaris/Linux实验中遇到的问题一样,我认为你需要为所有三个平台安装不同的Perl程序,尽管你应该能够为你的Perl脚本和模块访问相同的网络驱动器。
对于Linux用户来说,在网络驱动器上安装Perl程序甚至可能是可以的。这对他们来说可能比Windows用户更容易。Mac用户则比较困难。我管理着一个家用Mac网络,我认为与其他操作系统相比,在Mac OS X中使用网络驱动器非常困难。尽管很多东西都是相同的,它应该像在Linux中一样简单,但我遇到了非常奇怪的问题(对我来说)映射NFS和SMB驱动器。AFP驱动器对用户手动映射来说稍微容易一些,但编程映射就不太容易了。
我的Mac建议是尝试使用Platypus。它绝对很擅长将脚本打包成双击可执行的应用程序,尽管你的接口选项仅限于输出(我没有发现在执行过程中允许用户输入)。不确定是否可以将整个Perl安装放入Platypus应用程序中,但如果你能找到路径,你可能能够做到。
祝你好运!

抱歉,我应该表述得更清楚一些...我的脚本的许多“用户”来自不同的组织,我无法直接控制计算机(尽管大约一半也在我所在的建筑物内)。不过,Platypus看起来很有前途。编辑:仔细想想,即使只有一半的用户,如果我不必担心特定于机器的安装问题,这可能是值得的... - user1481
你的用户很可能对运行你的脚本感兴趣。换句话说,他们想要运行它们,而不是被迫做一些他们宁愿跳过的事情。对于我全球200个用户来说,他们想要运行它们,所以他们愿意运行设置脚本来映射所需的驱动器,关联.PL文件等等。如果这不是这些人需要或想要运行的东西,让他们通过这个额外的设置可能会更加困难!但是,一些设置脚本和Perl、CPAN模块以及你的自定义脚本和模块的网络安装是一个不错的开始。 - jimtut

0
您可能希望查看CAVA打包工具。它可以处理单个软件包中的多个脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接