一、问题场景
1.本地构建与Jenkins构建的差异
- 在本地执行脚本时一切正常,但在Jenkinsfile中调用该脚本时会导致构建失败。
2.脚本中source的环境变量在Jenkins构建时报错
- 日志中无法直接看出是因为
source
命令没有生效,因为source
命令本身并没有返回值,但会导致依赖这些环境变量的后续执行结果报错。
3.尝试的解决方式及其局限性
- 尝试将
"source build/encsetup.sh"
修改为". build/encsetup.sh"
或"./build/encsetup.sh"
,但这只能在局部脚本中生效,不能解决Jenkins构建失败的问题。
二、解决方案
1.确认sh脚本的头行
- 确认脚本文件的首行是否为
#!/bin/bash
。由于服务器本身是shell环境,即使脚本没有头行的bash也能正常构建,但在Jenkinsfile中调用时,如果没有#!/bin/bash
,Jenkins可能无法识别source
命令导致构建失败。
三、衍生问题的处理思路
-Jenkinsfile中使用source命令
- 如果在Jenkinsfile中需要使用
source
命令来执行环境变量设置,也需要在对应的stage中添加#!/bin/bash
命令,以确保source
命令能够正确生效。否则,即使脚本中包含source
命令,也可能因为环境解释器的差异而导致命令不生效。