博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jenkins执行shell无法读取环境变量问题
阅读量:7005 次
发布时间:2019-06-27

本文共 1379 字,大约阅读时间需要 4 分钟。

hot3.png

在使用jenkins过程中,发现执行shell读取不到/etc/profile以及用户下.bash_profile设置的环境变量。

具体原因 参考 从jenkins远程执行shell源码分析。

在默认的情况下,Jenkins执行shell会在节点上tmp目录生成类似hudson224519953209659762.sh(后面数字根据规则生成),具体执行的命令如:

/bin/sh -xe /tmp/hudson224519953209659762.sh。

如果Execute Shell里面具体命令为以下内容:

#!/bin/bash +x......

那么根据上面代码,具体执行的命令就会变成/bin/bash +x /tmp/hudson224519953209659762.sh

知道jenkins执行shell的原理后,下面了解一下Linux交互式和非交互式shell、登录和非登录shell之间的区别。

1.交互式shell(interactive shell)和非交互式shell(non-interactive shell)

交互式的shell会有一个输入提示符,并且它的标准输入、输出和错误输出都会显示在控制台上。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。

非交互式shell是bash script.sh这类的shell。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。

2.登录式shell(login shell)和非登陆式shell(no-login shell)

需要输入用户名和密码的shell就是登陆式shell。因此通常不管以何种方式登陆机器后用户获得的第一个shell就是login shell。不输入密码的ssh是公钥打通的,某种意义上说也是输入密码的。

非登陆式的就是在登陆后启动bash等,即不是远程登陆到主机这种。

对于常用环境变量设置文件,整理出如下加载情况表:

文件 非交互+登陆式 交互+登陆式 交互+非登陆式 非交互+非登陆式
/etc/profile 加载 加载    
/etc/bashrc 加载 加载    
~/.bash_profile 加载 加载    
~/.bashrc 加载 加载 加载  
BASH_ENV       加载

执行脚本,如bash script.sh是属于non-login + non-interactive

所以jenkins默认情况下/bin/sh -xe /tmp/hudson224519953209659762.sh 是属于non-login + non-interactive

可以通过-i参数和-l参数让bash为login shell and interactive shell,就可以读取/etc/profile和~/.bash_profile等文件。

即在jenkins Execute Shell里可以这么写

#!/bin/bash -ilex...#脚本内容...

对于e参数表示一旦出错,就退出当前的shell,x参数表示可以显示所执行的每一条命令。

转载于:https://my.oschina.net/mrpei123/blog/1821380

你可能感兴趣的文章
架构-到底什么时候该使用MQ【转】
查看>>
split-brain 脑裂问题(Keepalived)
查看>>
清空,再来
查看>>
7.JAVA编程思想笔记隐藏实施过程
查看>>
CentOS7 以下安装Mysql MMM
查看>>
windows系统里Cygwin中如何正确安装wget(图文详解)
查看>>
让你快速了解并掌握如何进行iOS开发技能
查看>>
html绘制三角形(兼容IE6)
查看>>
Maven安装好后包下载的测试命令和配置变量的查看命令:mvn help:system
查看>>
Spring知识点回顾(01)Java Config
查看>>
Git合并指定文件到另一个分支
查看>>
图解内存的工作原理
查看>>
[Oracle]发生 ora-06502 RMAN 在对 catalog DB 同期时出错的调查方法
查看>>
PHP content-type为"application/json"的post过来的数据$_POST接受不到的问题
查看>>
spring security 4.2后出现CouldnotverifytheprovidedCSRFtokenbecauseyoursessionwasnotfound
查看>>
浅谈HTTPS以及Fiddler抓取HTTPS协议
查看>>
Hadoop使用Java进行文件修改删除操作
查看>>
奇虎360Java笔试题
查看>>
git常用命令速查表【转】
查看>>
[转]Python yield 使用浅析
查看>>