Jenkins+Docker+Gitee+SpringBoot自动化部署

非阻狂
• 阅读 7434

当我们使用传统的开发方式开发后台系统时,每写完一个功能点就需要重新运行一下项目,然后进行测试,如果是项目比较小还可以,但是如果项目比较大的话,由于涉及的人员比较多,这种开发方式就比较麻烦。基于此,我们就需要使用Jenkins配合Gitee搭建一个自动化部署平台,并将代码托管到服务器上,这样减轻了本地的电脑压力,也解放了部署的流程。

1, 搭建Jenkins平台

首先,我们需要搭建一下Jenkins自动化构建平台。首先,我们需要安装Docker,然后在Docker中安装Jenkins,安装的命令如下:

# 安装yum-utils工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置阿里云的Docker Yum源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动Docker
sudo systemctl start docker
# 配置开机自启动
sudo systemctl enable docker

通过以上指令即可成功安装Docker并启动,接下来我们通过Docker运行Jenkins。

docker run \
  -d \
  --rm \
  -u root \
  -p 8080:8080 \
  -v /home/jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /opt/develop_resource/apache-maven-3.6.3:/usr/local/maven \
  -v "$HOME":/home \
  jenkinsci/blueocean

执行上述指令Docker会自动拉取Jenkins的镜像并启动,因为我们要部署的是SpringBoot,所以需要准备JDK和Maven环境,不过该Jenkins镜像自带了JDK环境,只需准备一下Maven即可,首先,下载Maven压缩包,命令如下:

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

然后,使用命令解压文件。

tar -zxvf apache-maven-3.6.3-bin.tar.gz

解压之后千万要注意Maven所在的目录,比如:

/opt/develop_resource/apache-maven-3.6.3

将它挂载到容器的目录里,-v /opt/develop_resource/apache-maven-3.6.3:/usr/local/maven这一条指令中的Maven目录千万记得换成自己的。现在,我们可以运行刚才的指令启动Jenkins了,通过docker ps指令可以查看容器是否启动。

[root@10 /]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS         PORTS                                                  NAMES
dfa1b8b2c7a3   jenkinsci/blueocean   "/sbin/tini -- /usr/…"   15 seconds ago   Up 9 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 50000/tcp   condescending_meitner

接下来,我们使用服务器的ip加端口8080的方式访问Jenkins。
Jenkins+Docker+Gitee+SpringBoot自动化部署
管理员密码可以在Jenkins的启动日志中查看,使用docker logs dfa1b8b2c7a3查看日志:
Jenkins+Docker+Gitee+SpringBoot自动化部署
密码就是红框中的字符串,注意红框下的一段提示:

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

意思是你可以在/var/jenkins_home/secrets/initialAdminPassword这个文件中查看到管理员密码,不过这是Jenkins容器内的目录,我们在启动Jenkins的就挂载了Jenkins的关键目录/var/jenkins_home,宿主机目录为/home/jenkins-data,所以可以使用如下指令查看管理员密码。

cat /home/jenkins-data/secrets/initialAdminPassword

得到密码后输入到Jenkins页面解锁Jenkins,然后点击安装推荐的插件。
Jenkins+Docker+Gitee+SpringBoot自动化部署
Jenkins+Docker+Gitee+SpringBoot自动化部署
接下来,直接点击【下一步】。
Jenkins+Docker+Gitee+SpringBoot自动化部署
Jenkins+Docker+Gitee+SpringBoot自动化部署
到这一步,Jenkins平台就可以正式使用了。

2, Jenkins平台配置

接下来,就是对Jenkins平台的配置,首先配置Maven。
Jenkins+Docker+Gitee+SpringBoot自动化部署
按步骤点击,即可进入系统配置。首先,在全局属性中进行配置。
Jenkins+Docker+Gitee+SpringBoot自动化部署
Jenkins+Docker+Gitee+SpringBoot自动化部署
还记得我们在运行Jenkins容器时挂载的Maven目录吗?挂载到Jenkins容器中的目录就是/usr/local/maven,如果实在搞不懂的你就保持和我的配置一样即可。

