創(chuàng)建項(xiàng)目
創(chuàng)建個(gè)web項(xiàng)目
我這里直接用Spring Web自動(dòng)生成的demos
啟動(dòng)項(xiàng)目,訪問(wèn)展示如下默認(rèn)頁(yè)面信息
項(xiàng)目新增Docker構(gòu)建配置
在項(xiàng)目下新建docker目錄,新增Dockerfile、docker-compose.yml文件
Dockerfile文件,將mytest.jar 復(fù)制到容器的/usr/local/目錄下,在/usr/local執(zhí)行命令java -jar mytest.jar
FROM daocloud.io/library/java:8u40-jdk
COPY mytest.jar /usr/local/
WORKDIR /usr/local
CMD java -jar mytest.jar
docker-compose.yml文件,當(dāng)前目錄以Dockerfile構(gòu)建鏡像,鏡像叫mytest,版本v1.0,容器名字mytest,端口7777
version: '3.1'
services:
mytest:
build:
context: ./
dockerfile: Dockerfile
image: mytest:v1.0
container_name: mytest
ports:
- 7777:8080
修改pom.xml文件
build下添加配置,讓jar包以mytest為名(mytest.jar,Docker構(gòu)建里也是設(shè)置的復(fù)制名為這個(gè)jar包)
<finalName>mytest</finalName>
注意:如果跟我一樣用默認(rèn)生成的web還需修改主類配置,將主類配置修改如下。不然在本地正常運(yùn)行,打成jar包后默認(rèn)配置會(huì)跳過(guò)然后報(bào)錯(cuò):no main manifest attribute, in mytest.jar
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.monster.mytest.MytestApplication</mainClass>
</manifest>
</archive>
</configuration>
上傳代碼
將代碼上傳至Gitlab
現(xiàn)在Gitlab還未做任何動(dòng)作,先去Gitlab(192.168.170.111:8888)新建項(xiàng)目
這里測(cè)試我直接設(shè)置的公開(kāi)的,不想多一步密碼的操作
在IDEA添加Git遠(yuǎn)程
推送到遠(yuǎn)程倉(cāng)庫(kù)
第一次推送會(huì)提示要令牌
那我們就去Gitlab生成個(gè)令牌,來(lái)到用戶設(shè)置里面 > Access Tokens
Token名稱隨意,必須授權(quán)api、read_user這兩個(gè)范圍,點(diǎn)擊創(chuàng)建即可
點(diǎn)擊創(chuàng)建按鈕后,不要刷新或關(guān)閉頁(yè)面,立馬滑到最上面可以看見(jiàn)生成的token
只展示一次,刷新或關(guān)閉頁(yè)面就得重新生成。
將token復(fù)制到IDEA提示的令牌款里既可以推送到Gitlab倉(cāng)庫(kù)了。
Jenkins配置
添加遠(yuǎn)程服務(wù)器
首先來(lái)到Jenkins配置 > 系統(tǒng)管理 > 系統(tǒng)配置,滑動(dòng)到最下面添加SSH遠(yuǎn)程服務(wù)器,這里就是Publish Over SSH插件起到的重要。
將你需要把項(xiàng)目部署到哪臺(tái)服務(wù)器,就添加哪臺(tái)服務(wù)器的鏈接信息,例如這里我把項(xiàng)目部署到服務(wù)器192.168.170.111上(注意:部署的遠(yuǎn)程服務(wù)器需要安裝好Docker)
設(shè)置好信息可以點(diǎn)擊右下角的test configuration 測(cè)試一下連通性,是否能正常連接。
密碼得點(diǎn)擊左下角的“高級(jí)”按鈕設(shè)置,支持使用密鑰對(duì)的方式遠(yuǎn)程連接。
Jenkins任務(wù)創(chuàng)建
新建個(gè)任務(wù),構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目
源碼管理處設(shè)置你的git倉(cāng)庫(kù)地址,我這里設(shè)置的公開(kāi)倉(cāng)庫(kù)拉去代碼的時(shí)候無(wú)需賬號(hào)密碼,私有的點(diǎn)擊高級(jí)按鈕上面的“添加”按鈕添加賬號(hào)或密鑰
需要注意你的Gitlab倉(cāng)庫(kù)的主分支是什么,設(shè)置對(duì)應(yīng)不然拉去不到代碼
Build Steps設(shè)置maven,選中你安裝的maven名稱,目標(biāo)命令:拉取完代碼后清理構(gòu)建跳過(guò)測(cè)試生產(chǎn)target目錄此時(shí)還在Jenkins服務(wù)器。
clean package -DskipTests
SSH Publishers,選擇我們要發(fā)布到哪臺(tái)服務(wù)器上,就是前面在添加的170.111那臺(tái),配置命令做了下面兩個(gè)步驟。
Transfer SetSource files:將target目錄下所有.jar的文件和docker目錄下的所有文件復(fù)制到遠(yuǎn)程應(yīng)用服務(wù)器的/usr/local/test目錄下。(Jenkins系統(tǒng)設(shè)置里面SSH添加服務(wù)器時(shí)設(shè)置的默認(rèn)遠(yuǎn)程路徑)
target/*.jar docker/*
Exec command:這時(shí)170.111的/usr/local/test/目錄下有target和docker兩個(gè)目錄。執(zhí)行下面的代碼命令把target目錄下人jar包移動(dòng)到Docker目錄里來(lái),然后在執(zhí)行容器關(guān)閉和后臺(tái)啟動(dòng)構(gòu)建動(dòng)作
cd /usr/local/test/docker
mv ../target/*jar ./
docker compose down
docker compose up -d --build
Jenkins構(gòu)建
點(diǎn)擊Jenkins任務(wù)構(gòu)建按鈕,觀看日志成功
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.906 s
[INFO] Finished at: 2024-03-11T09:03:12Z
[INFO] ------------------------------------------------------------------------
SSH: Connecting from host [3821aea39450]
SSH: Connecting with configuration [應(yīng)用服務(wù)器-170.111] ...
SSH: EXEC: completed after 3,402 ms
SSH: Disconnecting configuration [應(yīng)用服務(wù)器-170.111] ...
SSH: Transferred 3 file(s)
Build step 'Send files or execute commands over SSH' changed build result to SUCCESS
Finished: SUCCESS
構(gòu)建完成后,會(huì)看見(jiàn)在170.111服務(wù)器跑起來(lái)個(gè)名稱叫mytest容器,映射端口7777,鏡像mytest,版本v1.0
訪問(wèn)頁(yè)面,192.168.170.111:7777
測(cè)試持續(xù)集成
修改項(xiàng)目代碼
這里我修改默認(rèn)的index.html頁(yè)面內(nèi)容
只需要把交代碼提交到Gitlab
然后在Jenkins上,重新點(diǎn)擊一下構(gòu)建按鈕,構(gòu)建完成后刷新頁(yè)面。
已經(jīng)更新頁(yè)面內(nèi)容了,到此完成了CI持續(xù)集成動(dòng)作。
注意
由于每次構(gòu)建都會(huì)產(chǎn)生一個(gè)同名稱同版本的鏡像,導(dǎo)致出現(xiàn)多個(gè)為none的鏡像,會(huì)占用磁盤空間
[root@170.111 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mytest v1.0 79953e7736f6 19 hours ago 833MB
<none> <none> 341965b30bdb 19 hours ago 833MB
<none> <none> 5be66eda3a9f 21 hours ago 833MB
<none> <none> 76502810f6e2 21 hours ago 833MB
<none> <none> a081353ee813 46 hours ago 816MB
<none> <none> 6274e74dbfe5 46 hours ago 816MB
<none> <none> 92517e725bf1 47 hours ago 816MB
<none> <none> 3e2cef065c83 47 hours ago 816MB
<none> <none> 62562f7fbc8f 47 hours ago 816MB
<none> <none> cd7354c84a9e 2 days ago 816MB
<none> <none> 27e5c4ec8cf6 2 days ago 816MB
<none> <none> 4c0050b78b5f 2 days ago 816MB
<none> <none> 02a8eea88e51 2 days ago 816MB
<none> <none> fb76f18fc433 2 days ago 816MB
<none> <none> 6a0d37f91dc0 2 days ago 816MB
可以通過(guò)Docker命令清理:docker image prune -f
[root@170.111 ~]# docker image prune -f
Deleted Images:
deleted: sha256:92517e725bf1e5d7da3c1dda813abd0ecfb384e42e24274d688f178edb3274a5
deleted: sha256:6274e74dbfe5859d0c524cf944f4d6367f7ccb838b6959a2305cb3074a7a5db2
deleted: sha256:3e2cef065c83863c4fc72c6daaa91ad863ffb6169da989401439edd7b84da217
deleted: sha256:974684128082884b37b1ed66bdc92a0df158c46651bcc72a10016bc8254f5cc5
deleted: sha256:6a0d37f91dc07c88d018a2e5416a4421dacc03299d16af79fdac03863753cff5
deleted: sha256:ade3c592595e3988a9a11cecfc153d03c9125b3e0c24f0cdaf642cfadebd659a
deleted: sha256:27e5c4ec8cf67ea3e8fc1bf2e18328a63515d19332808480e263732347db96bf
deleted: sha256:4c0050b78b5f40dd2f005f92f7733c92f2ed8618e6e8deedcf72695795d2e07a
deleted: sha256:052d315bd2eb53b89eee437218b2abf0dc1a53db7fd6122fc8c56dcf8b0afb60
deleted: sha256:cd7354c84a9e307819628e3c7ac23c7d0d5a84783c659c3b85355f22fb12673e
deleted: sha256:6923a5cc1787c1a985feeec6efdb28ddb202cad65e6f3454bd2a08e8f1573326
deleted: sha256:02a8eea88e51a5874b2fbd14e267f717398251dc34f073ea5ca1bed4cf2c514e
deleted: sha256:62562f7fbc8f6f059072855fec452aa9ffd4927f130a069c59a0ee097b5d5ab4
deleted: sha256:a081353ee81397bb5464a44409248d0c192e7b57eb247af4ad74ef7f4454da68
deleted: sha256:0461e94f875334812d180c094c2a998d89ae74da08b6f34b0cedcdaf755126de
deleted: sha256:341965b30bdba2baabdddcdf3d5e3e98ff3c58eb696fe186c40646d05ffe7d9d
deleted: sha256:fb76f18fc433d3fbf8aa42dc0e2ee8dfaad6ee722fd1390288c37b7591cd7563
deleted: sha256:5be66eda3a9f5fbb5284e6e785a9cb5ac2484c6d5c53491d595a89192ca6aea3
也加到Jenkins執(zhí)行命令中,就不用我們手動(dòng)去清理了文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-839268.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-839268.html
到了這里,關(guān)于DevOps-Jenkins-CI持續(xù)集成操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!