微服务持续集成与持续部署系统-使用Docker方式部署

  1. 搭建项目框架

我们将搭建一个micro-all的微服务体系。,通过该服务验证这套持续集成与持续部署系统。

1.1 项目结构如图所示
在这里插入图片描述

  • 其中pom.xml文件内容如下:

父组件

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.hctech2006.micro</groupId>
    <artifactId>micro-all</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>micro-all</name>
    <packaging>pom</packaging>
    <description>Demo project for Spring Boot</description>

    <modules>
        <module>micro-admin</module>
<!--        <module>micro-uaa</module>-->
<!--        <module>micro-zuul</module>-->
<!--        <module>micro-apk</module>-->
<!--        <module>micro-apk-consumer</module>-->
<!--        <module>micro-ueditor</module>-->
<!--        <module>micro-ueditor-consumer</module>-->
<!--        <module>micro-privilege</module>-->
<!--        <module>micro-privilege-consumer</module>-->
    </modules>
    <properties>

        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </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</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

</project>

具体项目:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.hctech2006.micro</groupId>
        <artifactId>micro-all</artifactId>
        <version>0.0.1-SNAPSHOT</version> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.hctech2006.micro</groupId>
    <artifactId>micro-admin</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>micro-admin</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-boot-admin.version>2.2.2</spring-boot-admin.version>
        <!--配置镜像前缀 (就是仓库服务器的地址)-->
        <docker.image.prefix>47.112.132.177:5000</docker.image.prefix>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server</artifactId>
            <version>${spring-boot-admin.version}</version>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server-ui</artifactId>
            <version>${spring-boot-admin.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <!--生成镜像名称-->
                    <repository>
                        ${docker.image.prefix}/${project.name}
                    </repository>
                    <!--生成镜像版本-->
                    <tag>
                        ${project.version}
                    </tag>
                    <!--推送到私有镜像仓库-->
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
                <executions>
                    <execution>
                        <id>default</id>
                        <phase>install</phase>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

1.2 编写Dockerfile文件创建镜像

FROM java:8
MAINTAINER lidengyin
ARG JAR_FILE
ADD ${JAR_FILE} micro-admin.jar
EXPOSE 8300
ENTRYPOINT ["java", "-jar", "micro-admin.jar"]

构建过程:

  • 第一步指定基础镜像为java
  • 第二步将micro-admin.jar 复制到镜像并改名micro-admin.jar
  • 暴露端口
  • 启动后执行命令
  1. 使用gitlab创建组和项目
    在gitlab管理代码之前,需要做一些准备工作。
    • 首先,在如图所示的界面新建group
      在这里插入图片描述
    • 进入主页
      在这里插入图片描述
    • 创建好一个group之后,需要新建一个project.单击图13-6所示界面中的New Project按钮创建一个project,如图所示
      在这里插入图片描述

输入Project Name 指定了可见性。可见性还是三种

  • private :只有被赋予了明确的权限的用户才可以访问项目
  • Internal:只有登录的用户才可以clone该项目
  • public :任何人

我们现在只是用http协议进行git操作,而不是ssh操作

  1. 创建.gitignore
    在将项目交到GitLab之前,还需要在项目的根目录(pom.xml所在目录)创建一个.gitignore文件
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/

### VS Code ###
.vscode/

  1. 将代码提交到Gitlab的步骤如下:
  • 第一步,进入micro-all的根目录
  • 第二步,初始化Git仓库
git init

第三步,添加远程仓库

http://121.36.145.230:8929/hctech2006/micro-all.git
  • 第四步,将代码添加到本地仓库
git addd --all
git commit -m "init project"
  • 第五步,将代码推到Gitlab的master分支
git push -u origin master

之后到Gitlab的webUI去查看项目代码,这里使用了GitLab管理代码的功能。
5. 使用jenkisn编译打包服务
再使用jenkisn编译打包服务之前,先配置项目信息

首先在jenkins主页,单击新建,进入创建项目主页

在这里插入图片描述
输入项目名称,之后单击构建一个maven项目

注意,maven项目新版已经不会存在需要自己下载组件:maven-plugin

然后进入项目配置主页
第一项,General部分
在这里插入图片描述
就是加上一个描述

第二项,源码管理部分
在这里插入图片描述
第三项,构建触发器部分
在这里插入图片描述
使用Poll SCM选项可以配置定时编译代码(如果gitlab上有代码的话),当然在用webhook的时候也需要勾选该选项。
还有,请自觉忽略,Build when a change is pushed gitlab,这是后面采用的。
第四项,Build部分
在这里插入图片描述
原谅我直接上Docker
第五项,构建后操作部分
在这里插入图片描述
选择归档成品,看清楚
在这里用于指定用于存档的文件。实际上使用Jenkisn构建项目之后,jar包所在的地址是/root/.jenkins/workspace/micro-all/target,其中,/root/.jenkins/workspce就是$WORKSPACE的值。
至此,jenkins的项目配置就完成了!!
下面用jenkins来编译项目。单击项目的构建按钮
在这里插入图片描述

构建完成之后,在Jenkins的控制台看一下日志,输出Finished:SUCCESS则表示构建成功。此时在/root/.jenkins/workspace/micro-all/target会看到相应的jar包

  1. 使用WebHook实现服务的持续集成
    文章链接:
    https://blog.csdn.net/weixin_43404791/article/details/105349680
  2. 使用jenkins+Shell实现服务的持续部署
    文章链接:
    https://blog.csdn.net/weixin_43404791/article/details/105350838
发布了137 篇原创文章 · 获赞 79 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43404791/article/details/105349178