docker+jenkins+gitee配置持续集成部署方式
作者:wangJiaLun-china
基于docker安装jenkins
创建本地映射jenkins资源目录
mkdir -p /home/docker/jenkins
这边配置的是外网访问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镜像会自动下载,我下载的镜像是
执行成功后访问如图
使用root用户进入容器
docker exec -it --user root jenkins /bin/bash
查看复制密码
cat /var/jenkins_home/secrets/initialAdminPassword
安装推荐的插件后等待安装成功
创建用户,下一步。安装结束
配置 jenkins
进入jenkins页面找到,全局配置工具
配置jdk
使用root用户进入容器
docker exec -it --user root jenkins /bin/bash
查看容器内jdk路径,去除网页勾选自动安装。
填入到配置中
echo $JAVA_HOME
配置 maven
安装maven插件
配置 gitee
参照前面安装maven插件步骤,安装 gitee插件、publish over ssh插件
进入系统配置配置gitee
链接名随便填,jenkens内唯一不能重复
访问码云私人令牌获取地址
点击测试链接,成功如下图。如果Error参照下面的异常记录中,额外安装Jersey 2 API这个插件
建立任务
构建一个maven任务
选择gitee链接,配置源码管理中仓库地址,Credentials中添加输入码云账号密码
配置gitee webhook
生成webhook密码去gitee中配置webhook
项目打包配置,配置完成之后应用保存。
持续部署
首次先立即构建一次,通过日志查看找到docker内jenkins生成jar包的目录
如果构建不成功,缺少包的话参照下面异常记录配置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链接失败
查了系统日志是找不到类
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文件
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。