在 Linux 中使用 Jenkins 时, 在 jenkinsFile 中添加了 sh 'mvn --version'
命令, 但 Jenkins 在 build 时报错如下:
> git rev-list --no-walk 75df912a72c7971f61d5c48b80b05bdc1243f86d # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {[Pipeline] stage
[Pipeline] {(build)
[Pipeline] sh
+ mvn --version
/var/lib/jenkins/workspace/SpringbootDeployment_master@tmp/durable-65e0b685/script.sh: line 1: mvn: command not found
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
GitHub has been notified of this commit’s build result
ERROR: script returned exit code 127
Finished: FAILURE
仔细查了一下, 发现了问题的原因. 我对于 java 或 maven 的路径的环境变量是放在 /etc/profile 中的, 而 /etc/profile 只有在用户登录的时候才会被 load,Jenkins 在运行命令时, 使用的是 Non-login 的方式, 而这种方式在运行命令时,/etc/profile 是不会被 load 进来的, 所以 jenkins 只能在当前路径下寻找可执行文件.
解决方式:
在 Jenkins 的设置中可以设置全局变量, jenkins 主页面 ->Manage Jenkins->Configure System->Global Properties 中, 将 Environment variables 复选框选中, 会出来 List of variables, 填入以下内容:
- name: JAVA_HOME value:XXX
- name: M2_HOME value:/usr/cyz/apache-maven-3.6.1
- name:
PATH+EXTRA
value: $M2_HOME/bin
注意最后标红的 PATH+EXTRA
, 这表示 PATH=EXTRA:$PATH, 即扩展当前的 PATH 变量.
设置之后 build 成功.