告別 Jenkins ?這套輕量級自動(dòng)化部署方案,讓你輕松上車!
Drone 介紹
Drone 是一款基于 Docker 的輕量級開源 CI/CD 工具,旨在幫助開發(fā)人員自動(dòng)化構(gòu)建、測試和部署應(yīng)用程序。它擁有簡單易用的配置方式,并且支持多種流行的源代碼管理平臺(tái)和容器平臺(tái)。
前期準(zhǔn)備
- 一臺(tái)服務(wù)器或本地虛擬機(jī)
- 服務(wù)器已安裝 Docker、Drone
- Gitee 倉庫
- SpringBoot 測試項(xiàng)目
配置 Gitee
登錄 Gitee ,點(diǎn)擊頭像,找到設(shè)置,頁面左側(cè)點(diǎn)擊 數(shù)據(jù)管理-第三方應(yīng)用,創(chuàng)建應(yīng)用,具體配置如下:
截圖來自 Drone 官網(wǎng)
配置 Drone 項(xiàng)目
登錄服務(wù)器中部署好的Drone web 端配置項(xiàng)目
- 找到我們的 Java 項(xiàng)目,在 Settings 界面中開啟 Trusted
- 在Settings界面中點(diǎn)擊左側(cè)的Secrets,創(chuàng)建秘鑰ssh_host、ssh_user、ssh_password
配置 SpringBoot 項(xiàng)目
在 SpringBoot 項(xiàng)目根目錄中創(chuàng)建三個(gè)文件.drone.yml、Dockerfile、run.sh
1.編寫 .drone.yml 配置文件
當(dāng)master分支有提交代碼時(shí),就會(huì)觸發(fā) Drone 自動(dòng)部署項(xiàng)目
kind: pipeline
name: default
volumes:
- name: cache
host:
path: /var/lib/cache
- name: muqing-api
host:
path: /mydata/muqing-api
steps:
- name: build
image: maven:3.6.3-openjdk-17
pull: if-not-exists
volumes:
- name: cache
path: /root/.m2
- name: muqing-api
path: /muqing-api
commands:
# 開始打包maven工程
- mvn clean package -Dmaven.test.skip=true
# 將打包后的文件復(fù)制到宿主機(jī)映射目錄
- cp run.sh /muqing-api
- cp muqing-admin/target/*.jar /muqing-api
- cp muqing-admin/Dockerfile /muqing-api
# 2.使用ssh訪問主機(jī)制作鏡像并運(yùn)行
- name: ssh commands
pull: if-not-exists
image: appleboy/drone-ssh
settings:
host:
# 從drone倉庫配置中秘密空間讀取服務(wù)器IP
from_secret: ssh_host
username:
# 從drone倉庫配置中秘密空間讀取用戶
from_secret: ssh_user
password:
# 從drone倉庫配置中秘密空間讀取密碼
from_secret: ssh_password
port: 22
script:
- cd /mydata/muqing-api
- chmod +x run.sh
- ./run.sh
# drone執(zhí)行觸發(fā)器
trigger:
branch:
- master
2.編寫 Dockerfile 文件
FROM openjdk:17
ADD muqing-admin-0.0.1.jar /home/app.jar
EXPOSE 8080
CMD ["java", "-jar", "/home/app.jar"]
3.編寫 run.sh 腳本
#!/bin/bash
# 應(yīng)用組名
group_name='java'
# 應(yīng)用名稱
app_name='muqing-api'
echo '---------- 停止舊容器 ----------'
docker stop ${app_name}
echo '---------- 刪除舊容器 ----------'
docker rm ${app_name}
echo '---------- 刪除舊鏡像 ----------'
docker rmi ${group_name}/${app_name}
echo '---------- 打包新鏡像 ----------'
docker build -t ${group_name}/${app_name} .
echo '---------- 刪除無用鏡像 ----------'
docker image prune -f
echo '---------- 創(chuàng)建新容器 ----------'
docker run -p 8080:8080 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-d ${group_name}/${app_name}
部署結(jié)果
對應(yīng).drone.yml中配置的流水線步驟:
(1) 從 Git 倉庫中拉取項(xiàng)目代碼
(2) Maven 打包 Java 項(xiàng)目
(3) Docker 部署
總結(jié)
Drone 是一款功能強(qiáng)大、易于使用的 CI/CD 工具,提供了豐富的插件,可以擴(kuò)展其功能。Drone 采用輕量級的基于 Docker 的架構(gòu),易于部署和管理,重點(diǎn)是免費(fèi)。Drone 和 Jenkins 都是優(yōu)秀的 CI/CD 工具,選擇哪一款取決于你的項(xiàng)目需求和團(tuán)隊(duì)規(guī)模。如果您追求簡單易用,Drone 是一個(gè)不錯(cuò)的選擇。