平時(shí)上線的你可能是重復(fù)著以下步驟:
①提交代碼→②本地打包→③將應(yīng)用上傳到服務(wù)器并啟動(dòng)
假如線上有一個(gè)bug爽篷,你可能需要再一次歷經(jīng)上面三個(gè)步驟才算真正解決掉這個(gè)bug叹阔。
有了Jenkins和Docker兩大法寶后叮姑,你上線的步驟變?yōu)椋?br>
①提交代碼→②登錄Jenkins啟動(dòng)任務(wù)(新建任務(wù)在第一次上線時(shí)完成)
對(duì)比上面的步驟少了一個(gè)步驟贱傀。Jenkins和Docker幫助我們解決了什么問(wèn)題呢押桃?不用再手動(dòng)打包了况毅,這是因?yàn)榭梢栽贘enkins網(wǎng)頁(yè)配置Maven打包命令。不用再手動(dòng)輸入命令啟動(dòng)應(yīng)用了异吻,這是因?yàn)镴enkins支持遠(yuǎn)程SSH工具裹赴,SSH工具就是通過(guò)腳本來(lái)執(zhí)行遠(yuǎn)程應(yīng)用的利器。
1诀浪、Docker的安裝及配置
可自行搜索安裝篮昧。
2、Jenkins的安裝及配置
2.1笋妥、拉取Jenkins的Docker鏡像
docker pull jenkins/jenkins:lts
lts表示官方最新且穩(wěn)定的版本懊昨,大小為701M。
2.2春宣、預(yù)先解決插件下載龜速問(wèn)題
2.2.1酵颁、查看jenkins版本號(hào)
cat /mydata/jenkins_home/config.xml
版本號(hào)位于第四行的version標(biāo)簽內(nèi),這里的版本號(hào)為2.263.1月帝。為啥要查一下版本號(hào)呢躏惋?根據(jù)筆者的經(jīng)驗(yàn),隨著版本的升級(jí)嚷辅,鏡像源對(duì)應(yīng)的初始配置內(nèi)容也會(huì)發(fā)生變化簿姨,所以舊版本被修改的內(nèi)容可能已經(jīng)不適用了。
2.2.2簸搞、default.json文件中針對(duì)部分內(nèi)容進(jìn)行替換
執(zhí)行命令:
sed -i 's/www.google.com/www.baidu.com/g' /mydata/jenkins_home/updates/default.json
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /mydata/jenkins_home/updates/default.json
注:第二行需要修改的內(nèi)容可能會(huì)隨著Jenkins的版本升級(jí)發(fā)生變化扁位,一般情況下,找到updates開(kāi)頭的二級(jí)域名即可趁俊。
2.3域仇、在Docker環(huán)境下運(yùn)行Jenkins
docker run -p 8080:8080 -p 50000:5000 --name jenkins \
-u root \
-v /mydata/jenkins_home:/var/jenkins_home \
-d jenkins/jenkins:lts
命令詳解:
第一行:
-p:表示【指定】端口映射,格式為主機(jī)(容器)端口:容器端口寺擂,啟動(dòng)時(shí)以冒號(hào)左邊的端口號(hào)為準(zhǔn)暇务。這條命令包含兩個(gè)端口映射:
8080是訪問(wèn)Jenkins網(wǎng)頁(yè)的端口號(hào)泼掠,如果想通過(guò)其他端口號(hào)來(lái)訪問(wèn)Jenkins,通過(guò)更改命令中的端口號(hào)來(lái)啟動(dòng)是行不通的垦细;
50000端口號(hào)的由來(lái):Jenkins實(shí)際上是使用JNLP語(yǔ)言來(lái)建設(shè)服務(wù)器的择镇,而JNLP所需的服務(wù)端口正是50000;
--name 容器名稱:指定啟動(dòng)時(shí)的容器的名稱括改,通過(guò)自定義的命名方式能便于快速地發(fā)現(xiàn)容器的位置沐鼠,這里的容器名稱是jenkis;
第二行:
-u root:指定用戶名為root的用戶來(lái)啟動(dòng)Jenkins;
第三行:
-v /mydata/jenkins_home:/var/jenkins_home:掛載了宿主機(jī)的一個(gè)指定目錄到/var/jenkins_home叹谁,相當(dāng)于設(shè)置了自定義的JENKINS_HOME;
第四行:
-d jenkins/jenkins:lts:后臺(tái)運(yùn)行容器乘盖,jenkins/jenkins:lts為拉取時(shí)的鏡像名稱焰檩。
2.4、進(jìn)入Jenkins網(wǎng)頁(yè)
2.4.1订框、獲取管理員密碼
方法1:Windows-IDEA的Docker控制臺(tái)
方法2:Linux-啟動(dòng)日志
docker logs jenkins
2.4.2析苫、解鎖Jenkins
輸入網(wǎng)址:服務(wù)器IP地址:8080,使用上一步獲取的管理員密碼來(lái)解鎖穿扳。
2.4.3衩侥、安裝推薦的插件
2.4.4、等待插件安裝完成矛物,創(chuàng)建管理員賬號(hào)
2.4.5茫死、實(shí)例配置
2.4.6、必備插件安裝
點(diǎn)擊Manage Jenkins→Manage Plugins進(jìn)入到插件管理界面
-
SSH安裝履羞,用于配置遠(yuǎn)程站點(diǎn)的參數(shù)
圖8
等待安裝完成后峦萎,點(diǎn)擊返回首頁(yè)→Manage Jenkins→Manage Plugins繼續(xù)安裝。
-
Role-based Authorization Strategy安裝忆首,支持根據(jù)角色管理權(quán)限爱榔。
圖9
2.4.7、全局Maven配置
點(diǎn)擊Manage Jenkins-Global Tool Configuration糙及,新增Maven配置
2.4.8详幽、全局SSH配置
-
添加憑據(jù)
點(diǎn)擊首頁(yè)→Manage Jenkins→Manage Credentials→添加憑據(jù)
圖11
輸入信息保存憑據(jù)
圖12 -
SSH遠(yuǎn)程主機(jī)配置
圖13
2.4.9、角色權(quán)限配置
-
全局安全配置
Jenkins的角色管理插件可以幫助我們管理Jenkins的用戶浸锨,對(duì)于不同的角色可以給到其應(yīng)有的權(quán)限唇聘。
點(diǎn)擊首頁(yè)→Manage Jenkins→Configure Global Security
圖14 -
管理和分配角色
點(diǎn)擊首頁(yè)→Manage Jenkins
圖15.png
3、SpringBoot應(yīng)用的打包并部署
3.1柱搜、代碼上傳到Git倉(cāng)庫(kù)
Git倉(cāng)庫(kù)沒(méi)有指定廠商雳灾,可以是Gitlab、GitHub和Gitee其中的一個(gè)冯凹。
3.2谎亩、打包前準(zhǔn)備
- 配置檢查
這里的打包是通過(guò)docker構(gòu)建應(yīng)用的鏡像并上傳到docker容器內(nèi)炒嘲,需要在pom.xml中進(jìn)行配置,打開(kāi)pom.xml匈庭,定位到<plugins>標(biāo)簽下夫凸,補(bǔ)充docker插件的配置內(nèi)容:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>${project.artifactId}:${project.version}</imageName>
<dockerHost>http://192.168.1.41:2375</dockerHost>
<baseImage>anapsix/alpine-java:8_server-jre_unlimited</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]
</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<dockerHost>標(biāo)簽的內(nèi)容需要替換成自己的Docker鏡像倉(cāng)庫(kù)地址,注意生產(chǎn)環(huán)境切勿隨意開(kāi)啟2375端口阱持,可以通過(guò)在云服務(wù)內(nèi)指定連接IP的方式開(kāi)啟2375端口夭拌。
<baseImage>標(biāo)簽中內(nèi)容是JDK環(huán)境,anapsix/alpine-java:8_server-jre_unlimited的優(yōu)點(diǎn)在于打包后的鏡像體積小衷咽,一般在一兩百兆左右鸽扁,節(jié)省了大量的硬盤(pán)空間。
- 編寫(xiě)執(zhí)行腳本
mkdir /mydata/sh
cd /mydata/sh
echo '#!/usr/bin/env bash' > start.sh
echo "app_name='應(yīng)用名稱'" >> start.sh
echo "docker stop ${app_name}" >> start.sh
echo "echo '----stop container----'" >> start.sh
echo "docker rm ${app_name}" >> start.sh
echo "echo '----rm container----'" >> start.sh
echo "docker run --name ${app_name} -d -p 主機(jī)(容器)端口:容器端口 -v /mydata/app/${app_name}/logs:/home/workspace/app/logback ${app_name}:0.0.1-SNAPSHOT" >> start.sh
echo "echo '----start container----'" >> start.sh
- 給執(zhí)行腳本添加可執(zhí)行權(quán)限
chmod +x ./mall-tiny-jenkins.sh
3.3镶骗、在Jenkins中新建任務(wù)
3.3.1桶现、新建一個(gè)任務(wù)
點(diǎn)擊首頁(yè)→新建任務(wù)
3.3.2、添加Git倉(cāng)庫(kù)地址
3.3.3鼎姊、添加Maven構(gòu)建
3.3.4骡和、添加遠(yuǎn)程執(zhí)行腳本構(gòu)建
command項(xiàng)輸入腳本執(zhí)行命令:/mydata/sh/start.sh
點(diǎn)擊保存后就可以在任務(wù)列表中看到新創(chuàng)建的任務(wù)了,點(diǎn)擊最后一個(gè)圖標(biāo)運(yùn)行任務(wù)相寇,點(diǎn)擊控制臺(tái)輸出可查看打印內(nèi)容慰于。