如何让Jenkins仅对一个Jenkins管道/ Jenkinsfile使用Bash而不是其本机 shell ? “代理人”是否可以帮助我做到这一点?

我编写了一个用于部署的Shell脚本,但是其中一些参数包含空格,该空格会使我丢失一些args生成的命令弄乱了。我已经找到了如何通过将Jenkins shell类型全局配置为Bash来避免此问题的方法。但是,当我更改全局 shell 程序类型时,使用Jenkins docker插件语法的其他Jenkins管道在docker容器中使用“sh”命令时会中断。我的解决方法是根据要运行的Jenkins构建对 shell 程序类型的全局设置进行乒乓操作。它是皇家的PITA。

最佳答案

我很尴尬地说我只需要一个shebang即可。

我的Jenkinsfile使用Jenkin的sh command运行自定义(bash)shell脚本,如下所示:

sh "./deploy.sh \"arg1\" \"arg 2\" \"arg3\""

为了强制deploy.sh在Bash中运行,deploy.sh的内容需要在第一行包括#!/bin/bash,如下所示:
#!/bin/bash
echo "deploy args: $@"

无论如何,我认为应该有一种方法可以告诉Jenkins管道它应该以特定设置运行,例如sh = bash。

10-07 18:59
查看更多