我应该如何改进我的perl应用程序部署过程



我开发并维护了一个由50多个脚本组成的生物信息学应用套件,其部署过程一团糟:

  • 整个套件位于一个大型git存储库中。它有很多CPAN依赖项,还有几十个内部模块
  • 开发平台为Linux
  • 部署平台包括Windows(20多名用户)、Mac(10多名用户)和Linux(2-3名用户)。大多数人都不是"超级用户"
  • 对于windows,我有一个安装程序(使用NSIS制作)用于草莓perl+所需模块(即,我在windows盒子上安装了草莓,安装了所有模块并压缩了c:\strawberry),还有一个用于套件的安装程序——我这样做了b/c,套件的更新比所需模块的列表多得多
  • 对于Mac,我将perl5.14、所有必需的cpan模块和应用程序套件捆绑到一个可双击的安装程序中。我不使用perl b/c系统,它往往已经过时了。我把所有东西都捆在一起,不像在windows上那样
  • 对于Linux,我手动处理它们的安装,因为它们只有几个,而且它们使用不同的发行版

这显然是一个混乱,在几代开发人员中有机地发展起来。理想情况下,我想从内部库和各种相关脚本组中创建cpan可安装的分发版,并使用模块依赖关系让cpan为我安装它们。

但我不确定最好的方法是什么,b/c我仍然需要分发perl本身,必须为CPAN编写某种非命令行接口,控制第三方CPAN模块的确切版本,默认情况下将其指向我的"DarkPan",我将在那里存储模块,我将如何推送更新等。

我不认为我可以使用PerlApp或Par,因为它们是用来捆绑单个脚本的,而不是一整套脚本。

非常感谢任何建议。

除了上面提到的3个平台(如果算上Linux变体的话,还有更多),您还真的遇到了几个不同的问题:

  1. 部署一个已知良好的标准Perl可执行文件和库(CPAN模块)
  2. Perl脚本和模块的部署

从前,我支持大型Solaris Perl安装。有一段时间,我尝试"并排"安装Linux Perl,重新使用相同的CPAN模块。没用。对我来说,最大的问题是相当多的Perl模块需要编译,这意味着它们针对特定的平台。我最终只安装了2个,并且总是记得在这两个区域都安装一个新的CPAN模块。

我们现在是100%Windows,所以我没有同样的问题。然而,我们确实在共享网络驱动器上运行Perl。所有用户都映射这个驱动器,并运行一个注册表脚本,该脚本将.PL文件与Perl的网络安装关联起来。(请参阅我对另一个Perl问题的回答。)

因此,除了映射驱动器和注册表脚本之外,用户不需要安装任何东西。甚至CPAN模块都是从网络中获取的。这解决了项目#1(仅适用于Windows用户)。

第2项也是如此:脚本存储在网络驱动器(同一个)上,用户运行另一个Registry脚本,将脚本文件夹包含在他们的搜索PATH中。我们在一个区域中编辑我们的脚本,并有一个"签入发布"("CINR"),我们使用它来将脚本签入和发布到用户指向的区域。用户可以在Explorer中双击脚本,在DOS中运行它们,甚至更好的是将它们包含在Explorer的上下文菜单中,等等。(实际上,我们使用.NET应用程序来映射驱动器,并为用户进行所有这些设置,但可以做得简单得多。)


那么,这对其他平台(Linux和Mac)有什么帮助呢?正如我在Solaris/Linux实验中遇到的那样,我认为您在所有3个平台上都安装了不同的Perl,尽管您应该能够为Perl脚本和模块访问相同的网络驱动器。

对于Linux用户来说,在网络驱动器上安装Perl可能还可以。这对他们来说可能比Windows用户更容易。Mac用户很强硬。我管理一个家庭Mac网络,我认为与其他操作系统相比,网络驱动器在Mac OS X中很难做到。这应该和Linux中一样容易,因为很多东西都是一样的,但(对我来说)映射NFS和SMB驱动器会出现非常奇怪的问题。AFP驱动器对用户来说手动映射稍微容易一些,但编程映射就不那么容易了。

我的Mac建议是尝试使用Platypus。它非常擅长将脚本绑定到可双击的应用程序中,尽管您的界面选项仅限于输出(我可以告诉您,在执行过程中不允许用户输入)。不确定你是否可以把整个Perl安装到Platypus应用程序中,但如果你能找到路径,你可能会

祝你好运!

您可能希望查看CAVA包装商。它可以在一个包中处理多个脚本。

相关内容

最新更新