先看一張java發(fā)布流程圖

步驟基本分為以下幾步:

細分的話,自動化部署項目流程大致為:
1.拿到git地址(權(quán)限)
2.拉去代碼clone
3.源碼編譯構(gòu)建
4.構(gòu)建文件拷貝到遠程web服務(wù)器
5.備份現(xiàn)在的程序文件
6.部署新的程序
7.重啟,測試訪問。
例子:
我這里只開了兩臺虛擬機,一臺作為gitalb服務(wù)器 + web發(fā)布服務(wù)器。一臺作為jenkins服務(wù)器
gitlab+web ---192.168.1.112
jenkins---192.168.1.252
項目準(zhǔn)備工作
1.gitlab上重新建一個空項目,并分配好成員。
2.web服務(wù)上將外部導(dǎo)入的java項目文件。初始化成git文件夾, 將現(xiàn)有項目文件夾推送至剛才建的git倉庫。
[root@server-3 tomcat-java-demo-master]# pwd
/opt/java_demo/tomcat-java-demo-master
[root@server-3 tomcat-java-demo-master]# ls
db Dockerfile LICENSE pom.xml README.md src
執(zhí)行
git init #初始化
git remote add origin http://192.168.1.112:85/webservice/java_web.git #將現(xiàn)有文件夾推送至倉庫(倉庫地址在gitlab項目頁復(fù)制)
git add .
git commit -m "frist push all"
git push -u origin master
(可以用分配的gitlab用戶push)
首次提交成功


jenkins部分
jenkins 指定job 運行節(jié)點為salve節(jié)點(192.168.1.112web 這臺)
記住,一旦指定了運行job為指定節(jié)點去運行,接下來所有的構(gòu)建,命令,環(huán)境,都是用salve節(jié)點的,也都是在salve上去執(zhí)行的。?。。?/p>
所以我們要在jenkins設(shè)置salve節(jié)點的地方,聲明salve機器上安裝的jdk,maven這些環(huán)境變量,確保運行命令時可以直接調(diào)用。
系統(tǒng)設(shè)置 ----節(jié)點管理----配置從節(jié)點---往下找到節(jié)點屬性,可參考salve上/etc/profile文件進行填寫
(也可以在執(zhí)行的shell窗口聲明如:export JAVA_HOME=/usr/local/jdk)

保存,退出。
創(chuàng)建job ,配置如下圖(可供參考)



其中有個問題,因為mvn自帶源太慢了,所以需要換成國內(nèi)源。
步驟:
到salve機器上,修改mvn安裝目錄下conf文件夾下的setting.xml,保存退出,就更換成國內(nèi)源了。
vim settings.xml
找到<mirror>標(biāo)簽
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

整個自動化部署配置完了。點擊構(gòu)建。

結(jié)果:



簡單做個nginx反向代理tomcat
upstream java{
server 127.0.0.1:8080;
}
server {
listen 80;
server_name 192.168.1.112;
access_log /var/log/java_acc.log;
location / {
proxy_pass http://java;
}
}

項目回滾
如果需要對線上代碼進行回滾,將備份目錄下的備份.war文件 覆蓋現(xiàn)在線上的目錄,重啟tomcat即可

總結(jié):
只有先理清手動部署的流程,才能將其自動化。 這里創(chuàng)建git部分在生產(chǎn)中可以忽略,畢竟大多肯定都是直接
有項目的。salve 節(jié)點運行job,所有命令,環(huán)境用的都是salve的。一定要在節(jié)點安裝好java環(huán)境和maven,jenkins只負責(zé)分配任務(wù)。
配置salve 節(jié)點--節(jié)點中配置用到的jdk,maven,jre 等環(huán)境變量---創(chuàng)建job,按流程去配置步驟。
20210428更新:
利用ansible批量部署項目
1.安裝插件:Ansible plugin
- 編寫playbook.yml (將上面配置的流程寫進yml腳本中)
- hosts: "{{ env }}"
tasks:
- name: scp war package
copy: src="{{item}}" dest=/tmp/ROOT.war
with_fileglob:
- "/opt/jenkins_home/workspace/java_build/target/*.war"
- name: Backup java file
tags: bk
shell: tomcat=/usr/local/tomcat && cd $tomcat/webapps && mv *.war /data/backup/ROOT_$(date +"%F_%T").war
- name: Update war and restart tomcat service
tags: bushu
shell:
tomcat=/usr/local/tomcat &&
mv /tmp/ROOT.war $tomcat/webapps &&
pid=$(ps -ef|grep tomcat|grep -v 'grep'|awk '{print $2}') &&
[ -n "$pid" ] && kill -9 $pid &&
nohup /usr/local/tomcat/bin/startup.sh
hosts為什么是 {{env}} ?先忽略 后面會解釋
-
打開jenkins-job配置界面。 現(xiàn)在,可以將ssh發(fā)送文件并執(zhí)行命令那一欄的版塊刪掉了。
在保留mvn clean構(gòu)建命令行步驟的同時,我們增加ansible構(gòu)建步驟
image.png
image.png
點擊這里的高級,填寫變量


前面又新創(chuàng)建了一條參數(shù)化構(gòu)建:

保存退出。
運行構(gòu)建界面:

構(gòu)建結(jié)果:


