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

Jenkins自动化部署流程

目录

Jenkins自动化部署流程

前言

硬件环境

软件环境

1)安装JDK

2) 安装Maven

3) 安装Git

4)安装Docker

5) 安装Jenkins

配置环境

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 [email protected]
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镜像。

猜你喜欢

转载自blog.csdn.net/qq_35921773/article/details/86594735