以同样的方式,再新增一个配置:
Jenkins+Docker+Gitee+SpringBoot自动化部署
PATH+EXTRA的作用是让原来PATH变量中的环境不丢失,最后点击保存。Maven配置完成后,需要配置Gitee。
Jenkins+Docker+Gitee+SpringBoot自动化部署
Jenkins+Docker+Gitee+SpringBoot自动化部署
点击可选插件,选中Gitee,然后点击Install without restart进行安装,等待安装完成即可,Gitee的相关配置我们放到后面讲。

3,创建SpringBoot应用

首先,我们创建一个简单的SpringBoot应用进行测试,控制器代码如下。

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

然后在配置文件application.yml中添加:

server:
  port: 8000

并在main下新建docker文件夹,在docker文件夹下新建Dockefile文件,内容如下。

# 指定是基于哪个基础镜像
FROM java:8

# 作者信息
MAINTAINER wwj

# 挂载点声明
VOLUME /tmp

# 将本地的一个文件或目录,拷贝到容器的文件或目录里
ADD /target/demo-0.0.1-SNAPSHOT.jar springboot.jar

#shell脚本
RUN bash -c 'touch /springboot.jar'

# 将容器的8000端口暴露,给外部访问。
EXPOSE 8000

# 当容器运行起来时执行使用运行jar的指令
ENTRYPOINT ["java", "-jar", "springboot.jar"]

需要注意的是ADD指令的编写,当SpringBoot应用打包完成后,其jar包会被放在target目录下。
Jenkins+Docker+Gitee+SpringBoot自动化部署
所以需要指定该文件的位置,使用ADD指令将其放入待构建的容器中,接着在Gitee中新建一个仓库,并将代码推送到仓库中。
Jenkins+Docker+Gitee+SpringBoot自动化部署
仓库名随便你叫什么,然后将刚才的应用推送上去即可。
Jenkins+Docker+Gitee+SpringBoot自动化部署

4,Gitee配置

推送完成后,回到Jenkins管理界面,我们来完成Gitee的配置,打开系统配置。
Jenkins+Docker+Gitee+SpringBoot自动化部署
找到Gitee配置,填入对应的信息:
Jenkins+Docker+Gitee+SpringBoot自动化部署
点击添加按钮添加一个Jenkins凭证。
Jenkins+Docker+Gitee+SpringBoot自动化部署
选择Gitee API 令牌:
Jenkins+Docker+Gitee+SpringBoot自动化部署
私人令牌的获取地址为:https://gitee.com/profile/personal_access_tokens

Jenkins+Docker+Gitee+SpringBoot自动化部署
Jenkins+Docker+Gitee+SpringBoot自动化部署

Jenkins+Docker+Gitee+SpringBoot自动化部署

5, 新建自动化部署任务

配置完成,接下来新建一个任务,点击新建Item。
Jenkins+Docker+Gitee+SpringBoot自动化部署
随便输入一个任务名称,并选择【Freestyle project】。
Jenkins+Docker+Gitee+SpringBoot自动化部署
在源码管理处勾选Git,并填入项目地址,然后在构建触发器位置勾选触发打包的时机。
Jenkins+Docker+Gitee+SpringBoot自动化部署
在构建触发器最底部位置点击生成Gitee WebHook密码。
Jenkins+Docker+Gitee+SpringBoot自动化部署

然后打开Gitee项目中的WebHooks,添加webHook。
Jenkins+Docker+Gitee+SpringBoot自动化部署
Jenkins+Docker+Gitee+SpringBoot自动化部署

此处的URL需要填入一个公网IP,所以如果你是用的虚拟机,就需要用内网穿透工具映射一下。

Jenkins+Docker+Gitee+SpringBoot自动化部署
Jenkins+Docker+Gitee+SpringBoot自动化部署
至于URL应该填什么,我们需要修改一下。
Jenkins+Docker+Gitee+SpringBoot自动化部署
填写完成后点击添加,Gitee便会发送一个Post请求到Jenkins,如果请求结果如下所示,则配置成功了。
Jenkins+Docker+Gitee+SpringBoot自动化部署
重新回到Jenkins管理界面,继续勾选构建触发器下的轮询SCM,输入轮询频率。
Jenkins+Docker+Gitee+SpringBoot自动化部署
最后在构建位置下增加构建步骤,选择执行shell。
Jenkins+Docker+Gitee+SpringBoot自动化部署
shell脚本代码如下。

