Jenkins+Docker+Gitee自動(dòng)化部署SpringBoot應(yīng)用
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
閱讀本篇文章需要你有Docker、Git、SpringBoot、Linux等基礎(chǔ)知識(shí)。
最近在做畢業(yè)設(shè)計(jì),遇到一個(gè)問(wèn)題,就是每次編寫(xiě)完一個(gè)功能點(diǎn),就需要重新運(yùn)行一下項(xiàng)目,然后進(jìn)行測(cè)試,而且項(xiàng)目比較復(fù)雜,在本地運(yùn)行會(huì)占用大量的運(yùn)行內(nèi)存,導(dǎo)致開(kāi)發(fā)不暢。
于是我想著使用Jenkins配合Gitee搭建一個(gè)自動(dòng)化部署平臺(tái),并將代碼托管到服務(wù)器上,這樣減輕了本地的電腦壓力,也解放了部署的流程。
搭建Jenkins平臺(tái)
我們來(lái)搭建一下Jenkins平臺(tái),首先安裝Docker:
#?安裝yum-utils工具
sudo?yum?install?-y?yum-utils?device-mapper-persistent-data?lvm2
#?配置阿里云的Docker?Yum源
sudo?yum-config-manager?--add-repo?http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#?安裝Docker
sudo?yum?install?docker-ce?docker-ce-cli?containerd.io
#?啟動(dòng)Docker
sudo?systemctl?start?docker
#?配置開(kāi)機(jī)自啟動(dòng)
sudo?systemctl?enable?docker
通過(guò)以上指令即可成功安裝Docker并啟動(dòng),接下來(lái)通過(guò)Docker運(yùn)行Jenkins:
docker?run?\
??-d?\
??--rm?\
??-u?root?\
??-p?8080:8080?\
??-v?/home/jenkins-data:/var/jenkins_home?\
??-v?/var/run/docker.sock:/var/run/docker.sock?\
??-v?/opt/develop_resource/apache-maven-3.6.3:/usr/local/maven?\
??-v?"$HOME":/home?\
??jenkinsci/blueocean
執(zhí)行上述指令Docker會(huì)自動(dòng)拉取Jenkins的鏡像并啟動(dòng),因?yàn)槲覀円渴鸬氖荢pringBoot,所以需要準(zhǔn)備JDK和Maven環(huán)境,不過(guò)該Jenkins鏡像自帶了JDK環(huán)境,只需準(zhǔn)備一下Maven即可,首先下載Maven壓縮包:
wget?http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
然后解壓:
tar?-zxvf?apache-maven-3.6.3-bin.tar.gz
解壓之后千萬(wàn)要注意Maven所在的目錄,這是我的目錄:
/opt/develop_resource/apache-maven-3.6.3
將它掛載到容器的目錄里,-v /opt/develop_resource/apache-maven-3.6.3:/usr/local/maven這一條指令中的Maven目錄千萬(wàn)記得換成自己的?,F(xiàn)在,我們可以運(yùn)行剛才的指令啟動(dòng)Jenkins了,通過(guò)docker ps指令可以查看容器是否啟動(dòng):
[root@10?/]#?docker?ps
CONTAINER?ID???IMAGE?????????????????COMMAND??????????????????CREATED??????????STATUS?????????PORTS??????????????????????????????????????????????????NAMES
dfa1b8b2c7a3???jenkinsci/blueocean???"/sbin/tini?--?/usr/…"???15?seconds?ago???Up?9?seconds???0.0.0.0:8080->8080/tcp,?:::8080->8080/tcp,?50000/tcp???condescending_meitner
容器正在運(yùn)行,接下來(lái)訪問(wèn)一下看看,使用服務(wù)器的ip加端口8080:
管理員密碼可以在Jenkins的啟動(dòng)日志中查看,使用docker logs dfa1b8b2c7a3查看日志:

