詹金斯用的是什么外壳?

在调用 shell命令时,Jenkins 中使用的是什么 shell? 我在 Linux 机器上运行 Jenkins。

87011 次浏览

我尝试通过在 Jenkins 构建中添加以下 shell 命令来打印 env。

env

输出显示,对于我的实例,SHELL 被设置为 tcsh

来自“ Execute Shell”部分的帮助/问号图标:

运行一个 shell 脚本(默认为 sh,但是这是可配置的) 建造这个项目。

如果你去管理 Jenkins —— > 配置系统,你会发现一个选项(称为“ Shell 可执行文件”)设置名称或绝对路径的 Shell,你希望你的 Shell 脚本使用..。

对于不配置此选项的系统... 它使用 bash!

只需像在任何 shell 脚本文件中那样,在脚本的第一行声明 shell:

#!/bin/bash

可以使用 Jenkins > Manage Jenkins > ConfigureSystem > Shell 可执行文件设置默认 shell。

对于使用不同于默认 shell 的作业,以一个 shebang 开始 执行 shell构建步骤,例如:

#!/usr/bin/tcsh -e -x


command1
command2
...

你甚至可以使用 /usr/bin/env来使用,比如 Python:

#!/usr/bin/env python3

注意,在 #!之后不允许有空格 :

#! /usr/bin/tcsh    # Wrong

这样就会出现错误,

java.io.IOException: Cannot run program ""

我在 Jenkins 1.625.3上测试了以上内容

詹金斯默认在 PATH环境变量中查找 sh,但结果(例如 /bin/sh)可能指向不同的外壳。例如,在 Ubuntu 6.10或更高版本中,/bin/sh是到 Dash 的符号链接。

因此,对于“ Jenkins 使用的是什么 shell...”这个问题,要视情况而定。为了避免不确定性,您可以: (以 Bash 为例)

  1. 在 Manage Jenkins > ConfigureSystem > Shell > Shell 可执行文件中显式配置 Shell 可执行文件,例如 /bin/bash(系统范围的配置)
  2. 使用 shebang 行来指定应该使用的解释器,例如,#!/usr/bin/env bash(特定于一个作业)