springcloud 集群部署jar文件,shell脚本执行

本文详细介绍了如何使用SpringCloud的Eureka服务注册中心实现高可用集群部署,包括配置双节点相互注册、编写Shell脚本进行服务启动与管理,以及在Linux环境下进行hosts文件修改等关键步骤。

本文主要是记录springcloud的注册中心的高可用、集群部署、项目打包jar文件编写shell脚本进行部署。

首选我们准备一个注册中心jar包,里面有两个配置文件

application-eureka1.properties   :

#服务端口
server.port=1111
#服务实例的host地址
eureka.instance.hostname=eureka1
#是否注册到其他服务
eureka.client.register-with-eureka=false
#是否检索其他服务
eureka.client.fetch-registry=false
#注册中心地址
eureka.client.service-url.defaultZone=http://eureka2:1112/eureka/
#关闭健康检测
eureka.server.enable-self-preservation=false
#更新注册实例列表间隔时间
eureka.server.eviction-interval-timer-in-ms=100

application-eureka2.properties

#服务端口
server.port=1112
#服务实例的host地址
eureka.instance.hostname=eureka2
#是否注册到其他服务
eureka.client.register-with-eureka=false
#是否检索其他服务
eureka.client.fetch-registry=false
#注册中心地址
eureka.client.service-url.defaultZone=http://eureka1:1111/eureka/
#关闭健康检测
eureka.server.enable-self-preservation=false
#更新注册实例列表间隔时间
eureka.server.eviction-interval-timer-in-ms=100

通过两个配置文件的相互注册所有的服务实例会共享在一起

修改linux下的hosts文件,vi /etc/hosts

eureka注册中心的启动脚本如下:

#!bin/bash
PROJECT="eureka-server-0.0.1-SNAPSHOT"
JAR_PATH="/product/cloud_server/server_jar/"
project_id=$(ps -ef| grep $PROJECT |grep -v grep|awk '{print $'4'}')
echo "eureka server port:"$project_id;

if [ "x" != "x$project_id" ]
then
    echo "service exce kill option";
    $(ps -elf| grep $PROJECT |grep -v grep|awk '{print $'4'}'|xargs kill -9);
else
    echo "service no runing ---exce start option";
fi 

$(/usr/local/java/jdk1.8/bin/java  -Xmx1024m -jar $JAR_PATH$PROJECT.jar --spring.profiles.active=eureka1   > ../logs/$PROJECT1.log &);
echo "start prot:1111";

sleep 1

$(/usr/local/java/jdk1.8/bin/java  -Xmx1024m -jar $JAR_PATH$PROJECT.jar --spring.profiles.active=eureka2   > ../logs/$PROJECT2.log &);
echo "start port:1112";

echo "eureka start end"

通过红色处进行指定某个文件启动,配置文件里面指定了项目启动的端口。

其他服务的shell内容基本相同,主要是根据jar包的名称检索是否已经启动,如果已经启动的话就kill掉先关的进程,然后重新启动,配置了年轻代的大小、指定了具体的启动配置文件。

 

在使用 Jenkins 部署 Spring Cloud 应用时,需要结合自动化构建、镜像打以及容器化部署等技术。以下是一个完整的部署流程和技术要点: ### 1. 准备Maven配置以支持Spring Cloud依赖 由于某些版本的 Spring Cloud(如 Finchley.RC1 或 Finchley.M9)在 Maven 中央仓库中可能不完整,因此需要明确指定 `spring-cloud-dependencies` 的版本,并确保其与 Spring Boot 版本兼容[^1]。例如: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` 此外,还需要确保 `<build>` 配置正确,以便将资源正确打JAR 文件中[^2]: ```xml <build> <resources> <resource> <directory>${basedir}/src/main/resources</directory> <includes> <include>**/**</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ``` ### 2. 使用Jenkins进行持续集/持续交付(CI/CD) 在 Jenkins 中配置项目时,需通过 Pipeline 脚本或自由风格项目实现自动化部署。以下是基于 Pipeline 的典型脚本结构: ```groovy pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package' } } stage('Docker Build') { steps { sh 'docker build -t springcloud-app:latest .' } } stage('Docker Push') { steps { sh 'docker login -u admin -p Harbor12345 my-harbor.com' sh 'docker tag springcloud-app:latest my-harbor.com/myproject/springcloud-app:latest' sh 'docker push my-harbor.com/myproject/springcloud-app:latest' } } stage('Deploy to Docker Host') { steps { sshagent(['server-ssh-credentials']) { sh ''' ssh user@docker-host "mkdir -p /opt/app && cd /opt/app && wget http://jenkins-server/job/springcloud-app/lastSuccessfulBuild/artifact/target/springcloud-app.jar" ssh user@docker-host "cd /opt/app && java -jar springcloud-app.jar --spring.profiles.active=prod ''' } } } } } ``` ### 3. 使用Shell脚本自动化部署Docker容器 对于更复杂的部署场景,可以编写 Shell 脚本来处理容器的清理、镜像拉取和启动过程。下面是一个示例脚本 `deployCluster.sh` 的简化版: ```bash #!/bin/sh harbor_url=$1 harbor_project_name=$2 project_name=$3 tag=$4 port=$5 profile=$6 imageName="$harbor_url/$harbor_project_name/$project_name:$tag" # Stop and remove existing container containerId=$(docker ps -a | grep "$project_name" | awk '{print $1}') if [ ! -z "$containerId" ]; then docker stop $containerId docker rm $containerId fi # Remove existing image imageId=$(docker images | grep "$project_name" | awk '{print $3}') if [ ! -z "$imageId" ]; then docker rmi -f $imageId fi # Pull new image docker pull $imageName # Run new container docker run -di -p $port:$port $imageName --spring.profiles.active=$profile ``` 此脚本可被 Jenkins 调用,实现自动化的容器更新和重启。 ### 4. Jenkins与Harbor集 如果企业内部使用 Harbor 作为私有镜像仓库,则 Jenkins 在部署过程中需要登录并推送镜像至 Harbor。确保 Jenkins 所在主机能够访问 Harbor 并具有相应权限[^3]。 ### 5. 注意事项 - 确保 Jenkins 构建节点上安装了 Maven、Docker 和 Java 运行环境。 - 对于 Spring Cloud 微服务架构,建议为每个微服务单独配置 Jenkins Job 或 Pipeline。 - 若使用集群部署,应考虑负载均衡和服务发现机制,如 Eureka Server 或 Consul。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值