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

How to load environment variables in a remote AIX machine through ssh while running script from Jenkin pipeline?

我们在通过 Jenkin 管道运行的 Perl 自动化框架中使用了一些自定义模块。最近我们在 AIX 服务器中执行测试用例时遇到所有自定义模块的包未找到错误,因为那里安装了最新的 Perl 版本。所以我们尝试在文档

中提到的路径中添加 "PERL5LIB"

https://perlmaven.com/how-to-change-inc-to-find-perl-modules-in-non-standard-locations

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

问题:

但是我们有 Jenkin 管道来使用 ssh 在 AIX 服务器中执行脚本。现在,当我们在管道脚本中通过 SSH 连接到 AIX 服务器时,我们在 /etc/profile 中设置的变量不会加载,我们会收到找不到包的错误。

问题:如何在 AIX 服务器中加载配置文件,同时 运行 从管道中加载配置文件?或者有没有其他方法可以处理这个问题。在执行脚本之前,我想通过管道在远程 AIX 服务器中导出 PERL5LIB(仅一次),但我不应该得到找不到包的错误。

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

加载 /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

ssh user@host '. /etc/profile.local; echo $PERL5LIB'
user@hosts's password:
/somepath/from/profile

编辑: 如果一定要执行多条命令,创建一个脚本上传到目标电脑,例如:

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

这已通过以下更改解决。

第 1 步:编辑 ~/.ssh/environment。添加变量 PERL5LIB="/模块的路径/"

第 2 步:编辑 /etc/ssh/sshd_config。将变量 PermitUserEnvironment 从 no 更改为 yes。如果有评论,请取消评论。这将使环境变量能够访问 SSH。

第三步:重启SSHD服务。 (这是小鬼。我之前也尝试过第 1 步和第 2 步,但没有重新启动服务,所以解决方案不起作用)

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