以前個人博客裏面寫過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.遇到構建報錯不要慌,看報錯日誌,再去解決問題