- 搭建项目框架
我们将搭建一个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
- 暴露端口
- 启动后执行命令
- 使用gitlab创建组和项目
在gitlab管理代码之前,需要做一些准备工作。- 首先,在如图所示的界面新建group
- 进入主页
- 创建好一个group之后,需要新建一个project.单击图13-6所示界面中的New Project按钮创建一个project,如图所示
- 首先,在如图所示的界面新建group
输入Project Name 指定了可见性。可见性还是三种
- private :只有被赋予了明确的权限的用户才可以访问项目
- Internal:只有登录的用户才可以clone该项目
- public :任何人
我们现在只是用http协议进行git操作,而不是ssh操作
- 创建.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/
- 将代码提交到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包
- 使用WebHook实现服务的持续集成
文章链接:
https://blog.csdn.net/weixin_43404791/article/details/105349680 - 使用jenkins+Shell实现服务的持续部署
文章链接:
https://blog.csdn.net/weixin_43404791/article/details/105350838