1、创建docker在主机的jenkins数据映射目录

mkdir -p /usr/local/dockerData/jenkins_home
chown -R 777 /usr/local/dockerData/jenkins_home

2、这边配置的是外网访问6008端口

docker run \
  -u root \
  -d \
  -p 6008:8080 \
  --restart always \
  --privileged=true \
  -v /usr/local/dockerData/jenkins_home:/var/jenkins_home \
  --name jenkins \
  jenkinsci/blueocean

如果没有jenkins镜像会自动下载


3、如果报错(没有报错可以忽略这条)

运行报错 docker0: iptables: No chain/target/match by that name.

如何解决


4、浏览器访问http://IP:6008

浏览器访问.jpg

使用root用户进入容器(直接查看主机挂载的文件也行)

docker exec -it --user root jenkins /bin/bash

查看、复制密码

cat /var/jenkins_home/secrets/initialAdminPassword

查看复制密码.jpg


5、安装推荐插件



6、创建用户,下一步。安装结束

创建用户1.jpg

创建用户2.jpg


7、配置 jenkins

  • 进入jenkins页面找到,全局配置工具

配置jenkins.png

  • 配置jdk

    使用root用户进入容器

docker exec -it --user root jenkins /bin/bash

查看容器内jdk路径,去除网页勾选自动安装。填入到配置中

echo $JAVA_HOME

容器中默认版本是jdk11,先手动安装一个jdk1.8


配置jdk.png


  • 配置maven

配置maven.png

点击保存


  • 安装maven插件

安装maven插件1.png

安装maven插件2.png



  • 配置 gitee

参照前面安装maven插件步骤,安装 gitee插件、publish over ssh插件

  1. 进入系统配置配置gitee

配置gitee1.png

链接名随便填,jenkens内唯一不能重复


  1. 访问码云私人令牌获取地址

配置gitee2.png
配置gitee3.png


  1. 选择刚刚添加的令牌

配置gitee4.png

  1. 点击测试链接
    配置gitee5.png

  1. ok 点击保存


8、 建立任务

  • 构建一个maven任务

构建maven任务1.png

构建maven任务2.png


  • 选择gitee链接,配置源码管理中仓库地址,Credentials中添加输入码云账号密码

配置Credentials1.png
配置Credentials2.png


  • 配置gitee webhook

  1. 记住这个地址

配置gitee webhook1.png

  1. 点击生成密码

配置gitee webhook2.png

  1. 生成webhook密码去gitee中配置webhook

配置gitee webhook3.png

配置gitee webhook4.png



  • 项目打包配置

项目打包配置.png

配置完成之后应用保存



9、持续部署

  • 首次先立即构建一次,通过日志查看找到docker内jenkins生成jar包的目录

如果构建不成功,缺少包的话参照下面异常记录配置maven中setting文件


构建完成

构建完成.png


  • 查看文件已生成

查看文件已生成.png



  • 配置脚本

配置脚本1.png

clean package -U -Dmaven.test.skip=true

设置构建完成之后要执行的shell
配置脚本2.png

# 禁止jenkins执行shell结束后杀死衍生线程
BUILD_ID=DONTKILLME

#!/bin/bash
#服务名称
SERVER_NAME=zboot-admin
# 源jar路径,mvn打包完成之后,target目录下的jar包名称,这里使用jar包,用java -jar 命令执行 
JAR_NAME=zboot-admin-1.0
# 源jar路径 
#/root/.jenkins/workspace/workspace--->jenkins 工作目录
#demo 项目目录
#target 打包生成jar包的目录
JAR_PATH=/root/.jenkins/workspace/zboot-admin/target
# 打包完成之后,把jar包移动到运行jar包的目录--->work_daemon,work_daemon这个目录需要自己提前创建
JAR_WORK_PATH=/usr/local/src/zboot-admin

echo "查询进程id-->$JAR_NAME"
PID=$(ps x | grep "$JAR_NAME" |  grep -v grep | awk '{print $1}')
echo "得到进程ID:$PID"
echo "结束进程"
for id in $PID
do
        kill -9 $id 
        echo "killed $id" 
done
echo "结束进程完成"

#复制jar包到执行目录
echo "复制jar包到执行目录:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
echo "复制jar包完成"
cd $JAR_WORK_PATH
nohup java -jar -Xmx256M -Xms128M $JAR_WORK_PATH/$JAR_NAME.jar --spring.profiles.active=dev > $JAR_WORK_PATH/nohup.out 2>&1 &

echo "starting service..."
sleep 20

tail -n 500 $JAR_WORK_PATH/nohup.out

注意:如果不加 BUILD_ID=DONTKILLME ,Jenkins会在脚本执行完成之后,杀死脚本启动的程序





10、异常记录

  • Gitee链接失败

Gitee链接失败.png

查了系统日志是找不到类

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

安装Jersey 2 API插件.png


  • 修改Jenkins的时间错误

使用root用户进入容器

docker exec -it --user root jenkins /bin/bash

检查时区

cat /etc/timezone

修改时区为 Asia/Shanghai

echo Asia/Shanghai > /etc/timezone


  • 构建失败,配置maven中setting文件

构建失败1.png

安装插件后重启,进入系统管理中进入Managed files,添加配置setting文件

构建失败2.png

项目build中选择前面创建的setting文件

构建失败3.png



原文地址:https://blog.csdn.net/al961105114/article/details/123547311