docker容器 eureka 集成_自动化部署—Jenkins+Docker构建工程

03494bfbca65359ff75251d66900c117.png

=================

交作业:hello-world级的自动化部署(Maven+Git+Docker+Jenkins),因为内容稍微有点儿多,分两篇,这是第二篇——构建工程。

=================

环境:

CentOS7-64

已安装JAVA8(Jekins需要)

Git

Maven

Jenkins

创建SpringBoot项目,并上传到github上

我已建立了一系列SpringCloud工程(当然都是HelloWorld级别的),github地址:

https://github.com/wangjuns8/spring-cloud-study.git

(内容基于长克同学的教程、代码及指导,非常非常感谢,更多helloworld级的SpringCloud的教程文末列出链接)

我的工程是一个parent project,下面有多个model,这次以eureka和provider-user 为例。

项目整合Docker

在model的src/main目录下创建docker文件夹,再新建一个Dockerfile文件

0143a4bc43fb723251589c986a8b9035.png

内容如下:

---------------------------------

#基于openjdk:8

FROM openjdk:latest

#把jar包copy到的工作目录下

COPY ./microservice-discovery-eureka/target/microservice-discovery-eureka.jar /work/project/microservice-discovery-eureka.jar

# 指定当前操作目录

WORKDIR /work/project

#容器启动后执行的操作

CMD java -jar microservice-discovery-eureka.jar

---------------------------------

说明:

1. Dockerfile不一定放在项目下,只要jenkins编译时能访问到的地方就行,放在项目下是为了便于管理;

2. microservice-discovery-eureka.jar是打包的名字,可以在pom.xml里设置:

---------------------------------

<build>

   <finalName>microservice-discovery-eurekafinalName>

build>

---------------------------------

创建Jenkins任务:

>> 点击主页面左侧菜单栏的“新建任务”

>> 输入任务名称

>> 选择“构建一个maven项目”

如果没有这个选项,则安装Maven Integration plugin先(详见上篇作业)

>> 确定,进入配置界面

8e2ee70052243f6d7c9a8f9ec1bcc9e9.png

填写jenkins配置

be9d11b55e941b7531a1ceb65ad6b2ec.png

73ad939cb5aafb0bbec6e9f3592f2402.png

b61eb11bd7a1d691330bcb3111527cfc.png

因为我要构建的是parent工程下的eureka model,所以指定到model下的pom.xml

为了提高package效率,可以给它加几个参数:

clean package -T 1C -Dmaven.test.skip=true  -Dmaven.compile.fork=true

说明:

1、跳过测试代码:-Dmaven.test.skip=true

2、多线程进行编译:-Dmaven.compile.fork=true

3、如果你用的Maven是3.×以上版本,可以增加 -T 1C 参数,表示每个CPU核心跑一个工程;

添加构建后执行脚本(docker构建):

1f943e184a59ccf0162af7027383e59f.png

填写脚本如下:

#!/bin/sh

#docker 镜像/容器名字都命名为jar包的名字

SERVER_NAME=microservice-discovery-eureka

#容器id

CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')

#镜像id

IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')

#当前日期

DATE=`date +%Y%m%d`

#清除旧容器

if [ -n "$CID" ]; then

echo "存在$SERVER_NAME容器,CID=$CID"

echo "停止旧容器"

docker stop $SERVER_NAME

echo "删除旧容器"

docker rm $SERVER_NAME

fi

# 清除旧镜像

if [ -n "$IID" ]; then

echo "存在$SERVER_NAME镜像,IID=$IID"

echo "删除镜像"

docker rmi $IID

fi

#构建镜像,注意build最后面的“.”不能省略

echo "开始构建镜像"

docker build -f ./$SERVER_NAME/src/main/docker/Dockerfile -t $SERVER_NAME .

echo "构建镜像成功!"

# 运行docker容器

echo "创建并启动$SERVER_NAME容器..."

docker run --name $SERVER_NAME -d -p 8761:8761 $SERVER_NAME:v${DATE}

echo "$SERVER_NAME容器启动完成"

-------------------

说明:server_name\port\路径等,要根据个人情况填写

-------------------

保存退出。

左侧菜单->立即构建

左侧菜单->构建历史(Build History)第一条,显示构建进度,点击进度条,查看后台日志。

左侧菜单->工作空间,查看所有该工程下的文件和目录结构

位置:/var/lib/jenkins/workspace

构建的任务都在这下面。

0d96027ac3ee73b82416c1c590e403ee.png

jenkins工作过程:

1. 把源码从git全部下载下来

2. 在本地用mvn编译、打包

3. 顺序执行构建后shell脚本(docker部分)

