實現(xiàn)效果
根據(jù)用戶選擇的發(fā)布環(huán)境參數(shù)裕菠,把spring boot應用發(fā)布到對應的遠程服務器上山涡。
使用Docker安裝Jenkins
CentOS7安裝Docker
- 安裝Docker依賴的包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
- 設置使用Docker穩(wěn)定版安裝源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安裝Docker最新社區(qū)版
sudo yum install docker-ce
- 設置Docker開機自啟動
sudo systemctl enable docker
- 啟動Docker服務
sudo systemctl start docker
- 驗證Docker是否安裝成功
sudo docker run hello-world
下載Jenkins鏡像并啟動Jenkins容器
docker run \
--name jenkins \
--restart=always \
-u root \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v /usr/local/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
--name jenkins 容器名為jenkins
--restart=always Docker服務重啟后總是重啟該容器
-u root 容器內使用root用戶
-d 容器在后臺運行
-p 8080:8080 映射容器內8080端口到宿主機的8080端口
-v /usr/local/jenkins:/var/jenkins_home 映射容器內的/var/jenkins_home目錄到宿主機的 /usr/local/jenkins目錄
jenkinsci/blueocean 使用的Jenkins鏡像名稱
也可使用war包安裝Jenkins
- 下載最新Jenkins WAR包
- 運行命令
java -jar jenkins.war
配置Jenkins
1.在瀏覽器輸入http://服務器IP:8080
2.在服務器獲取管理員初始密碼
vi /usr/local/jenkins/secrets/initialAdminPassword
也可使用
docker logs jenkins
3.自定義Jenkins幻碱,選擇安裝推薦的插件
4.創(chuàng)建第一個管理員賬號
5.安裝Maven 3.6
在 系統(tǒng)管理->全局工具配置里狂秦,點擊新增Maven,輸入Maven3坯临,然后點擊保存按鈕
在 系統(tǒng)設置->插件管理->可選插件 搜索 Maven Integration焊唬。選中點擊安裝
6.安裝Publish Over SSH遠程部署插件
在 系統(tǒng)設置->插件管理->可選插件 搜索 Publish Over SSH。選中點擊安裝
7.配置SSH遠程服務器
在 系統(tǒng)設置->系統(tǒng)設置里看靠,配置Publish Over SSH插件
點擊新增,增加開發(fā)環(huán)境服務器
點擊高級液肌,勾選 Use password authentication, or use a different key挟炬,輸入遠程服務器密碼
點擊 Test Configuration,測試配置是否成功
添加測試環(huán)境服務器
創(chuàng)建Jenkins發(fā)布任務
1.新建maven項目
2.勾選 參數(shù)化構建過程,添加 選項參數(shù)
3.添加spring boot應用源代碼gitlab倉庫
源碼管理選擇 Git
點擊Add按鈕谤祖,添加gitlab同步代碼的賬號
3.勾選 Delete workspace before build starts婿滓,每次構建任務前刪除上次任務構建的應用源代碼,全量從gitlab重新拉取
4.在gitlab服務器上創(chuàng)建一個新項目粥喜,用于存儲不同發(fā)布環(huán)境的配置文件和應用啟動/停止腳本凸主。我創(chuàng)建的項目名稱為ICCProjectCD ,目錄結構如下:
├── dev // 開發(fā)環(huán)境
│ ├── config
│ │ ├── application.properties
│ │ ├── logback.xml
│ │ └── mysql.properties // mysql數(shù)據(jù)庫賬號
│ └── script
│ ├── start.sh // java -jar 啟動應用
│ └── stop.sh // 殺掉java進程额湘,終止應用
├── prod // 生產環(huán)境
│ ├── config
│ │ ├── application.properties
│ │ ├── logback.xml
│ │ └── mysql.properties
│ └── script
│ ├── start.sh
│ └── stop.sh
└── test // 測試環(huán)境
├── config
│ ├── application.properties
│ ├── logback.xml
│ └── mysql.properties
└── script
├── start.sh
└── stop.sh
5.添加構建前操作
點擊 Add pre-build step->執(zhí)行 shell
// 從gitlab拉取不同發(fā)布環(huán)境的配置文件
git clone http://gitlab用戶名:gitlab密碼@192.168.0.91/deploy/ICCProjectCD.git
// $ENV是上面步驟定義的發(fā)布環(huán)境變量
// 根據(jù)用戶選擇的發(fā)布環(huán)境卿吐,把應用源代碼中的配置文件替換為對應發(fā)布環(huán)境的配置文件
cp -r ICCProjectCD/$ENV/config/* ./
6.設置maven命令參數(shù)
clean package -Dmaven.test.skip=true
7.添加構建后操作
點擊 Add post-build step->執(zhí)行 shell
// 拷貝maven打包的jar包到對應發(fā)布環(huán)境的腳本目錄
cp target/app-1.0.0.jar ICCProjectCD/$ENV/script/
繼續(xù)點擊 Add post-build step->Send files or execute commands over SSH,添加開發(fā)環(huán)境發(fā)布服務器
點擊高級锋华,勾選 Label嗡官,輸入 dev,dev對應上面定義的$ENV變量中的dev值
Source files:需要發(fā)送到遠程服務器的文件毯焕,可以使用通配符和Jenkins變量
Remove prefix:刪除目錄前綴衍腥,填ICCProjectCD/dev/script意思是不創(chuàng)建ICCProjectCD/dev/script這些目錄
Remote directory:文件發(fā)送到遠程服務器的哪個目錄下。因為我設置的遠程連接賬號是root纳猫,默認是遠程服務器的root目錄婆咸。填jenkins,會在root目錄下創(chuàng)建jenkins目錄芜辕。
Exec command:文件發(fā)送到遠程服務器后擅耽,在遠程服務器上執(zhí)行的命令
// 進入應用發(fā)布目錄
cd /root/jenkins
// 設置腳本可執(zhí)行權限
chmod +x *.sh
// 停止應用
./stop.sh
// 啟動應用
./start.sh
繼續(xù)點擊 Add Server,添加測試環(huán)境發(fā)布服務器物遇。勾選 Label乖仇,輸入 test,test對應上面定義的$ENV變量中的test值
點擊高級询兴,配置參數(shù)化發(fā)布
勾選 Parameterized publishing乃沙,輸入上面定義的發(fā)布環(huán)境變量ENV。每次構建任務的時候诗舰,會根據(jù)ENV變量的值匹配各個遠程服務器的Label警儒,從而實現(xiàn)多環(huán)境的部署。
點擊保存按鈕眶根,發(fā)布任務創(chuàng)建完成蜀铲。
最后,Jenkins所有構建任務存儲在jenkins_home下的workspace目錄属百,可以到這個目錄下調試構建腳本记劝。