无法在Jenkins的Execute Shell中使用zsh/bash。

3

我正在尝试在连接为代理的远程Mac mini上运行iOS构建,该代理连接到在Linux服务器上运行的Jenkins主服务器。我已安装所有依赖项并通过.zshrc(zsh是catalina及以上版本的默认shell)设置了环境变量。

当我通过Jenkins Freestyle项目中的Execute Shell选项运行脚本(如npm install、pod install等)时,它会抛出npm command not found/pod command not found错误。即使我在脚本开头使用/bin/zsh进行shebang,也无法正常工作。

是否有一种方法可以将shell切换到zsh/bash或在jenkins构建过程中将所有配置导入sh?


嗨,你使用的用户连接Mac从机时,默认的SHELL是什么?(假设是通过SSH连接) - undefined
zsh(MacOS Catalina的默认shell)通过Java Web Start连接到Slave - undefined
2个回答

2
Jenkins在连接到从机(通过ssh)时利用'rc'文件并加载环境变量(这也意味着当您更改rc文件中的任何内容时,您需要断开并重新连接从机以加载更改)。现在它取决于为连接从机使用的用户设置的默认SHELL。您需要检查并相应地对齐正确的rc文件中的环境变量。
在当前情况下,如果您不想更改任何内容,您也可以执行
source ~/.zshrc

在脚本的开头处加上这一行代码。这将加载在该文件中定义的环境变量。
另一种方法是在节点配置的“节点属性”下设置节点的环境变量。

我在一个通过sh执行的构建脚本中按照你的建议使用了source ~/.zshrc。但是用户的默认shell肯定是zsh(因为作为从机器运行的MacOS Catalina的默认设置)。 - undefined
好的,那我认为更多是关于Jenkins启动哪个shell的问题。如果你将内容移动到.bashrc文件中,它在连接到该从机时肯定会加载它(对于我来说,在Catalina上的Mac机器上也是如此)。这样一来,你就可以摆脱脚本中的source命令,我理解这并不是一个优雅的解决方案。 - undefined
默认情况下,Jenkins使用sh shell启动(至少在我的情况下是这样)。对我来说,.bashrc没有起作用。也许这取决于我们的Jenkins主服务器设置。您的主服务器和从服务器是否在同一台机器上运行? - undefined

1
我已经成功在zsh shell中运行脚本。这是我的解决方案,
sh('''#!/bin/zsh -l
source ${HOME}/.zshrc
pod install
''')

或者

sh script: '''#!/bin/zsh -l
source ${HOME}/.zshrc
pod install
''', label: 'pod install'

你可以根据需要更改为bash。

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