Perl 从Jenkin管道运行脚本时,如何通过ssh在远程AIX机器中加载环境变量?

Perl 从Jenkin管道运行脚本时,如何通过ssh在远程AIX机器中加载环境变量?,perl,ssh,jenkins-pipeline,aix,jenkins-groovy,Perl,Ssh,Jenkins Pipeline,Aix,Jenkins Groovy,我们在通过Jenkin管道运行的Perl自动化框架中使用了一些自定义模块。最近,我们在AIX服务器中执行测试用例时发现了所有自定义模块的PackageNotFound错误,因为安装了最新的Perl版本。所以我们尝试在路径中添加“PERL5LIB”,如文档中所述 我们在AIX服务器的/etc/profile中添加了“export PERL5LIB=/home/foobar/code”,在本地AIX机器上运行时,脚本执行起来没有任何问题 问题: 但是我们有Jenkin管道来使用ssh在AIX服务器

我们在通过Jenkin管道运行的Perl自动化框架中使用了一些自定义模块。最近,我们在AIX服务器中执行测试用例时发现了所有自定义模块的PackageNotFound错误,因为安装了最新的Perl版本。所以我们尝试在路径中添加“PERL5LIB”,如文档中所述

我们在AIX服务器的/etc/profile中添加了“export PERL5LIB=/home/foobar/code”,在本地AIX机器上运行时,脚本执行起来没有任何问题

问题:

但是我们有Jenkin管道来使用ssh在AIX服务器中执行脚本。现在,当我们在管道脚本中对AIX服务器执行SSH时,我们在/etc/profile中设置的变量没有加载,我们得到的包未找到错误

问题:从管道运行配置文件时,如何在AIX服务器中加载配置文件?或者有没有其他方法来处理这个问题。在执行脚本之前,我希望通过管道(仅一次)导出远程AIX服务器中的PERL5LIB,并且不应获取包NotFound错误

以下是我尝试过的解决方案:

加载/etc/profile:ssh AIX服务器/etc/profile(使用点,因为源代码在AIX中不工作)

在AIX服务器的.ssh/environment中添加此行“export PERL5LIB=/home/foobar/code”,并将PermitUserEnviorment设置为yes


谢谢你在这方面的帮助

以通常的方式为变量赋值:

ssh user@host 'export PERL5LIB=/somepath; echo $PERL5LIB'
user@hosts's password:
/somepath

编辑: 如果必须执行多个命令,请创建脚本并将其上载到目标计算机,例如:

SCRIPTNAME=/tmp/$$.$RANDOM.script
scp myscript.sh user@host:"$SCRIPTNAME"
ssh user@host "$SCRIPTNAME"

通过以下更改解决了这一问题

步骤1:编辑~/.ssh/environment。添加变量PERL5LIB=“/path of the module/”

步骤2:编辑/etc/ssh/sshd\u配置。将变量PermitUserEnvironment从“否”更改为“是”。如果有注释,请取消注释。这将允许对SSH访问环境变量

步骤3:重新启动SSHD服务。(这是imp。我以前也尝试过步骤1和步骤2,但没有重新启动服务,因此解决方案不起作用)


在从管道执行自动化测试之前,我们可以创建一个脚本并运行它

这是与脚本一起安装的模块吗?如果是这样,PERL5LIB无论如何也不是最好的解决方案<代码>在qw中使用FindBin($RealBin);使用lib$RealLib(或者使用lib“$RealLib/。/lib”;`或任何合适的方法)会更有意义,并完全避免您的问题。Hi@ikegami。谢谢你的回复。我们已经尝试使用FindBin qw($RealBin);使用lib$RealLib;它工作得很好,但问题是我们有400-500个perl文件使用这些模块。因此,PERL5LIB将是一个简单的解决方案。如果有一种编程语言可以用来轻松地在文本文件的开头添加一行。。。(
find.-name'*.pl'-exec perl-pe's/^(?=use strict)/use lib qw(\$RealBin);\n/'-i~{}+
)Hello@Lorinczy Zsigmond。谢谢你的回复。谢谢。这个解决方案也可以工作,但是我们需要在每个ssh命令中添加这个。在我们的管道脚本中,我们在通过ssh连接的远程AIX服务器中执行大约20-30个Perl文件。有没有办法在脚本开始时只导出一次PERL5LIB,并且它应该在整个执行过程中保持不变?
SCRIPTNAME=/tmp/$$.$RANDOM.script
scp myscript.sh user@host:"$SCRIPTNAME"
ssh user@host "$SCRIPTNAME"