jenkins中遇到的一些坑

上篇文章罗列了jenkins持续集成的步骤,其中踩到了不少坑,在本篇里记录下,希望能给大家一些解决问题的思路。

1.构建时,从github拉取代码失败:

jenkins中遇到的一些坑

 报错部分代码如下:

ERROR: Timeout after 10 minutes
ERROR: Error cloning remote repo ‘origin‘
hudson.plugins.git.GitException: Command "/usr/local/git/bin/git fetch --tags --progress -- :May-Fan/AutoApiTestDemo.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout: 
stderr: Warning: Permanently added the RSA host key for IP address ‘13.229.188.59‘ to the list of known hosts.
remote: Enumerating objects: 581, done.

遇到这个问题,百度过后解决方案如下:

1.检查ssh key是否配置正确。配置方法上一篇中有讲过,必须将公钥复制到github,私钥复制到jenkins。如果不确定,可以进入项目->配置->源码管理:

jenkins中遇到的一些坑

   看看这个地方会不会报错。我为了演示错误的截图,在github的url后面添加了~,因此报的是无效的仓库地址。具体需要结合报错的信息来看。如果不报错,那ssh key配置无误了;

2.查看服务器是否安装了git。同样也是在上图的位置,如果git未安装,会提示git运行出错,验证的办法是在服务器输入git --version指令;

3.如果上图中的配置已经不再报错,项目构建时仍然报错,需要进入对应项目->工作空间->清理工作空间,然后重新构建;

4.当经历了1,2,3之后,构建时仍然会报错,需要考虑是否因为项目内容过多,git加载超时报错的情况。如下图,进入项目配置,勾选浅克隆,只拉取最新版本的代码,可以大大减少构建时间,并将超时的时间从原来默认的10修改为60,重新构建。这样git部分的指令就不会再报错了。

jenkins中遇到的一些坑

2.jenkins无法识别mvn指令

jenkins中遇到的一些坑

具体报错信息如下:

+ mvn clean package
/tmp/jenkins4746628215257020380.sh: line 9: mvn: command not found
Build step ‘Execute shell‘ marked build as failure
Finished: FAILURE

解决的思路如下:1.确认服务器中是否安装了maven;2.确认shell中是否加载了配置文件。

maven确认安装,而我的shell脚本当中,第一行source /etc/profile也已经加载了配置文件:

source /etc/profile
pid=$(ps x | grep api-1.0-SNAPSHOT.jar | grep -v grep | awk ‘{print $1}‘)
if "[-n ‘$pid‘]" ; then
kill -9 $pid
fi

cd api
mvn clean package //这行的mvn指令报错了
cd target
pwd
BUILD_ID=dontKillMe
nohup java -jar api-1.0-SNAPSHOT.jar &

这是因为:jenkins默认情况下执行shell脚本是使用非登录方式,执行shell脚本时不会去加载/etc/profile。

找到原因后,参考了很多网上的解决方法,比如在shell脚本前添加#!/bin/sh -l,又或者在jenkins中配置全局的maven变量,又或者将maven的文件夹的拥有者和所在组都递归赋给jenkins用户,都没有解决我的问题。最终我使用了最简单粗暴的方式,将上面报错的mvn命令,直接替换成服务器上which mvn得到的绝对路径:

source /etc/profile
pid=$(ps x | grep api-1.0-SNAPSHOT.jar | grep -v grep | awk ‘{print $1}‘)
if "[-n ‘$pid‘]" ; then
kill -9 $pid
fi

cd api
//下面的mvn替换成绝对路径
/home/May/apache-maven-3.6.3/bin/mvn clean package 
cd target
pwd
BUILD_ID=dontKillMe
nohup java -jar api-1.0-SNAPSHOT.jar &

同时,修改jenkins配置文件:

vim /etc/sysconfig/jenkins
//进入后将用户从jenkins替换成root

重新构建,终于构建成功。

相关推荐