版权声明:不为无益之事,何以遣有涯之生。 https://blog.csdn.net/lj402159806/article/details/83821014
jenkins gitlab maven tomcat实现自动集成、打包、部署
jenkins安装看https://blog.csdn.net/lj402159806/article/details/83625607
配置java、git、maven路径
- 首先在jenkins服务器上安装java、git和maven
- 进入jenkins配置页面
- 点击系统管理->全局工具配置进入配置页面
- 设置jdk别名和JAVA_HOME
- 设置git别名和git可执行文件的路径
- 设置maven别名和MAVEN_HOME
- 以上三个都不勾选自动安装
安装插件
Gitlab Plugin
#安装之后才可以在系统配置中指定gitlab的IP地址
Git Plugin
Git Client Plugin
#用于jenkins在gitlab中拉取源码
Publish Over SSH
#用于通过ssh部署应用
Maven Integration plugin
#用于新建maven项目
配置gitlab plugin
- 点击系统管理->系统设置->找到gitlab
- 取消勾选Enable authentication for ‘/project’ end-point
- 设置Connection name,比如gitlab
- 设置Gitlab host URL,也就是gitlab的地址
- 设置Credentials,使用gitlab api token,api token可以在账户settings的Account标签栏中找到(Private token)
- 设置完毕点击test connection测试
配置ssh免密登录
- 在jenkins服务器上输入
ssh-keygen -t rsa -C "[email protected]" -b 4096
生成一个ssh key - ssh key生成后~/.ssh/目录下会多出id_rsa(私钥)与id_rsa.pub(公钥)
- 将id_rsa与id_rsa.pub复制到jenkins主目录的.ssh目录下
sudo mv id_rsa id_rsa.pub /var/lib/jenkins/.ssh/
,主目录可以在系统管理->系统设置->主目录查看 - 将公钥添加到远程应用服务器
sudo ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa.pub [email protected]
注意不使用ssh-copy-id命令而是直接把id_rsa.pub内容直接复制到远程应用服务器的authorized_keys内下一步操作最后test connection不会成功的
配置publish over ssh plugin
点击系统管理->系统设置->找到Publish over SSH
设置Jenkins SSH Key
- Passphrase输入ssh key密码,如果创建ssh key时无密码则可留空
- Path to key输入id_rsa的绝对路径/var/lib/jenkins/.ssh/id_rsa
- Key输入id_rsa内的密钥(使用cat /var/lib/jenkins/.ssh/id_rsa可查看)
- Path to key与Key二选一即可
设置SSH Servers
- name用于标识远程服务器名
- hostname输入远程服务器ip地址
- username输入使用ssh登录远程服务器的用户
- remote directory可留空
- 设置完毕点击test connection测试
配置部署任务
- 点击新建任务,输入任务名称,选中构建一个maven项目后点击确定
- General->GitLab Connection选择gitlab plugin内设置的gitlab服务器
- 源码管理->git->Repository URL输入git项目地址(如[email protected]:test.git)
- Credentials->add->SSH username with private key->Username可随意,Private Key输入jenkins服务器上的id_rsa密钥(使用cat查看)
- 构建->增加构建步骤->调用顶层maven目标->Maven 版本选择之前设置的maven别名,目标输入clean package -Dmaven.test.skip=true(该步骤是使用maven编译war包)
- 构建->增加构建步骤->send files or execute commands over ssh->Name选择SSH Servers里配置的远程服务器,Source files填**/*.war,Remove prefix填target
- 构建后操作->增加构建后操作步骤send build artifacts over ssh->name选择SSH Servers里配置的远程服务器,Exec command填入远程服务器上的部署脚本路径(/opt/deploy.sh)
注意SSH Servers内的remote directory与send files or execute commands over ssh内的Remote directory都留空的话默认就会传输到ssh登录用户的home目录下面,所以这两个目录怎么填写自己尝试
远程服务器部署脚本
在远程服务器上创建脚本
sudo vim /opt/deploy.sh
添加如下内容
#!/bin/sh
tomcat_path=/opt/apache-tomcat-8.0.50
ShutDownTomcat=${tomcat_path}/bin/shutdown.sh
StartTomcat=${tomcat_path}/bin/startup.sh
echo "============删除旧的war包==================="
rm ${tomcat_path}/webapps/test.war
echo "============删除tomcat下旧的文件夹============="
rm -rf ${tomcat_path}/webapps/test
echo "======拷贝编译出来的war包到tomcat下======="
cp /home/gavinandre/test.war ${tomcat_path}/webapps/test.war
echo "====================关闭tomcat====================="
${ShutDownTomcat}
echo "================sleep 10s========================="
for i in {1..10}
do
echo $i"s"
sleep 1s
done
export BUILD_ID=DotKillMe
echo "====================启动tomcat====================="
${StartTomcat}
最后给予执行权限
sudo chmod +x /opt/deploy.sh
总结
jenkins的使用非常不友好,网上博客很多都写得不明不白很多细节都没有提到,在公司没有部署过jenkins并且自己之前也从没接触过jenkins的情况下,完成jenkins的自动部署真的是一件非常不容易的事情