密碼就是紅框中的字符串,注意紅框下的一段提示:
This?may?also?be?found?at:?/var/jenkins_home/secrets/initialAdminPassword
意思是你可以在/var/jenkins_home/secrets/initialAdminPassword這個(gè)文件中查看到管理員密碼,不過(guò)這是Jenkins容器內(nèi)的目錄,我們?cè)趩?dòng)Jenkins的就掛載了Jenkins的關(guān)鍵目錄/var/jenkins_home,宿主機(jī)目錄為/home/jenkins-data,所以可以使用如下指令查看管理員密碼:
cat?/home/jenkins-data/secrets/initialAdminPassword
得到密碼后輸入到Jenkins頁(yè)面解鎖Jenkins,點(diǎn)擊安裝推薦的插件:

等待插件安裝完成,完成后就可以創(chuàng)建用戶了:

然后下一步:

無(wú)需修改,直接進(jìn)入下一步:

到這一步Jenkins平臺(tái)就可以正式使用了。
Jenkins平臺(tái)配置
接下來(lái)就是對(duì)Jenkins平臺(tái)的配置,首先配置Maven:

按步驟點(diǎn)擊,即可進(jìn)入系統(tǒng)配置,在全局屬性中進(jìn)行配置:

勾選環(huán)境變量,然后點(diǎn)擊新增:

還記得我們?cè)谶\(yùn)行Jenkins容器時(shí)掛載的Maven目錄嗎?掛載到Jenkins容器中的目錄就是/usr/local/maven,如果實(shí)在搞不懂的你就保持和我的配置一樣即可。以同樣的方式再配置一個(gè):

PATH+EXTRA的作用是讓原來(lái)PATH變量中的環(huán)境不丟失,最后點(diǎn)擊保存。
Maven配置完成后,需要配置Gitee:

進(jìn)入插件管理:

點(diǎn)擊可選插件,選中Gitee,然后點(diǎn)擊Install without restart進(jìn)行安裝,等待安裝完成即可,Gitee的相關(guān)配置我們放到后面講。
創(chuàng)建SpringBoot應(yīng)用
這一步就非常簡(jiǎn)單了,創(chuàng)建一個(gè)簡(jiǎn)單的SpringBoot應(yīng)用進(jìn)行測(cè)試,控制器代碼:
@RestController
public?class?HelloController?{
????@GetMapping("/hello")
????public?String?hello(){
????????return?"Hello?World!";
????}
}
配置文件:
server:
??port:?8000
并在main下新建docker文件夾,在docker文件夾下新建Dockefile文件,內(nèi)容如下:
#?指定是基于哪個(gè)基礎(chǔ)鏡像
FROM?java:8
#?作者信息
MAINTAINER?wwj
#?掛載點(diǎn)聲明
VOLUME?/tmp
#?將本地的一個(gè)文件或目錄,拷貝到容器的文件或目錄里
ADD?/target/demo-0.0.1-SNAPSHOT.jar?springboot.jar
#shell腳本
RUN?bash?-c?'touch?/springboot.jar'
#?將容器的8000端口暴露,給外部訪問(wèn)。
EXPOSE?8000
#?當(dāng)容器運(yùn)行起來(lái)時(shí)執(zhí)行使用運(yùn)行jar的指令
ENTRYPOINT?["java",?"-jar",?"springboot.jar"]
這里需要注意的是ADD指令的編寫(xiě),當(dāng)SpringBoot應(yīng)用打包完成后,其jar包會(huì)被放在target目錄下:

所以需要指定該文件的位置,使用ADD指令將其放入待構(gòu)建的容器中,接著在Gitee中新建一個(gè)倉(cāng)庫(kù),并將代碼推送到倉(cāng)庫(kù)中。

倉(cāng)庫(kù)名隨便你叫什么,然后將剛才的應(yīng)用推送上去:

Gitee配置
推送完成后,回到Jenkins管理界面,我們來(lái)完成Gitee的配置,打開(kāi)系統(tǒng)配置:

