当前位置: 首页 > article >正文

devops-Jenkins一键部署多台实例

Deckerfile


# 第一阶段:构建阶段
FROM maven:3.8.4-openjdk-17 AS build
# 设置工作目录
WORKDIR /app
# 复制项目的 pom.xml 文件,先下载依赖以利用缓存
COPY pom.xml .
RUN mvn dependency:go-offline
# 复制项目源代码
COPY src ./src
# 打包项目
RUN mvn package -DskipTests

# 第二阶段:运行阶段
FROM openjdk:17-jdk-slim
# 设置工作目录
WORKDIR /app
# 从构建阶段复制打包好的 jar 包
COPY --from=build /app/target/your-spring-boot-app.jar app.jar
# 复制 lib 目录(如果有必要)
COPY lib/ lib/
# 暴露应用程序端口,使用环境变量控制
ENV APP_PORT=8080
EXPOSE $APP_PORT

#定义时区环境变量
ENV  TIME_ZONE Asiz/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone
# 启动 Spring Boot 应用程序,使用环境变量配置端口
ENTRYPOINT java -Xms256m -Xmx256m $JAVA_OPTS -DSW_AGENT_NAME=$svcname -jar -Dspring.profiles.active=$SPRING_PROFILES_ACTIVE$SPRING_PROFILES *.jar



build.sh

#!/bin/bash
# 声明脚本使用的解释器为bash,这是大多数Linux系统默认的shell,它能识别和执行各种常见的命令和脚本语法

# 定义Spring Boot项目的jar包名称和Docker镜像名称
# JAR_FILE 变量存储Spring Boot项目打包后生成的jar包文件名
# 在实际使用时,需要将其替换为你项目真正生成的jar包名称
JAR_FILE="your-spring-boot-app.jar"
# IMAGE_NAME 变量定义了要构建的Docker镜像的名称和标签
# 这里使用 "latest" 作为标签,通常表示该镜像是最新版本
IMAGE_NAME="your-spring-boot-app:latest"

# 定义目标服务器列表
# SERVERS 是一个数组,数组中的每个元素表示一个目标服务器的连接信息
# 格式为 "用户名@服务器地址",实际使用时要替换为真实的服务器信息
SERVERS=(
    "user1@server1.example.com"
    "user2@server2.example.com"
)

# 定义服务器密码(如果使用密码认证)
# PASSWORD 变量存储连接目标服务器时使用的密码
# 不过使用密码认证存在安全风险,建议使用SSH密钥认证
# 实际使用时要替换为真实的服务器登录密码
PASSWORD="your-server-password"

# 构建Docker镜像
# docker build 是Docker用于构建镜像的核心命令
# -t $IMAGE_NAME 选项用于为构建的镜像指定名称和标签,这里使用前面定义的 IMAGE_NAME 变量
# . 表示使用当前目录下的 Dockerfile 来构建镜像,当前目录是脚本执行时所在的目录
docker build -t $IMAGE_NAME .

# 标记镜像并推送到Docker Hub
# docker tag 命令用于为本地的Docker镜像添加一个新的标签
# 这里将之前构建的镜像标记为 your-dockerhub-username/$IMAGE_NAME 的格式
# 这样做是为了将镜像推送到指定的 Docker Hub 账号下,需要替换为真实的 Docker Hub 用户名
docker tag $IMAGE_NAME your-dockerhub-username/$IMAGE_NAME
# docker push 命令用于将本地标记好的镜像推送到 Docker Hub 仓库
# 这样其他服务器就可以从 Docker Hub 拉取这个镜像了
docker push your-dockerhub-username/$IMAGE_NAME

# 登录到目标服务器并拉取运行镜像
# 这是一个 for 循环,用于遍历 SERVERS 数组中的每个服务器
# "${SERVERS[@]}" 表示获取数组中的所有元素
for server in "${SERVERS[@]}"; do
    # 输出一条信息,提示正在向当前服务器进行部署
    # $server 是当前循环到的服务器连接信息
    echo "Deploying to $server..."
    
    # 登录到目标服务器
    # sshpass 是一个工具,用于在命令行中传递 SSH 密码
    # -p "$PASSWORD" 指定 SSH 登录时使用的密码,即前面定义的 PASSWORD 变量
    # ssh $server 表示使用 SSH 协议连接到目标服务器
    # "docker login -u your-dockerhub-username -p your-dockerhub-password" 是在目标服务器上执行的命令
    # 该命令用于登录到 Docker Hub,需要替换为真实的 Docker Hub 用户名和密码
    sshpass -p "$PASSWORD" ssh $server "docker login -u your-dockerhub-username -p your-dockerhub-password"
    
    # 在目标服务器上拉取并运行容器
    # 这里再次使用 sshpass 和 ssh 连接到目标服务器
    # "docker pull your-dockerhub-username/$IMAGE_NAME" 是在目标服务器上执行的拉取镜像命令
    # 从 Docker Hub 拉取之前推送的镜像
    sshpass -p "$PASSWORD" ssh $server "docker pull your-dockerhub-username/$IMAGE_NAME"
    # "docker run -d -p 8080:8080 your-dockerhub-username/$IMAGE_NAME" 是在目标服务器上执行的运行容器命令
    # -d 选项表示以守护进程模式运行容器,即容器在后台运行
    # -p 8080:8080 选项将容器内部的 8080 端口映射到宿主机的 8080 端口
    sshpass -p "$PASSWORD" ssh $server "docker run -d -p 8080:8080 your-dockerhub-username/$IMAGE_NAME"
    
    # 输出一条信息,提示对当前服务器的部署已完成
    echo "Deployment to $server completed."
done

同理使用相同的Dockerfile, 参考上面的build.sh, 编辑Jenkins 部署


http://www.kler.cn/a/558784.html

相关文章:

  • 2025年02月21日Github流行趋势
  • 把 vscode 伪装成 goland
  • MinIO对象存储在Windows中的部署方法
  • go 语言中的线程池
  • 项目8:信用违约预测-集成学习
  • Debian软件包重构
  • PAT甲级 1103 Integer Factorization
  • Android Loader机制解析
  • elf_loader:一个使用Rust编写的ELF加载器
  • RabbitMQ学习—day6—死信队列与延迟队列
  • 网络IP跳动问题解决详
  • flink operator v1.10部署flink v1.19.2
  • 前后端分离系统架构:基于Spring Boot的最佳实践
  • Python数据结构深度探索:树的构建与遍历
  • 跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
  • 高速PCB电源层
  • 跟着 Lua 5.1 官方参考文档学习 Lua (8)
  • MyBatis框架七:缓存
  • 智能测试执行 利用算法 利用图像识别、自然语言处理等技术实现自动化测试执行
  • 《操作系统 - 清华大学》8 -1:进程管理:进程的定义