docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker+jenkins+gitee配置持续集成部署

docker+jenkins+gitee配置持续集成部署方式

作者:wangJiaLun-china

这篇文章主要介绍了docker+jenkins+gitee配置持续集成部署方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

基于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文件

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文