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

Jenkins自动化部署流程

目录java

Jenkins自动化部署流程linux

前言git

硬件环境web

软件环境spring

1)安装JDKdocker

2) 安装Mavenshell

3) 安装Gitapache

4)安装Dockerwindows

5) 安装Jenkinscentos

配置环境

1) GitLab配置

1. 注册GitLab

2. 下载Git

3. 打开GitBash生成SSHkey

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

5. GibLab载入SSHkey

6. IDEA配置Git

         2) SpringBoot 配置

        1.pom文件

        2.Dockerfile文件

         3.启动类

         3) Jenkins配置

         1.Jenkins安装

2. Jenkins初始化

3. 全局工具配置

4. 插件管理

5. 全局变量设置

6. GitLab配置

7. 建立任务

8. 构建触发器

9. 构建任务拉取代码

10. Maven构建项目

11. Docker脚本部署

4) 测试

总结

1)  GitLab单独Docker化

2)  远程推送私库

3)Docker-Maven插件详解

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


  • 前言

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

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

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

  • 硬件环境

笔者使用的环境为阿里云的centos7(若是没有购买服务器也可使用Vmware虚拟机)
自制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

https://jenkins.io/download Jenkins的官网自行下载所需的war

java -jar jenkins.war –-httpPort=8080

或者也能够把war包放在tomcat里,而后访问localhost:8080/jenkins便可

  • 配置环境

1) GitLab配置

1. 注册GitLab

登录GitLab官网注册帐号https://gitlab.com

新建项目oyster-server

2. 下载Git

windows中下载Git https://git-scm.com/download/win

点击安装一路next完成安装

3. 打开GitBash生成SSHkey

命令行运行如下指令:

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

先肯定文件位置回车

而后输入ssh密码回车

而后确认密码回车

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

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

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

5. GibLab载入SSHkey

而后粘贴sshkey到这个地方

 

6. IDEA配置Git

打开idea新建咱们的

测试的springboot项目,而后在idea的菜单项选择 VCS》Import into Version Control》Create Git Repository

出现Select directory for git init对话框,直接点肯定

本来的项目文件名变成了红色

而后右键项目名,选择Git Add 项目变绿

继续操做,右键项目》Git》Commit File,而后在提交建立填写提交注释说明。提交项目到本地库。

而后 右键项目》Git》Repository》Push

而后配置远程Gitlab仓库

先复制Gitlab下的项目地址

而后填写在name和url中

而后出现push successful,打开Gitlab 刷新项目

此时项目已成功上传到了Gitlab上。

2) SpringBoot 配置

1.pom文件

主要在于docker-maven-plugin插件的配置

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.springboot.server</groupId>
  <artifactId>oyster-server</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>oyster-server</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>


  <build>
      <plugins>
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
         <!--Docker maven plugin start-->
        <plugin>
          <groupId>com.spotify</groupId>
          <artifactId>docker-maven-plugin</artifactId>
          <version>0.4.13</version>
          <configuration>
            <imageName>dockerspringboot</imageName><!--[a-z 0-9] 否则docker:build会报错-->
            <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
            <resources>
              <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
              </resource>
            </resources>
          </configuration>
        </plugin>
         <!--Docker maven plugin end-->
      </plugins>
  </build>
</project>

2.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"]

3.启动类

@SpringBootApplication
@RestController
public class OysterApplication
{
    public static void main( String[] args )
    {
        SpringApplication.run(OysterApplication.class, args);
    }
    @RequestMapping("/")
    public String index() {
        return "这是个人springboot应用";
    }
}

3) 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 的全局环境变量 系统设置》系统设置

6. GitLab配置

再Gitlab中得到APIToken

点击生成后得到一个APIToken

而后打开Jenkins

添加GitlabToken

而后点击左下角的测试

会出现success的字样。

7. 建立任务

这里能够建立自由风格的任务或者Maven任务均可以

源码管理选择Git

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

添加受权

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

8. 构建触发器

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

复制url而后打开Gitlab

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

9. 构建任务拉取代码

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

前两次失败是因为Git的路径配置错误,因而用

whereis git

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

而后测试 个人Gitlab提交是否回同步代码到Jenkins

点击Test push

Jenkins自动进行了第4次构建

至此,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!"

4) 测试

在GitLab中使用push event,而后在Jenkins中能够看到项目自动进入构建状态

查看Jenkins控制台输出

打开浏览器访问咱们的网址

大功告成!

总结

1) GitLab单独Docker化

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

2) 远程推送私库

若是须要作到部署环境与线上环境分离,能够在pom文件中配置docker私库。同时还须要添加两台主机的sshkey。

须要先新增Maven属性
<properties>

   <docker.registry>172.0.0.1:50000</docker.registry>

 </properties>

而后把${docker.registry}属性做为imageName的前缀

<imageName>${docker.registry}/${project.groupId}/${project.artifactId}:${project.version}</imageName>

最后执行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中方式

  1. 不使用任何Jenkins镜像,直接在宿主机上安装Jenkins、Docker。本文采用的就是此种方式。
  2. 不适用官方提供的Jenkins镜像,本身构造一个带有Docker服务的Jenkins镜像。
  3. 使用Docker-in-Docker(DinD)方案在Docker容器中运行其余Docker容器。这两个Docker容器是父子关系。DockerHub中i给你提供了Jenkins的DinD镜像。
  4. 使用Docker-outside-of-Docker(DooD)方案,在Docker容器中建立宿主机上的Docker容器,这两个容器是兄弟关系。DockerHub中提过了Jenkins的DooD镜像。