#!/bin/bash -il
docker rm -f app_docker
sleep 1
docker rmi -f app_docker:1.0
sleep 1
mvn clean install -Dmaven.test.skip=true
sleep 1
docker build -t app_docker:1.0 -f ./src/main/docker/Dockerfile .
sleep 1
docker run -d -p 8000:8000 --name app_docker app_docker:1.0

该脚本表示删除正在运行的app_docker容器,并删除app_docker:1.0镜像,然后使用mvn命令打包从Gitee拉取来的项目代码,接着使用项目中的Dockerfile文件构建出一个镜像,名称为app_docker:1.0,最后运行该镜像。

6,打包测试

最后点击保存,部署任务就创建完成了,我们来测试一下有没有问题。
Jenkins+Docker+Gitee+SpringBoot自动化部署
点击立即构建,Jenkins会立马进行一次构建,查看控制台输出。
Jenkins+Docker+Gitee+SpringBoot自动化部署
最后,我们打开默认的地址即可。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
菜鸟阿都 菜鸟阿都
4年前
springboot+vue项目linux环境部署
项目部署是一个程序员必备的技能,当项目开发过程中,需要将项目部署在开发服务器上,进行自测,或协助运维,测试进行环境的搭建配置,学会了项目部署,你就是团队中最亮的那个仔。项目简介后端:springboot项目【打包为jar包】前端:vue项目【通过cli3搭建】目标服务器:liunx操作系统使用工具xshell:通过命令操作服务器sftp:上传安装包到服务器部
威尔we 威尔we
4年前
Git + Docker 多环境自动化部署
日常项目开发过程中,一般都有多套环境,比如开发、测试和生产。各个环境部署的代码版本不一致,手动一个个来部署效率低且容易出错。如果项目采用了敏捷开发方式,可能每天需要部署几十次。手动方式更加不可行,因此必须要把多环境的部署工作自动化。本文将介绍在笔者参与项目中实际推行的一种方案,供大家参考。整体方案整体方案(https://imghe
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
DevOps世界中的软件开发
!(https://oscimg.oschina.net/oscnet/f40e68cbfe8148deb00f040b4e917a0a.jpg)在整个软件开发过程中,开发人员通常需要花费大量时间来修复错误和漏洞,以便一切按计划进行交付。但是,通过DevOps实践,可以更轻松地管理和保护这些问题。这是由于以下事实:使用DevOps实践的软
Stella981 Stella981
3年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
javalover123 javalover123
2年前
Java代码性能测试实战之ContiPerf
最近测试一个开源项目,发现生成的全局id有重复,方法加上synchronized提交PR后,有些同行对性能有疑虑,就准备做个代码性能测试。Java基准性能测试一般用JMH比较多,但是官方建议性能测试单独一个项目,感觉麻烦了点。发现ContiPerf可以方便的设置执行次数、时长、线程数、预热时长,还有Html格式报告,感觉还比较适合,基于Junit
API 小达人 API 小达人
1年前
Eolink Apikit 如何进行自动化测试?零代码!无门槛!快速上手!
作为测试人员,在进行比较大的项目时,使用自动化测试能帮助我们事半功倍地完成测试工作,提高测试效率,缩短开发周期。EolinkApikit“零代码”自动化测试,帮助开发人员创建自动化测试,而不需要编写代码,是人人皆可使用的“零代码”自动化测试平台。在EolinkApikit的自动化测试应用中,所有的测试用例都是以项目维度来进行管理,一个自动化测试项目可以从多个API文档项目中引用API信息来创建API测试用例。
API 小达人 API 小达人
1年前
如何进行自动化测试,提高测试效率?
作为测试人员,在进行比较大的项目时,使用自动化测试能帮助我们事半功倍地完成测试工作,提高测试效率,缩短开发周期。EolinkApikit为测试工程师提供API文档管理、快速接口调试、测试用例管理、及自动化测试等功能。协作测试工程师快速查看API文档及变更,以及更快的进行接口测试和自动化测试工作,降低测试用例编辑成本,提升自动化测试效率。