文章目录
- 背景
- 安装jenkins
- 安装插件
- 安装maven插件
- Publish over SSH
- 系统配置
- Global properties
- Publish over SSH
- 全局工具配置
- 设置jdk
- 设置maven
- 设置git
- 构建java maven项目
- freestyle 或者maven都可以
- Discard old builds
- git命令报错Host key verification failed
- 每次构建前清理构建环境
- Build
- Post Steps
背景
由于服务器上运行jenkins很卡,所以对于小公司而言,就不在服务器上跑jenkins,这两天公司正好有一台闲置的windows主机。就在这个上面尝试安装jenkins来进行自动打包,并且发布到linux服务器。
安装jenkins
安装步骤就不多说了,网上一大堆。
安装插件
安装maven插件
Publish over SSH
系统配置
Global properties
配置javahome maven home
Publish over SSH
发布到远程服务器的时候要用,涉及到密钥,我就不截图了。
这里遇到一个巨坑,测试连接的时候报了:
jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@60373f7]
因为我们生成密钥的openssh的版本过高的原因,而版本在检验密钥时还不支持这种格式。
通过指定格式来生成
ssh-keygen -m PEM -t rsa -b 4096
生成后阿里云ecs感觉还不奏效,可能是我设置了阿里云密钥对才能访问,绑定以后要重启才能生效
也可以试试把公钥写到.ssh 文件夹下的:authorized_keys
全局工具配置
设置jdk
设置maven
设置git
构建java maven项目
freestyle 或者maven都可以
freestyle 或者maven都可以,如果pipeline后续会讲如何使用他的语法
Discard old builds
我选择保留5天数据,最大保存10次build。我觉得够了,不需要更多了。
git命令报错Host key verification failed
处理git的时候遇到了Host key verification failed,Windows安装的jenkins,登录账户打开git bash,执行git pull等一系列命令,是可以成功执行,但是在Jenkins的网页中执行git的命令时,提示
d:\src>git pull
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
原因:Jenkins网页登录时,ssh连接使用的是Jenkins自身的账户,并不是我们登录电脑所使用的的账户,该账户下并没有ssh连接所需要的rsa文件,
解决方法:
成功执行git pull等命令的账户,在C:\Users\xxxxxx.ssh目录下(xxxxxx是登录电脑的用户名,不是git的用户名),会有id_rsa,id_rsa.pub,known_hosts文件,把这3个文件拷贝到C:\Windows\System32\config\systemprofile.ssh目录下,再执行jenkins就OK了
每次构建前清理构建环境
Build
我加上了-DskipTests 参数,不然打包会跑test,然后报错。
Post Steps
打包完成后将文件发送到远程服务器
sh脚本如下:
runDir="/opt/running/wms"
warName="ruoyi-admin.jar"
targetWarName="wms.jar"
logDir="/data/logs/wms"
profileName="prod"
tpid=`ps aux | grep ${targetWarName} |grep -v grep |awk '{print $2}'`
if [ ! -n "$tpid" ]; then
echo "# tpid is null"
else
kill -9 $tpid
echo "# kill -9 $tpid"
fi
if [ -f "$warName" ]; then
if [ -f "$runDir/$targetWarName" ]; then
current=`date "+%Y%m%d_%H%M%S"`
mv $runDir/$targetWarName $runDir/history/$targetWarName"$current"
echo "# mv $runDir/$targetWarName $runDir/history/$targetWarName$current"
fi
mv $warName $runDir/$targetWarName
echo "# mv $warName $runDir/$targetWarName"
fi
nohup java -jar -Xmx512m $runDir/$targetWarName --spring.profiles.active=$profileName>/dev/null 2>&1 &
echo 'start ...'
echo "tail -f $logDir/wms.current.log"