Springboot+Jenkins+Docker+Git+自动化部署

前言

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

在实际使用的过程中我们可以使用Jenkins还实现代码的快速部署,它拥有许多插件便于我们集成各种各样的工具,如代码拉取层,我们可以集成SVN、GitLab。项目构建层可以使用Maven。项目部署可以采用jar包形式或者war包的Apache Tomcat形式也可以推送远程私库,做到远程部署。另外对于时下里流行的微服务Jenkins也可以很好的实现快速构建、部署,极大的提高开发、测试效率。

本文主要将一个Springboot项目通过Git、Maven、Jenkins、Docker等技术,实现项目的自动化提交部署功能。

硬件环境

环境为阿里云的centos7

自制springboot简单项目一份。

软件环境

1)安装JDK

yum search java | grep jdk

会出现所有版本的jdk

yum install 你所需要的jdk版本全名

yum install java-1.8.0-openjdk.i686

接下来查看JDK版本

java -version

[root@iZbp1gaxhmejbai4lzftzdZ ~]# java -version

openjdk version "1.8.0_191"

OpenJDK Runtime Environment (build 1.8.0_191-b12)

OpenJDK Server VM (build 25.191-b12, mixed mode)

2) 安装Maven

yum install maven

查看maven版本

mvn -v

[root@iZbp1gaxhmejbai4lzftzdZ /]# mvn -v

Apache Maven 3.0.5 (Red Hat 3.0.5-17)

Maven home: /usr/share/maven

Java version: 1.8.0_191, vendor: Oracle Corporation

Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre

Default locale: en_US, platform encoding: UTF-8

OS name: "linux", version: "3.10.0-862.6.3.el7.x86_64", arch: "amd64", family: "unix"

3) 安装Git

yum install git

4)安装Docker

yum install -y docker

systemctl start docker

docker version

5) 安装Jenkins

Jenkins download and deployment 到Jenkins的官网自行下载所需的war包

java -jar jenkins.war –-httpPort=8080

或者也可以把war包放在tomcat里,然后访问localhost:8080/jenkins即可

配置环境

1) GitLab配置

1. 注册GitLab

登陆GitLab官网注册账号The DevSecOps Platform | GitLab

2. 下载Git

windows中下载Git Git - Downloading Package

点击安装一路next完成安装

3. 打开GitBash生成SSHkey

命令行运行以下指令:

ssh-keygen -t rsa -C "你的邮箱地址";

先确定文件位置回车

然后输入ssh密码回车

然后确认密码回车

.ssh

4. 配置全局用户名和邮箱

git config --global user.name  "你的用户名"

git config --global user.email "你的邮箱"

5. GibLab载入SSHkey

20190122160108286.png

然后粘贴sshkey到这个地方

6. pom文件配置

7.

Dockerfile文件

在src》main目录下新建docker文件夹,新增Dockerfile文件

#FROM openjdk:8-jdk-alpine
FROM hub.c.163.com/dwyane/openjdk:8
MAINTAINER red-eric 2505068703@qq.com
VOLUME /tmp
ADD oyster-server-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Jenkins配置

1.Jenkins安装

把window下载的Jenkins.war拷贝到阿里云服务器中

打开阿里云控制台

开放Jenkins端口9003

把window下载的Jenkins.war拷贝到阿里云服务器中

打开阿里云控制台

开放Jenkins端口9003

在Jenkins.war所在目录执行

nohup java -jar jenkins.war --httpPort=9003 >/dev/null 2>/dev/null &

还有一种简单的方法就是,下载个tomcat ,然后直接把war包放在tomcat中,然后访问xxx.xx.xx.xx:8080/jenkins就可以了

2. Jenkins初始化

打开网址http://xx.xxx.xx.xx:9003

复制此路径

在shell中执行

cat /root/.jenkins/secrets/initialAdminPassword

查看初始密码,然后登陆,选择建议的插件,然后重新设置用户名密码

3. 全局工具配置

之前我们已经在centos中安装了Git、Maven和Docker ,现在就开始在Jenkins中配置他们。

打开Jenkins控制面板中 系统管理》全局工具配置

 

 

4. 插件管理

新增Gitlab插件和Maven Integration插件

Gitlab插件:当gitlab有push时触发jenkins拉取代码和将构建状态发送回GitLab

Maven Integration:用来简化建造Maven工程.

 安装完插件后可以重启一下,直接在网址后边拼上/restart 可以重启Jenkins