找到Gitee配置,填入對(duì)應(yīng)的信息:

點(diǎn)擊添加按鈕添加一個(gè)Jenkins憑證:

選擇Gitee API 令牌:

私人令牌的獲取地址 https://gitee.com/profile/personal_access_tokens:

點(diǎn)擊生成新令牌:

輸入令牌描述然后點(diǎn)提交:

現(xiàn)在就得到了一串私人令牌,將它復(fù)制好后妥善保存,因?yàn)殛P(guān)閉了這個(gè)對(duì)話框就再也看不到了。憑證添加完成后,在證書(shū)令牌位置選擇剛剛添加的令牌:

最后保存。
新建自動(dòng)化部署任務(wù)
配置完成,接下來(lái)新建一個(gè)任務(wù),點(diǎn)擊新建Item:

隨便輸入一個(gè)任務(wù)名稱,并選擇Freestyle project:

在源碼管理處勾選Git,并填入項(xiàng)目地址:

在構(gòu)建觸發(fā)器位置勾選它:

在構(gòu)建觸發(fā)器最底部位置點(diǎn)擊生成Gitee WebHook密碼:

然后打開(kāi)Gitee項(xiàng)目中的WebHooks:

點(diǎn)擊添加webHook:

此處的URL需要填入一個(gè)公網(wǎng)IP,所以如果你是用的虛擬機(jī),就需要用內(nèi)網(wǎng)穿透工具映射一下,如果是云服務(wù)器的就不需要了:

至于URL應(yīng)該填什么,在此處有說(shuō)到:

所以只需調(diào)換一下ip地址即可:

填寫(xiě)完成后點(diǎn)擊添加,Gitee便會(huì)發(fā)送一個(gè)Post請(qǐng)求到Jenkins,如果請(qǐng)求結(jié)果如下所示,則配置成功了:

重新回到Jenkins管理界面,繼續(xù)勾選構(gòu)建觸發(fā)器下的輪詢SCM,輸入輪詢頻率:

最后在構(gòu)建位置下增加構(gòu)建步驟,選擇執(zhí)行shell:

寫(xiě)入shell腳本:

腳本如下:
#!/bin/bash?-il
docker?rm?-f?app_docker
sleep?1
docker?rmi?-f?app_docker:1.0
sleep?1
mvn?clean?install?-Dmaven.test.skip=true
sleep?1
docker?build?-t?app_docker:1.0?-f?./src/main/docker/Dockerfile?.
sleep?1
docker?run?-d?-p?8000:8000?--name?app_docker?app_docker:1.0
該腳本表示刪除正在運(yùn)行的app_docker容器,并刪除app_docker:1.0鏡像,然后使用mvn命令打包從Gitee拉取來(lái)的項(xiàng)目代碼,接著使用項(xiàng)目中的Dockerfile文件構(gòu)建出一個(gè)鏡像,名稱為app_docker:1.0,最后運(yùn)行該鏡像。
測(cè)試一下
最后點(diǎn)擊保存,部署任務(wù)就創(chuàng)建完成了,我們來(lái)測(cè)試一下有沒(méi)有問(wèn)題:

點(diǎn)擊立即構(gòu)建,Jenkins會(huì)立馬進(jìn)行一次構(gòu)建,查看控制臺(tái)輸出:

此時(shí)表名部署成功了,訪問(wèn)一下試試:

沒(méi)有問(wèn)題,接下來(lái)修改一下代碼,并推送到Gitee,看看Jenkins會(huì)不會(huì)自動(dòng)部署呢?大家可以自己嘗試一下。
?????
往 期 推 薦
1、來(lái)自谷歌的開(kāi)發(fā)心得:所有SQL和代碼,都沒(méi)必要藏著掖著
2、用了這么久的 Chrome,你不會(huì)還沒(méi)掌握這個(gè)功能吧?
點(diǎn)分享
點(diǎn)收藏
點(diǎn)點(diǎn)贊
點(diǎn)在看





