docker+jenkins+gitee配置持續(xù)集成部署方式
基于docker安裝jenkins
創(chuàng)建本地映射jenkins資源目錄
mkdir -p /home/docker/jenkins
這邊配置的是外網(wǎng)訪問9401端口
docker run \ -u root \ -d \ -p 9401:8080 \ --restart always \ --privileged=true \ -v /home/docker/jenkins:/var/jenkins_home \ --name jenkins \ jenkinsci/blueocean
如果沒有jenkins鏡像會自動下載,我下載的鏡像是
執(zhí)行成功后訪問如圖
使用root用戶進入容器
docker exec -it --user root jenkins /bin/bash
查看復(fù)制密碼
cat /var/jenkins_home/secrets/initialAdminPassword
安裝推薦的插件后等待安裝成功
創(chuàng)建用戶,下一步。安裝結(jié)束
配置 jenkins
進入jenkins頁面找到,全局配置工具
配置jdk
使用root用戶進入容器
docker exec -it --user root jenkins /bin/bash
查看容器內(nèi)jdk路徑,去除網(wǎng)頁勾選自動安裝。
填入到配置中
echo $JAVA_HOME
配置 maven
安裝maven插件
?
?
配置 gitee
參照前面安裝maven插件步驟,安裝 gitee插件、publish over ssh插件
進入系統(tǒng)配置配置gitee
鏈接名隨便填,jenkens內(nèi)唯一不能重復(fù)
訪問碼云私人令牌獲取地址
點擊測試鏈接,成功如下圖。如果Error參照下面的異常記錄中,額外安裝Jersey 2 API這個插件
建立任務(wù)
構(gòu)建一個maven任務(wù)
選擇gitee鏈接,配置源碼管理中倉庫地址,Credentials中添加輸入碼云賬號密碼
配置gitee webhook
生成webhook密碼去gitee中配置webhook
項目打包配置,配置完成之后應(yīng)用保存。
持續(xù)部署
首次先立即構(gòu)建一次,通過日志查看找到docker內(nèi)jenkins生成jar包的目錄
如果構(gòu)建不成功,缺少包的話參照下面異常記錄配置maven中setting文件
配置腳本
#!/bin/bash # target打包生成jar包的目錄 JAR_PATH=/var/jenkins_home/workspace/sc-yadong-api/yadong-server-api/yadong-server-api-wx/target/ # 殺掉之前進程 ps -ef | grep "yadong-server-api-wx" | grep -v grep | awk '{print $2}' | xargs kill -9 # 啟動 cd $JAR_PATH nohup java -jar -Dspring.profiles.active=prod yadong-server-api-wx-0.0.1-exec.jar &
?
異常記錄
Gitee鏈接失敗
查了系統(tǒng)日志是找不到類
Caught unhandled exception with ID 808d1ade-eb27-42d4-a033-924318d6c7bc java.lang.ClassNotFoundException: javax.ws.rs.ext.MessageBodyReader at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1402) at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1357) at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1112) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) Caused: java.lang.NoClassDefFoundError: javax/ws/rs/ext/MessageBodyReader at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(Unknown Source) at org.apache.tools.ant.AntClassLoader.defineClassFromData(AntClassLoader.java:1172) at org.apache.tools.ant.AntClassLoader.getClassFromStream(AntClassLoader.java:1340) at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1392) at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1357) at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1112) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(Unknown Source) at org.apache.tools.ant.AntClassLoader.defineClassFromData(AntClassLoader.java:1172) at org.apache.tools.ant.AntClassLoader.getClassFromStream(AntClassLoader.java:1340) at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1392) at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1357) at jenkins.ClassLoaderReflectionToolkit.loadClass(ClassLoaderReflectionToolkit.java:148) at hudson.ClassicPluginStrategy$DependencyClassLoader.findClass(ClassicPluginStrategy.java:650) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at org.apache.tools.ant.AntClassLoader.findBaseClass(AntClassLoader.java:1421) at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1108) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at com.gitee.jenkins.gitee.api.impl.ResteasyGiteeClientBuilder.buildClient(ResteasyGiteeClientBuilder.java:115) at com.gitee.jenkins.gitee.api.impl.ResteasyGiteeClientBuilder.buildClient(ResteasyGiteeClientBuilder.java:81) at com.gitee.jenkins.connection.GiteeConnection.getClient(GiteeConnection.java:116) at com.gitee.jenkins.connection.GiteeConnectionConfig.doTestConnection(GiteeConnectionConfig.java:145) at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(Unknown Source) at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:398) at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:410) at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:208) at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:141) at org.kohsuke.stapler.MetaClass$11.doDispatch(MetaClass.java:558) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:59) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)
安裝這個Jersey 2 API插件,安裝完成后重啟Jenkins
修改Jenkins的時間錯誤
使用root用戶進入容器
docker exec -it --user root jenkins /bin/bash
檢查時區(qū)
cat /etc/timezone
修改時區(qū)為 Asia/Shanghai
echo Asia/Shanghai > /etc/timezone
構(gòu)建失敗,配置maven中setting文件
安裝插件后重啟,進入系統(tǒng)管理中進入Managed files,添加配置setting文件
項目build中選擇前面創(chuàng)建的setting文件
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Docker搭建Jenkins并自動化打包部署項目的步驟
- 基于Docker與Jenkins實現(xiàn)自動化部署的原理解析
- jenkins+docker+nginx+nodejs持續(xù)集成部署vue前端項目
- Jenkins+Docker?一鍵自動化部署?SpringBoot?項目的詳細步驟
- 基于Jenkins自動打包并部署docker環(huán)境的操作過程
- Jenkins整合Docker自動化部署的實現(xiàn)
- Docker安裝Jenkins并部署Maven項目詳細教程
- Jenkins+Docker實現(xiàn)自動化部署
- docker-compose集成Jenkins部署,打包,發(fā)布方式
- Docker部署Jenkins持續(xù)集成(CI)工具的實現(xiàn)
相關(guān)文章
docker容器啟動設(shè)置固定IP的實現(xiàn)
本文主要介紹了docker容器啟動設(shè)置固定IP的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12docker-compose實現(xiàn)wireshark對linux主機進行抓包
這篇文章主要為大家介紹了docker-compose實現(xiàn)wireshark對linux主機進行抓包腳本示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12Docker中鏡像構(gòu)建文件Dockerfile與相關(guān)命令的詳細介紹
這篇文章主要介紹了Docker中鏡像構(gòu)建文件Dockerfile與相關(guān)命令的相關(guān)資料,文中介紹的很詳細,相信對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。2017-02-02使用Docker compose編排Laravel應(yīng)用的方法
本篇文章主要介紹了使用Docker compose編排Laravel應(yīng)用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器詳細介紹
這篇文章主要介紹了 Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器詳細介紹的相關(guān)資料,這里對Docker 數(shù)據(jù)卷,數(shù)據(jù)卷容器的感念及相關(guān)操作進行了介紹,需要的朋友可以參考下2016-11-11Centos8.3、docker部署springboot項目實戰(zhàn)案例分析
這篇文章主要介紹了Centos8.3、docker部署springboot項目實戰(zhàn)記錄,包括docker安裝,開啟docker遠程訪問端口的方法及配置idea docker環(huán)境的方法,需要的朋友可以參考下2021-06-06Docker使用Jumpserver搭建一個安全的堡壘機系統(tǒng)
堡壘機作為一種重要的安全工具,能夠有效地管理服務(wù)器訪問權(quán)限,并提供會話審計功能,以保障系統(tǒng)的安全性和穩(wěn)定性,本文將介紹Jumpserver,并指導(dǎo)如何搭建和配置Jumpserver來實現(xiàn)安全的堡壘機管理,需要的朋友可以參考下2025-04-04Docker本地部署Firefox火狐瀏覽器并遠程訪問的流程
在Docker中打開Firefox意味著我們將在一個Docker容器中運行Firefox瀏覽器,下面是一個簡單的示例,演示如何在Docker中打開Firefox,本次實踐部署環(huán)境為本地環(huán)境,感興趣的朋友一起看看吧2023-11-11