Docker+Jenkins+Gitee配置持续集成部署
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
使用root用户进入容器(直接查看主机挂载的文件也行)
docker exec -it --user root jenkins /bin/bash
查看、复制密码
cat /var/jenkins_home/secrets/initialAdminPassword
5、安装推荐插件
6、创建用户,下一步。安装结束
7、配置 jenkins
-
进入jenkins页面找到,全局配置工具
-
配置jdk
使用root用户进入容器
docker exec -it --user root jenkins /bin/bash
查看容器内jdk路径,去除网页勾选自动安装。填入到配置中
echo $JAVA_HOME
容器中默认版本是jdk11,先手动安装一个jdk1.8
-
配置maven
点击保存
-
安装maven插件
-
配置 gitee
参照前面安装maven插件步骤,安装 gitee插件、publish over ssh插件
- 进入系统配置配置gitee
链接名随便填,jenkens内唯一不能重复
- 选择刚刚添加的令牌
- 点击测试链接
- ok 点击保存
8、 建立任务
-
构建一个maven任务
-
选择gitee链接,配置源码管理中仓库地址,Credentials中添加输入码云账号密码
-
配置gitee webhook
- 记住这个地址
- 点击生成密码
- 生成webhook密码去gitee中配置webhook
-
项目打包配置
配置完成之后应用保存
9、持续部署
-
首次先立即构建一次,通过日志查看找到docker内jenkins生成jar包的目录
如果构建不成功,缺少包的话参照下面异常记录配置maven中setting文件
构建完成
-
查看文件已生成
-
配置脚本
clean package -U -Dmaven.test.skip=true
设置构建完成之后要执行的shell
# 禁止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链接失败
查了系统日志是找不到类
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
检查时区
cat /etc/timezone
修改时区为 Asia/Shanghai
echo Asia/Shanghai > /etc/timezone
-
构建失败,配置maven中setting文件
安装插件后重启,进入系统管理中进入Managed files,添加配置setting文件
项目build中选择前面创建的setting文件
原文地址:https://blog.csdn.net/al961105114/article/details/123547311
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 奇怪的阿峰
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果