springboot + jenkins + docker 自動(dòng)化部署

前言:
本文面向的是有一定代碼基礎(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的文件


1538034241(1).jpg

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

1538034870(1).jpg

因?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晕窑,
1538035300(1).jpg

檢查所有軟件的狀態(tài)是否ok

2.2 操作jenkins
首先要到左手邊抑片,系統(tǒng)管理的全局工具配置選項(xiàng)里面,填寫上面安裝的git杨赤,maven敞斋,和jdk的路徑


1538035866(1).jpg

配置完成之后就配置git的用戶憑證截汪,使jenkins可以通過(guò)用戶密碼調(diào)用git


1538036026(1).jpg

配置完成之后就可以進(jìn)行新增項(xiàng)目

2.3
輸入對(duì)應(yīng)的jenkins的目錄地址然后,新建項(xiàng)目


1538035497(1).jpg

項(xiàng)目新建玩之后植捎,進(jìn)入配置頁(yè)面衙解,把剛才寫好的地址填進(jìn)git里面


1538036342(1).jpg

填寫git項(xiàng)目地址選好憑證
填寫maven,以及配置maven之后要執(zhí)行的腳本代碼


1538036401(1).jpg

先執(zhí)行maven的clean install命令進(jìn)行依賴更新
然后 去到j(luò)enkins的WORKSPACE下的simons-cloud-eureka項(xiàng)目下鸥跟,就是我們剛才新建的項(xiàng)目
然后執(zhí)行這個(gè)項(xiàng)目下的start.sh的腳本


image.png

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=^/"appName" ----> 先統(tǒng)計(jì)當(dāng)前正在運(yùn)行的的容器中是否包含該項(xiàng)目的名稱
當(dāng)前不存在該容器,直接進(jìn)行啟動(dòng)該操作
否則先/usr/bin/docker stop "word" 停止該容器 /usr/bin/docker rm "word" 然后刪除該容器

1538037236(1).jpg

最后


1538037248(1).jpg

/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的容器即可

1538037364(1).jpg
image.png

這個(gè)時(shí)候我們?cè)跒g覽器里面,打開(kāi)這個(gè)docker對(duì)應(yīng)的eureka的控制頁(yè)面

image.png

完美昏兆,打開(kāi)了枫虏,那么這一篇博文就搞定咯
也歡迎大家的糾正,和留言
想要項(xiàng)目源碼的也可以在下方留言爬虱,我會(huì)給你們git地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隶债,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跑筝,更是在濱河造成了極大的恐慌死讹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曲梗,死亡現(xiàn)場(chǎng)離奇詭異赞警,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)虏两,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門愧旦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人碘举,你說(shuō)我怎么就攤上這事忘瓦「槔” “怎么了引颈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵耕皮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蝙场,道長(zhǎng)凌停,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任售滤,我火速辦了婚禮罚拟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘完箩。我一直安慰自己赐俗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布弊知。 她就那樣靜靜地躺著阻逮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秩彤。 梳的紋絲不亂的頭發(fā)上叔扼,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音漫雷,去河邊找鬼瓜富。 笑死,一個(gè)胖子當(dāng)著我的面吹牛降盹,可吹牛的內(nèi)容都是我干的与柑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼澎现,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仅胞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起剑辫,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤干旧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后妹蔽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體椎眯,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年胳岂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了编整。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乳丰,死狀恐怖掌测,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情产园,我是刑警寧澤汞斧,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布夜郁,位于F島的核電站,受9級(jí)特大地震影響粘勒,放射性物質(zhì)發(fā)生泄漏竞端。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一庙睡、第九天 我趴在偏房一處隱蔽的房頂上張望事富。 院中可真熱鬧,春花似錦乘陪、人聲如沸统台。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饺谬。三九已至,卻和暖如春谣拣,著一層夾襖步出監(jiān)牢的瞬間募寨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工森缠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拔鹰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓贵涵,卻偏偏與公主長(zhǎng)得像列肢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宾茂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容