以前个人博客里面写过Jenkins自动化部署Java项目,可参考博客 http://www.javashuo.com/article/p-agndifso-nh.html
这里写的是使用流水线部署java后端项目。java
ip地址 | 角色 | 部署的软件 |
---|---|---|
192.168.0.117 | Jenkins 服务器 | Jenkins、maven、jdk、git |
192.168.0.120 | Tomcat 服务器 | gitlab、git、mysql、Tomcat、jdk |
1.安装配置好maven打包插件
2.安装好gitlab仓库,及本地Java代码上传gitlab
3.CentOS 7系统,可链接外网
4.关闭防火墙,加强性node
maven 安装及配置参考 http://www.javashuo.com/article/p-bevvhvmm-nh.htmlmysql
注意:git
安装maven要先安装jdk, 若是系统有openjdk须要先卸载,Jenkins可使用本身安装的jdk,但须要设置!
vim /etc/init.d/jenkins web
candidates=" /usr/local/java/bin/java #插入本身安装java路径 /usr/java/jdk1.7.0_75/bin/java /etc/alternatives/java /usr/lib/jvm/java-1.8.0/bin/java /usr/lib/jvm/jre-1.8.0/bin/java /usr/lib/jvm/java-1.7.0/bin/java /usr/lib/jvm/jre-1.7.0/bin/java /usr/bin/java "
代码上传gitlab参考 http://www.javashuo.com/article/p-mqpbotgk-nh.htmlsql
vim /etc/hosts
在末尾加入:shell
192.168.0.117 jenkins 192.168.0.120 tomcat
2,3,4步都在Jenkins服务器上面操做apache
ssh-keygenvim
ssh-copy-id -i .ssh/id_rsa.pub root@tomcat后端
ssh root@tomcat
pipeline { agent { node { label 'master' } } //拉取代码 stages { stage('GetCode') { steps { sleep 5 } } //打包 stage('build') { steps { sh '/usr/local/apache-maven-3.6.3/bin/mvn clean install -Ptest' sleep 2 println('打包完成!') sh 'scp -r /var/lib/jenkins/workspace/maven-gitlab-quartz/target/*.war root@tomcat:/usr/local/apache-tomcat-8.5.16/webapps ' sleep 1 println('部署完成!') } } } }
java 命令不识别
ln -s /usr/local/java/bin/java /usr/bin/java
没法远程发送war包
1.从新作免密交互
2.在本地测试shell环境测试
scp -r /var/lib/jenkins/workspace/maven-gitlab-quartz/target/quartz.war root@192.168.0.120:/test
构建测试:仍是出现相同报错
分析缘由:因为推送的公钥是root用户的,而Jenkins操做是Jenkins用户执行,因此用户权限不同,致使的。
给Jenkins用户受权或使用root用户操做Jenkins,这里修改成使用root用户操做Jenkins(线上环境建议给Jenkins用户受权)
vim /etc/sysconfig/jenkins
systemctl restart jenkins
结果:成功解决问题
1.因为我是使用实验环境部署的,线上环境须要作防火墙策略。
2.jenkinsfile 还能够添加构建后操做,好比发送邮件等。
3.发布项目部分,能够单独写一份脚本,内容包括备份war包,重启服务等。
1.构建以前要安装好相关插件,准备好代码及gitlab2.遇到构建报错不要慌,看报错日志,再去解决问题