前言:
本文面向的是有一定代碼基礎(chǔ)送膳,對(duì)自動(dòng)化部署有興趣的同學(xué),非新手向
如題所示,這個(gè)是一個(gè)spring boot 2.0 之后的一個(gè)架構(gòu)的jenkins部署窖剑,跟以往的不一樣的地方在于斗蒋,用了maven的docker插件進(jìn)行控制捌斧,本文中,會(huì)提到吹泡,關(guān)于docker中的一些版本控制的注意事項(xiàng)骤星,已經(jīng)jenkins腳本的編寫方式
1.準(zhǔn)備springboot代碼項(xiàng)目
首先先準(zhǔn)備一個(gè)springboot項(xiàng)目,可以正常啟動(dòng)的那種
本文以eureka為例
準(zhǔn)備好后正式插入docker的配置信息
1.1 maven
在pom.xml的plugins標(biāo)簽下加入一個(gè)新的plugin
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 鏡像名稱-->
<imageName>${project.artifactId}</imageName>
<!-- 鏡像標(biāo)簽-->
<imageTags>
<!--可以指定多個(gè)標(biāo)簽 建議弄成自增序列或者時(shí)間戳類型爆哑,用于區(qū)分版本-->
<imageTag>${maven.build.timestamp}</imageTag>
</imageTags>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!-- dockerfile文件路徑-->
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- Docker maven plugin -->
加入一個(gè)properties以控制tag時(shí)間格式
<properties>
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
</properties>
然后去到plugin中定義的dockerDirectory的路徑創(chuàng)建一個(gè)Dockerfile的文件
1.2
編寫dockerfile文件洞难,dockerfile文件是用于docker對(duì)jar包打包之后的操作的一個(gè)定義,熟悉docker的都應(yīng)該很熟悉這個(gè)文件了
FROM 承載的鏡像名稱
VOLUME jar包的操作目錄
ADD 需要上傳到鏡像中的文件
ENTRYPOINT 啟動(dòng)docker時(shí)需要運(yùn)行的命令揭朝,就是說(shuō)當(dāng)docker啟動(dòng)容器就會(huì)自動(dòng)執(zhí)行
java -Djava.security.egd=file:/dev/./urandom -jar /simons-cloud-eureka.jar 這一語(yǔ)句
具體語(yǔ)法队贱,請(qǐng)參照dockerfile文件的編寫規(guī)則,這里就不班門弄斧了
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD simons-cloud-eureka.jar simons-cloud-eureka.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/simons-cloud-eureka.jar"]
成功之后把代碼提交到git那么編寫這方面就告一段落了
2.1 服務(wù)器上的操作
linux服務(wù)器上的操作
本文用的是vmware虛擬機(jī)做的演示
首先潭袱,打開(kāi)虛擬機(jī)柱嫌,已經(jīng)對(duì)應(yīng)的遠(yuǎn)程工具xshell
因?yàn)閐ocker的內(nèi)核版本要求問(wèn)題
本文為了盡量避免兼容問(wèn)題
用的是centos7
安裝軟件的話,因?yàn)橛泻芏嗟牟┛土送突唬揖筒毁樖隽吮嗲穑屹N出來(lái)大家去看就好
安裝jdk https://blog.csdn.net/small_love/article/details/77394721,
安裝maven https://blog.csdn.net/vipbupafeng/article/details/80277126彤悔,
安裝git https://blog.csdn.net/javaee_sunny/article/details/80450153嘉抓,
安裝jenkins https://blog.csdn.net/linjingke32/article/details/77799878,
安裝docker https://blog.csdn.net/kuqq2005/article/details/76359327晕窑,
檢查所有軟件的狀態(tài)是否ok
2.2 操作jenkins
首先要到左手邊抑片,系統(tǒng)管理的全局工具配置選項(xiàng)里面,填寫上面安裝的git杨赤,maven敞斋,和jdk的路徑
配置完成之后就配置git的用戶憑證截汪,使jenkins可以通過(guò)用戶密碼調(diào)用git
配置完成之后就可以進(jìn)行新增項(xiàng)目
2.3
輸入對(duì)應(yīng)的jenkins的目錄地址然后,新建項(xiàng)目
項(xiàng)目新建玩之后植捎,進(jìn)入配置頁(yè)面衙解,把剛才寫好的地址填進(jìn)git里面
填寫git項(xiàng)目地址選好憑證
填寫maven,以及配置maven之后要執(zhí)行的腳本代碼
先執(zhí)行maven的clean install命令進(jìn)行依賴更新
然后 去到j(luò)enkins的WORKSPACE下的simons-cloud-eureka項(xiàng)目下鸥跟,就是我們剛才新建的項(xiàng)目
然后執(zhí)行這個(gè)項(xiàng)目下的start.sh的腳本
cd $WORKSPACE/simons-cloud-eureka
sh start.sh
因?yàn)樵趈enkins里面執(zhí)行shell腳本的話丢郊,有很多奇奇怪怪的情況
所以我建議大家還是寫一個(gè)腳本,然后在jenkins里面執(zhí)行這個(gè)腳本
防止bug
我這邊就把腳本貼出來(lái)
appName="simons-cloud-eureka"
word="1"
echo "$word"
word=`docker ps -a -q --no-trunc --filter name=^/"$appName"$`
echo "$word"
if [ -z "$word" ];
then
echo "當(dāng)前不存在該容器医咨,直接進(jìn)行啟動(dòng)該操作-------------------------------------"
elif [ -n "$word" ];
then
echo "當(dāng)前已存在容器枫匾,停止并移除該容器-------------------------------------"
/usr/bin/docker stop "$word"
/usr/bin/docker rm "$word"
elif [ "$word" == "1" ];
then
echo "查詢的信息有誤,執(zhí)行默認(rèn)操作-------------------------------------"
/usr/bin/docker stop "$word"
/usr/bin/docker rm "$word"
fi
/usr/local/sbin/apache-maven-3.3.9/bin/mvn clean package -P spring-boot docker:build
/usr/bin/docker run -p 8761:8761 -d --name "$appName" "$appName":latest
那么我這邊介紹一下shell的執(zhí)行流程
首先先定義要啟動(dòng)的項(xiàng)目名稱拟淮,就在dokcerfile里面我們寫的要啟動(dòng)的項(xiàng)目名稱干茉,
建議是全部統(tǒng)一該項(xiàng)目的名稱
docker ps -a -q --no-trunc --filter name=^/" ----> 先統(tǒng)計(jì)當(dāng)前正在運(yùn)行的的容器中是否包含該項(xiàng)目的名稱
當(dāng)前不存在該容器,直接進(jìn)行啟動(dòng)該操作
否則先/usr/bin/docker stop "word" 然后刪除該容器
最后
/usr/local/sbin/apache-maven-3.3.9/bin/mvn clean package -P spring-boot docker:build
使用maven打包springboot項(xiàng)目
然后
maven的docker-plugin 會(huì)把這個(gè)項(xiàng)目打包成jar包然后上傳到本地鏡像倉(cāng)庫(kù)中很泊,然后啟動(dòng)該鏡像
然后我們?nèi)z查一下docker的鏡像倉(cāng)庫(kù)會(huì)發(fā)現(xiàn)角虫,哎出現(xiàn)了一個(gè)latest和時(shí)間戳 tag的項(xiàng)目,因?yàn)閐ocker默認(rèn)最后一個(gè)版本為latest所以會(huì)出現(xiàn)兩個(gè)委造,當(dāng)新的時(shí)間戳版本生成時(shí)latest版本會(huì)被新的時(shí)間戳版本覆蓋戳鹅,所以我們啟動(dòng)的時(shí)候啟動(dòng)latest的容器即可
這個(gè)時(shí)候我們?cè)跒g覽器里面,打開(kāi)這個(gè)docker對(duì)應(yīng)的eureka的控制頁(yè)面
完美昏兆,打開(kāi)了枫虏,那么這一篇博文就搞定咯
也歡迎大家的糾正,和留言
想要項(xiàng)目源碼的也可以在下方留言爬虱,我會(huì)給你們git地址