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

 更新时间:2023年09月05日 08:49:20   作者: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文件

总结

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

相关文章

  • 在Docker中更快地构建Maven项目

    在Docker中更快地构建Maven项目

    本文主要介绍了在Docker中更快地构建Maven项目,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • CentOS7.3中Docker的安装教程

    CentOS7.3中Docker的安装教程

    Docker 是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。这篇文章主要给大家介绍CentOS7.3中Docker的安装教程,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2017-04-04
  • docker容器/etc/hosts文件修改方法

    docker容器/etc/hosts文件修改方法

    在容器内部,当需要访问其他容器或主机时,可以通过/etc/hosts文件来解析主机名,从而实现网络通信,这篇文章主要介绍了docker容器/etc/hosts文件,需要的朋友可以参考下
    2023-06-06
  • Docker(黑马spring cloud笔记)详解

    Docker(黑马spring cloud笔记)详解

    这篇文章主要介绍了Docker(黑马spring cloud笔记)详解,本文章内容详细,具有很好的参考价值,希望对大家有所帮助,需要的朋友可以参考下<BR>
    2023-01-01
  • Docker可视化ui管理工具Portainer安装及使用解析

    Docker可视化ui管理工具Portainer安装及使用解析

    这篇文章主要介绍了Docker可视化ui管理工具Portainer安装及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Docker 中的挂载机制详解

    Docker 中的挂载机制详解

    Docker 的挂载机制允许将宿主机的文件或目录挂载到 Docker 容器内部,这样容器就可以访问宿主机上的文件系统,本文给大家介绍Docker 中的挂载机制,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Docker镜像构建之docker commit的使用

    Docker镜像构建之docker commit的使用

    本文主要介绍了Docker镜像构建之docker commit的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 基于Docker的MySQL主从复制环境搭建的实现步骤

    基于Docker的MySQL主从复制环境搭建的实现步骤

    这篇文章主要介绍了基于Docker的MySQL主从复制环境搭建的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • harbor修改配置文件后重启操作

    harbor修改配置文件后重启操作

    这篇文章主要介绍了harbor修改配置文件后重启操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • idea 连接远程 docker 并部署项目到 docker的过程

    idea 连接远程 docker 并部署项目到 docker的过程

    这篇文章主要介绍了idea连接远程docker并部署项目到docker,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10

最新评论