【问题标题】:change Jenkins shell for only one pipeline仅为一个管道更改 Jenkins shell
【发布时间】:2019-02-11 01:01:17
【问题描述】:

如何让 Jenkins 仅对一个 Jenkins 管道/Jenkinsfile 使用 Bash 而不是其原生 shell? “代理”会帮我这样做吗?

我为部署编写了一个 shell 脚本,但其中一些参数包含空格,这会通过丢失一些 args 来混淆我生成的结果命令。我发现如何通过将 Jenkins shell 类型全局配置为 Bash 来避免这个问题。但是,当我更改全局 shell 类型时,我的其他使用 Jenkins docker 插件语法的 Jenkins 管道在使用 docker 容器中的“sh”命令时会被破坏。我的解决方法是根据我要运行的 Jenkins 构建来对 shell 类型的全局设置进行 ping pong。它是皇家 PITA。

【问题讨论】:

  • 您是否考虑过修改您的脚本?
  • 是的!在与 Jenkins 苦苦挣扎之后,我需要继续前进。它适用于 Bash。让我们坚持主题。 :)

标签: bash docker jenkins jenkins-pipeline


【解决方案1】:

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

我的 Jenkinsfile 使用 Jenkins 的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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 2017-03-30
    • 2018-12-24
    • 2018-09-14
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多