5. 全局变量设置

配置maven 的全局环境变量 系统设置》系统设置

20190122161900261.png

6. GitLab配置

再Gitlab中获得APIToken

点击生成后获得一个APIToken

然后打开Jenkins

20190122161939429.png

添加GitlabToken

然后点击左下角的测试

image

会出现success的字样。

7. 创建任务

这里可以创建自由风格的任务或者Maven任务都可以

源码管理选择Git

打开Gitlab中的测试springboot项目复制项目地址

添加授权

20190122162326119.png

这里采用用户名+密码验证的方式即可

8. 构建触发器

选择当代码提交时自动构建,点击Generate 生成,获得Jenkins的Token

复制url然后打开Gitlab

复制URL和Token 到这个地方点击Add Webhook

9. 构建任务拉取代码

点击立即构建即可 拉取Gitlab上的代码到本地

前两次失败是由于Git的路径配置错误,于是用

whereis git

重新查询了下路径,重新配置全局工具

20190122162528999.png

然后测试 我的Gitlab提交是否回同步代码到Jenkins

点击Test push

至此,GitLab到Jenkins已经全部打通了,接下来看Jenkins的代码如何部署。

10. Maven构建项目

点击任务详情页面的Configure

 

在Build中选择调用顶层Maven构建项目

添加Maven打包命令

clean install -Dmaven.test.skip=true

11. Docker脚本部署

然后添加shell脚本

 

# 先删除之前的容器
echo "remobe old container"
cid=$(docker ps -a | grep dockerspringboot | awk '{print $1}'| xargs)
if [ $cid ]
then
echo "aaaaaaaaaaaa"
echo "ccccccccc"
docker rm -f $cid
# 删除之前的镜像
echo "romove old image"
docker rmi dockerspringboot
else
echo "no container now"
fi
# 构建镜像
mvn docker:build
# 打印当前镜像
echo "current docker images"
docker images | grep dockerspringboot
# 启动容器
echo "start container"
docker run -p 8010:8010 -d --name myspringboot dockerspringboot
# 打印当前容器
echo "current container"
docker ps -a | grep dockerspringboot
echo "star service success!"

在GitLab中使用push event,然后在Jenkins中可以看到项目自动进入构建状态

 

大功告成!

总结

1) GitLab单独Docker化

关于这套部署环境的改良,可以把GitLab安装放在单独的docker容器中,减少主服务器占用资源。

2) 远程推送私库

如果需要做到部署环境与线上环境分离,可以在pom文件中配置docker私库。同时还需要添加两台主机的sshkey。

需要先新增Maven属性

 172.0.0.1:50000

然后把${docker.registry}属性作为imageName的前缀

docker.registry/{docker.registry}/{project.groupId}/project.artifactId:{project.artifactId}:{project.version}

最后执行mvn docker:build docker:push

3)Docker-Maven插件详解

<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>
  <configuration>
    <!--imageName 用于指定Docker镜像的完整名称 groupoId为仓库名 artifactId为镜像名 version为标签名-->
    <imageName>${project.groupId}/${project.artifactId}:${project.version}</imageName>
    <!-- 用与指定Dockerfile文件所在的位置,project.build.outputDirectory 为了读取经过Maven资源过滤后的Dockerfile文件-->
    <dockerDirectory>${project.build.outputDirectory}</dockerDirectory>
    <resources>
      <resource>
        <!--指定需要复制的根目录-->
        <directory>${project.build.directory}</directory>
        <!--用于指定需要复制的文件-->
        <include>${project.build.finalName}.jar</include>
      </resource>
    </resources>
  </configuration>
</plugin>

4) 在Jenkins容器中运行Docker命令

在Jenkins中运行docker命令有4中方式

不使用任何Jenkins镜像,直接在宿主机上安装Jenkins、Docker。本文采用的就是此种方式。

不适用官方提供的Jenkins镜像,自己构造一个带有Docker服务的Jenkins镜像。

使用Docker-in-Docker(DinD)方案在Docker容器中运行其他Docker容器。这两个Docker容器是父子关系。DockerHub中i给你提供了Jenkins的DinD镜像。

使用Docker-outside-of-Docker(DooD)方案,在Docker容器中创建宿主机上的Docker容器,这两个容器是兄弟关系。DockerHub中提过了Jenkins的DooD镜像。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杭州架构师

你的鼓励你创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值