日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jenkin+docker 构建项目

發(fā)布時(shí)間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jenkin+docker 构建项目 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

jenkins發(fā)布項(xiàng)目

在構(gòu)建項(xiàng)目之前我們需要做一些配置,安裝一些插件

  • 點(diǎn)擊系統(tǒng)管理

  • 點(diǎn)擊插件管理

  • 需要安裝一下這個(gè)maven插件

  • 插件安裝完成之后我們需要配置一下全局工具 "系統(tǒng)管理>全局工具配置"


注意:安裝了jdk 就不要在點(diǎn)自動(dòng)安裝了

這里需要配置一下jdk , 別名隨便輸入,JAVA_HOME填寫安裝jenkins的服務(wù)器上面的JAVA_HOME就行
如果是linux機(jī)器輸入 下面的命令可以看到

[root@jk ~]# echo $JAVA_HOME /home/vsftpd/root/jdk1.8.0_201
  • jdk配置完成之后還需要配置一下maven(前提是服務(wù)器裝了maven)


和jdk配置差不多,這里要注意,如果HOME路徑不存在就會(huì)報(bào)上圖的錯(cuò)誤,填寫正確就不會(huì)報(bào)錯(cuò),同樣輸入下面的命令可以看到MAVEN_HOME

[root@jk ~]# echo $MAVEN_HOME /opt/maven/apache-maven-3.6.3
  • 暫時(shí)我們就配置這兩個(gè),點(diǎn)擊保存、應(yīng)用就可以了


到這里我們的前期準(zhǔn)備工作已經(jīng)做好了,下面可以開始正式構(gòu)建項(xiàng)目了

  • 首先我們這里構(gòu)建一個(gè)maven項(xiàng)目,輸入自己的項(xiàng)目名稱,點(diǎn)擊完成。

  • 然后我們進(jìn)入構(gòu)建配置頁面,配置一下構(gòu)建參數(shù)

  • 這里我們使用參數(shù)化構(gòu)建,選擇字符參數(shù)(其他類型參數(shù)可以自己嘗試一下)

選擇字符參數(shù)后會(huì)出現(xiàn)以下界面

這里配置下項(xiàng)目名稱(這個(gè)是可有可無的,這里主要是測(cè)試下參數(shù)化配置,后期有其他參數(shù)需要傳遞在詳細(xì)配置)

  • 接下來是源碼管理配置

url輸入自己的Git項(xiàng)目路徑
Credentials 是需要驗(yàn)證git的登錄信息
點(diǎn)擊圖中的 “添加” 按鈕
輸入自己登錄git的用戶名密碼就可以
分支默認(rèn)就行,如果有自己分支,輸入分支名稱就行

注意:這里必須在安裝jenkins的服務(wù)器上安裝有g(shù)it才行,否則待會(huì)構(gòu)建項(xiàng)目會(huì)報(bào)錯(cuò)。
  • 觸發(fā)器這里選擇默認(rèn)就行

  • 接下來就行構(gòu)建前后執(zhí)行的命令配置

  • pre steps 為構(gòu)建前執(zhí)行,這里我們選擇執(zhí)行 shell

輸入下面的執(zhí)行shell 腳本的命令 (腳本文件是項(xiàng)目中編寫好的,文章后面會(huì)給出來)

/bin/bash runPre.sh ${PRODUCT_NAME}

  • build中需要填寫構(gòu)建的pom.xml文件

(這里是單個(gè)項(xiàng)目直接填寫pom.xml就行,如果是maven父子工程,填寫父工程的pom.xml文件地址)

Goals and options:是構(gòu)建項(xiàng)目執(zhí)行的maven命令
(這里是通過docker-maven-plugin 插件將項(xiàng)目構(gòu)建為一個(gè)docker鏡像,shell腳本主要也是控制docker鏡像的啟動(dòng),停止,刪除)

clean package docker:build #需要push要私有倉庫的添加下面的命令 clean package docker:build -DpushImage

Post Steps : 為構(gòu)建后參數(shù)(運(yùn)行腳本文件,主要是通過鏡像啟動(dòng)容器)

/bin/bash runPost.sh ${PRODUCT_NAME}

到這里配置就OK了,點(diǎn)擊保存退出就行

可以看到我們項(xiàng)目現(xiàn)在大概是這樣的

下面我們?cè)賮砜匆幌马?xiàng)目結(jié)構(gòu)

這里我就寫了一個(gè)測(cè)試controller
Dockerfile文件可以不要(主要的之前測(cè)試了用dockerfile文件和用配置兩種情況)

  • 配置文件內(nèi)容如下
