导语
使用Docker自动化部署EurekaServer,其中涉及maven项目搭建,git版本提交,Dockerfile构建EurekaServer,使用GitlabCI进行自动化部署。
Maven工程
父工程Smart-Cloud
创建父类工程Smart-Cloud,Pom文件如下:
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath />
</parent>
<groupId>com.hyn</groupId>
<artifactId>smart-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>smart-cloud</name>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-bean-validators -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-bean-validators</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.59</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</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-netflix-ribbon</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<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>
<modules>
<module>cloud-eureka</module>
</modules>
</project>
子工程smart-cloud
pom文件如下:
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.hyn</groupId>
<artifactId>smart-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>cloud-eureka</artifactId>
<name>cloud-eureka</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<finalName>cloud-eureka</finalName>
</build>
</project>
EurekaServer配置文件application.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
server:
enable-self-preservation : false
eviction-interval-timer-in-ms : 2000
spring:
application:
name: cloud-eureka
启动类:
package com.hyn.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringCloudApplication
@EnableEurekaServer
public class SmartEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(SmartEurekaApplication.class, args);
}
}
Gitlab创建仓库

在项目中选择
配置gitlab-ci,配置方法点进去官网有说明,很简单。我们这里选择shell编排。
点击添加
添加.gitlab-ci.yml配置文件,这脚本写的有些low,后面会优化
# define job variables at job level
variables:
#设置maven环境变量
MAVEN_CLI_OPTS: "-s /usr/apache-maven-3.6.1/conf/settings.xml --batch-mode"
#设置maven仓库位置
MAVEN_OPTS: "-Dmaven.repo.local=/usr/MyRepository"
#设置项目版本号
CLOUD_VERSION: "0.0.1-SNAPSHOT"
#设置仓库位置
CLOUD_RESPOSITORY: "/usr/MyRepository/"
#设置cp到项目的路径
JAR_HOME_PATH: "/home/cloud/smart-cloud/"
#设置项目名称
CLOUD_EUREKA: "cloud-eureka"
#设置docker仓库地址
DOCKER_RESPOSITORY: "192.168.43.128:5000"
stages:
- build
- test
- deploy
job1:
stage: build
tags:
- smart-cloud
script:
- whoami
- echo "start build"
- echo "进行编译...."
- mvn clean install -Dmaven.test.skip=true
- echo "end build"
job2:
stage: test
tags:
- smart-cloud
script:
- echo "start test"
- echo "这里做一些测试的事情,如果没有就不做了。"
- echo "end test"
job3:
stage: deploy
tags:
- smart-cloud
script:
- pwd
- echo $CLOUD_RESPOSITORY
- echo pwd
- echo "--------------------------------start eureka-----------------------------------------------"
- echo "创建eureka工程目录"
- mkdir -p $JAR_HOME_PATH/$CLOUD_EUREKA/
- echo "复制jar到工程目录"
- cp $CLOUD_RESPOSITORY/com/hyn/$CLOUD_EUREKA/$CLOUD_VERSION/$CLOUD_EUREKA-$CLOUD_VERSION.jar $JAR_HOME_PATH/$CLOUD_EUREKA/
- cp cloud-eureka/Dockerfile $JAR_HOME_PATH/$CLOUD_EUREKA/
- echo "docker build"
- docker build -t $DOCKER_RESPOSITORY/smartcloud/cloud-eureka $JAR_HOME_PATH/$CLOUD_EUREKA/
- docker push $DOCKER_RESPOSITORY/smartcloud/cloud-eureka
- echo "--------------------------------end eureka-------------------------------------------------"
创建本地Docker仓库
安装Rancher
sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:stable
官网文档:Rancher 1.6 Docs
创建应用服务


注意:选择的镜像需要和本地仓库能对应
执行持续集成

可以发现会有几个任务:
可以看到一些执行的日志:

这样的话就像Eureka的docker打到本地仓库了,然后使用Rancher启动。
启动容器

启动成功:
版权声明:本文为baidu_37307156原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。