构建过程中,出现各种异常,主要是找不到文件(路径不对),网络不通,内存不足之类的……

解决办法,参见后面“补充”。

创建第二个jenkins任务

有个偷懒儿的办法,在新建页面最下面,有个拷贝已存在的任务。

拷贝过来,改一改就能用了,哈哈。

f8555ec498524998f511ffdaa2004439.png

效果展示:

先构建wj-tets-eureka,再构建provider-user。

访问:http://49.232.150.148:8761/

9369cdbd855a51a737b44ec9c7b77de8.png

遗留问题:

1. 因为我的git工程是一个parent工程下面多个model,所以,在构建model的时候,jenkins会把所有parent代码下载下来(虽然没有影响,但总觉得浪费空间)。目前还不知道怎么解决。

2. 一个docker启动大约用掉200M内存,我的虚拟机最多只能启动俩服务……,后面会尝试给docker减个肥

git上同样有很多入门的SpringCloud教程,详见:

《史上最简单的 SpringCloud 教程》系列:

https://github.com/forezp/SpringCloudLearning

Spring Cloud Examples

内容跟《史上最简单的 SpringCloud 教程》极度相似,互有补充内容

https://github.com/ityouknow/spring-cloud-examples

Maven多模块编译慢的问题

https://blog.csdn.net/posonrick/article/details/51917703

=================补充=====================

1. docker构建镜像异常:

错误信息:

/usr/bin/docker-current: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/create?name=microservice-discovery-eureka: dial unix /var/run/docker.sock: connect: permission denied.

See '/usr/bin/docker-current run --help'.

原因:

Jenkins默认用户使用的是jenkins,没有操作 /var/run/docker.sock的权限。

解决:

方法一,修改默认用户为root(权限更大):

vi /etc/sysconfig/jenkins

JENKINS_USER="jenkins"

改成:

JENKINS_USER="root"

方法二,给jenkins用户操作权限

1)添加docker用户组

groupadd docker

2)把当前用户加入docker用户组

gpasswd -a ${USER} docker

3)查看是否添加成功

cat /etc/group | grep ^docker

4)重启docker

serivce docker restart

5)更新用户组

newgrp docker

2.  Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work

转自:https://cloud.tencent.com/developer/article/1552661

解决方法

vim /etc/sysctl.conf

或者

vi /usr/lib/sysctl.d/00-system.conf

添加如下代码:

net.ipv4.ip_forward=1

重启network服务

systemctl restart network

查看是否修改成功

sysctl net.ipv4.ip_forward

如果返回为“net.ipv4.ip_forward = 1”则表示成功了 重启容器即可。

3. ERROR: Maven JVM terminated unexpectedly with exit code 137

转自:https://www.cnblogs.com/sheng-247/p/7744527.html

解决:

  虚拟内存不够了。。。增加内存容量。

4. 常用docker命令:

1)查看docker的所有镜像:

docker images

2)列出所有运行中容器

docker ps

列出所有容器

docker ps -a

3)启动一个一直停留在后台运行的容器

docker run -dit 720cc49ec610 /bin/bash

4)登录docker容器:

docker exec -it b87ac4fe6fbc /bin/bash

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了实现Spring Cloud项目的自动化部署,你可以遵循以下步骤: 1. 首先,在项目的pom.xml文件中添加必要的依赖项。这些依赖包括Spring Cloud Config客户端依赖、Spring Boot Actuator、Feign、Hystrix和Netflix Ribbon等。你可以根据实际需求选择添加相应的依赖项。 2. 接下来,你需要配置相关的配置文件。例如,你可以创建一个bootstrap.yml文件来配置Spring Cloud Config客户端的连接信息,并指定配置文件的位置。此外,你还可以配置Eureka服务注册中心的信息,以便将服务注册到Eureka服务器上。 3. 然后,你可以使用构建工具(如Maven或Gradle)构建项目,并生成可部署的jar包或war包。 4. 接着,你可以使用自动化部署工具(如Jenkins、Ansible或Docker)来部署你的Spring Cloud项目。你可以使用这些工具来自动化地进行构建、测试和部署过程。 5. 最后,你可以使用监控工具(如Spring Boot Actuator和Hystrix Dashboard)来监控你的Spring Cloud应用程序的性能和健康状况。这些工具可以帮助你及时发现和解决潜在的问题。 综上所述,要实现Spring Cloud项目的自动化部署,你需要添加必要的依赖项,并配置相关的配置文件。然后,你可以使用构建工具和自动化部署工具来构建部署你的项目。最后,你可以使用监控工具来监控你的应用程序的性能和健康状况。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值