<build><finalName>jenkins</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><!-- 定義鏡像名 --><imageName>${project.artifactId}:${project.version}</imageName><!-- 基礎(chǔ)鏡像,編譯為鏡像時(shí)會(huì)下載jdk--><baseImage>java</baseImage> <workdir>/</workdir><cmd>["java", "-version"]</cmd><!-- 相當(dāng)于 java -jar jenkins.jar--><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><!-- 遠(yuǎn)程docker地址 沒有配置docker遠(yuǎn)程訪問的需要配置一下 --><dockerHost>http://1.1.1.1:2375</dockerHost></configuration></plugin></plugins></build>

這里對(duì)于初步接觸dockerfile配置的來說可以理解為
編譯docker鏡像,當(dāng)我們通過鏡像啟動(dòng)容器時(shí)會(huì)執(zhí)行下面的命令

  • 為docker鏡像起名為${project.artifactId}:${project.version}

  • 在容器中下載并按照jdk

  • 執(zhí)行 java -version 命令

  • 執(zhí)行java -jar ${project.build.finalName}.jar 命令

這樣容器就啟動(dòng)起來了。

開啟docker遠(yuǎn)程訪問

  • 最后在看一下shell文件(runPre.sh)
#! /bin/shdockerPs=`sudo docker ps | grep -w $1 | head -n 1 | awk '{print $1}'` if [ "$dockerPs" != "" ];thensudo docker stop $dockerPsif [ $? -eq 0 ];thenecho "$dockerPs 容器已停止"fi fidockerPsAll=`sudo docker ps -a | grep -w $1 | head -n 1 | awk '{print $1}'` if [ "$dockerPsAll" != "" ];thensudo docker rm $dockerPsAllif [ $? -eq 0 ];thenecho "$dockerPsAll 容器已刪除"fi fiimage=`sudo docker images | grep -w $1 | head -n 1 | awk '{print $3}'` if [ "$image" != "" ] ;thensudo docker rmi $imageif [ $? -eq 0 ];thenecho "$image 鏡像已刪除"fi fi
  • runPost.sh
#! /bin/shimage=`sudo docker images | grep -w $1 | head -n 1 | awk '{print $3}'`#啟動(dòng)容器 sudo docker run -itd --name $1 -p 31002:31002 $imageif [ $? -eq 0 ];thenecho "$1 容器已啟動(dòng)" fi

這里注意項(xiàng)目文件放的位置不要隨意改動(dòng)。

  • 下面我們就可以開始構(gòu)建項(xiàng)目了,點(diǎn)擊 Build with Parameters,在點(diǎn)擊開始構(gòu)建

  • 可以看到項(xiàng)目就開始構(gòu)建

  • 點(diǎn)擊 #24 這次構(gòu)建進(jìn)去看下日志


這里可以看到,它是先去我們給定的git地址下載項(xiàng)目,然后執(zhí)行我們配置好的runPre.sh 腳本
這里因?yàn)槲抑皹?gòu)建過,所以會(huì)出現(xiàn)刪除容器,第一次構(gòu)建不會(huì)出現(xiàn)
然后就開始執(zhí)行docker-maven的構(gòu)建操作
構(gòu)建完成之后就會(huì)執(zhí)行我們?cè)O(shè)置的腳本 runPost.sh (啟動(dòng)容器)

這里可以看到容器啟動(dòng)成功了。
網(wǎng)頁輸入地址就可以訪問到我們的程序
后面我們改了代碼,直接提交git,然后點(diǎn)擊構(gòu)建項(xiàng)目就行
(jenkins是可以自動(dòng)構(gòu)建了,這里主要的初步構(gòu)建,就沒有在說自動(dòng)構(gòu)建的情況)

服務(wù)器上輸出 docker ps 可以看到我們構(gòu)建的容器正在運(yùn)行中

[root@jk ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5a9f773f94ff 759df2d31d10 "java -jar jenkins.j…" 6 minutes ago Up 6 minutes 0.0.0.0:31002->31002/tcp jenkin s 079205d605c3 rabbitmq:management "docker-entrypoint.s…" 3 days ago Up 3 days 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbit mq c6f4d59b04c5 bcef5fd2979d "docker-entrypoint.s…" 3 weeks ago Up 8 days 0.0.0.0:27017->27017/tcp mongo 1093a905e2cc 6678c7c2e56c "nginx -g 'daemon of…" 4 weeks ago Up 2 days 0.0.0.0:8081->80/tcp nginx 4b02188b00fe registry "/entrypoint.sh /etc…" 4 weeks ago Up 5 days 0.0.0.0:5000->5000/tcp vigoro us_williamson

注 : 第一次啟動(dòng)可能會(huì)報(bào)以下錯(cuò)誤sudo: no tty present and no askpass program specified

附上解決方法

總結(jié)

以上是生活随笔為你收集整理的jenkin+docker 构建项目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。