0
点赞
收藏
分享

微信扫一扫

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


  1. 搭建项目框架

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

1.1 项目结构如图所示

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

  • 其中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
  • 微服务持续集成与持续部署系统-使用Docker方式部署_spring_02

  • 进入主页
  • 微服务持续集成与持续部署系统-使用Docker方式部署_spring_03

  • 创建好一个group之后,需要新建一个project.单击图13-6所示界面中的New Project按钮创建一个project,如图所示
  • 微服务持续集成与持续部署系统-使用Docker方式部署_git_04

输入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 ###

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

git

第三步,添加远程仓库

http://121.36.145.230:8929/hctech2006/micro-all.git

  • 第四步,将代码添加到本地仓库

git addd --all
git commit -m "init project"

  • 第五步,将代码推到Gitlab的master分支

git

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

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

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


输入项目名称,之后单击构建一个maven项目

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

然后进入项目配置主页

第一项,General部分

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


就是加上一个描述第二项,源码管理部分

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


第三项,构建触发器部分

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


使用Poll SCM选项可以配置定时编译代码(如果gitlab上有代码的话),当然在用webhook的时候也需要勾选该选项。

还有,请自觉忽略,Build when a change is pushed gitlab,这是后面采用的。

第四项,Build部分

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


原谅我直接上Docker

第五项,构建后操作部分

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


选择归档成品,看清楚

在这里用于指定用于存档的文件。实际上使用Jenkisn构建项目之后,jar包所在的地址是/root/.jenkins/workspace/micro-all/target,其中,/root/.jenkins/workspce就是$WORKSPACE的值。

至此,jenkins的项目配置就完成了!!

下面用jenkins来编译项目。单击项目的构建按钮

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

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

  1. 使用WebHook实现服务的持续集成
    文章链接:
  2. 使用jenkins+Shell实现服务的持续部署
    文章链接:



举报

相关推荐

0 条评论