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用戶進(jìn)入容器
docker exec -it --user root jenkins /bin/bash
查看復(fù)制密碼
cat /var/jenkins_home/secrets/initialAdminPassword

安裝推薦的插件后等待安裝成功
創(chuàng)建用戶,下一步。安裝結(jié)束

配置 jenkins
進(jìn)入jenkins頁面找到,全局配置工具

配置jdk
使用root用戶進(jìn)入容器
docker exec -it --user root jenkins /bin/bash
查看容器內(nèi)jdk路徑,去除網(wǎng)頁勾選自動安裝。
填入到配置中
echo $JAVA_HOME

配置 maven

安裝maven插件
? 
? 
配置 gitee
參照前面安裝maven插件步驟,安裝 gitee插件、publish over ssh插件
進(jìn)入系統(tǒng)配置配置gitee

鏈接名隨便填,jenkens內(nèi)唯一不能重復(fù)

訪問碼云私人令牌獲取地址

點(diǎn)擊測試鏈接,成功如下圖。如果Error參照下面的異常記錄中,額外安裝Jersey 2 API這個插件

建立任務(wù)
構(gòu)建一個maven任務(wù)

選擇gitee鏈接,配置源碼管理中倉庫地址,Credentials中添加輸入碼云賬號密碼

配置gitee webhook
生成webhook密碼去gitee中配置webhook


項(xiàng)目打包配置,配置完成之后應(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/
# 殺掉之前進(jìn)程
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的時(shí)間錯誤
使用root用戶進(jìn)入容器
docker exec -it --user root jenkins /bin/bash
檢查時(shí)區(qū)
cat /etc/timezone
修改時(shí)區(qū)為 Asia/Shanghai
echo Asia/Shanghai > /etc/timezone
構(gòu)建失敗,配置maven中setting文件

安裝插件后重啟,進(jìn)入系統(tǒng)管理中進(jìn)入Managed files,添加配置setting文件

項(xiàng)目build中選擇前面創(chuàng)建的setting文件

總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- Docker搭建Jenkins并自動化打包部署項(xiàng)目的步驟
- 基于Docker與Jenkins實(shí)現(xiàn)自動化部署的原理解析
- jenkins+docker+nginx+nodejs持續(xù)集成部署vue前端項(xiàng)目
- Jenkins+Docker?一鍵自動化部署?SpringBoot?項(xiàng)目的詳細(xì)步驟
- 基于Jenkins自動打包并部署docker環(huán)境的操作過程
- Jenkins整合Docker自動化部署的實(shí)現(xiàn)
- Docker安裝Jenkins并部署Maven項(xiàng)目詳細(xì)教程
- Jenkins+Docker實(shí)現(xiàn)自動化部署
- docker-compose集成Jenkins部署,打包,發(fā)布方式
- Docker部署Jenkins持續(xù)集成(CI)工具的實(shí)現(xiàn)
相關(guān)文章
關(guān)于docker可視化管理工具-DockerUI的安裝
這篇文章主要介紹了關(guān)于docker可視化管理工具-DockerUI的安裝,DockerUI是一款開源強(qiáng)大的輕量級Docker管理工具,還不了解這款工具的朋友一起來看看吧2023-03-03
MacOS使用Docker創(chuàng)建MySQL主從數(shù)據(jù)庫的方法
這篇文章主要介紹了MacOS使用Docker創(chuàng)建MySQL主從數(shù)據(jù)庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
在Linux系統(tǒng)中使用Dockerfile創(chuàng)建Docker的完整步驟
Dockerfile是Docker用來構(gòu)建鏡像的文本文件,包含自定義的指令和格式,這篇文章主要介紹了在Linux系統(tǒng)中使用Dockerfile創(chuàng)建Docker的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
Docker容器遷移Oracle到MySQL的實(shí)現(xiàn)方法
本文主要介紹了Docker容器遷移Oracle到MySQL的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
備份Docker容器中的PostgreSQL數(shù)據(jù)的圖文實(shí)操教程
現(xiàn)在docker容器很方便,可以一鍵部署項(xiàng)目,但是方便部署的同時(shí),也給運(yùn)維帶來了麻煩,docker中的pgsql數(shù)據(jù),如何進(jìn)行備份呢,本文小編給大家就介紹了備份Docker容器中的PostgreSQL數(shù)據(jù)的圖文實(shí)操教程,需要的朋友可以參考下2024-09-09

