【云原生技术】在 Jenkinsfile 中,两种构建jar包方式介绍


在 Jenkinsfile 中,您可以选择在构建过程中生成 JAR 包,然后将该 JAR 包复制到 Docker 镜像中,也可以在 Dockerfile 中使用多阶段构建来完成相同的工作。具体选择取决于您的构建流程和需求。

方案一:在 Jenkins 中生成 JAR 包,然后进行 Docker 构建

这种方法将 JAR 包的构建过程放在 Jenkins 流水线中完成,然后在 Dockerfile 中使用生成的 JAR 包。

Dockerfile
# 基础镜像仅用于运行阶段
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 将构建好的 JAR 文件复制到镜像中
COPY target/app.jar /app/app.jar

# 设置容器启动时运行的命令
CMD ["java", "-jar", "app.jar"]
Jenkinsfile
pipeline {
    agent any

    environment {
        DOCKER_CREDENTIALS_ID = 'dockerhub-credentials-id' // Docker Hub 凭据 ID
        DOCKER_IMAGE = 'myapp:latest'
    }

    stages {
        stage('Checkout') {
            steps {
                // 检出代码
                checkout scm
            }
        }
        stage('Build JAR') {
            steps {
                // 在 Jenkins 工作区中构建 JAR 包
                sh 'mvn clean package'
            }
        }
        stage('Build Docker Image') {
            steps {
                script {
                    // 构建 Docker 镜像,将生成的 JAR 包包含进去
                    docker.build(env.DOCKER_IMAGE)
                }
            }
        }
        stage('Push Docker Image') {
            steps {
                script {
                    docker.withRegistry('https://index.docker.io/v1/', env.DOCKER_CREDENTIALS_ID) {
                        docker.image(env.DOCKER_IMAGE).push()
                    }
                }
            }
        }
    }
}

方案二:在 Dockerfile 中使用多阶段构建

这种方法将 JAR 包的构建过程包含在 Dockerfile 中,通过多阶段构建来生成最终的运行镜像。

Dockerfile
# 第一阶段:构建阶段
FROM maven:3.6.3-jdk-11 AS builder

# 设置工作目录
WORKDIR /app

# 复制 Maven 的配置文件
COPY pom.xml .

# 下载依赖,这样可以利用 Docker 缓存
RUN mvn dependency:go-offline

# 复制源代码到工作目录
COPY src /app/src

# 编译和打包应用程序
RUN mvn package

# 第二阶段:运行阶段
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 从构建阶段复制 JAR 文件到运行阶段
COPY --from=builder /app/target/app.jar /app/app.jar

# 设置容器启动时运行的命令
CMD ["java", "-jar", "app.jar"]
Jenkinsfile
pipeline {
    agent any

    environment {
        DOCKER_CREDENTIALS_ID = 'dockerhub-credentials-id' // Docker Hub 凭据 ID
        DOCKER_IMAGE = 'myapp:latest'
    }

    stages {
        stage('Checkout') {
            steps {
                // 检出代码
                checkout scm
            }
        }
        stage('Build Docker Image') {
            steps {
                script {
                    // 使用 Dockerfile 构建 Docker 镜像
                    docker.build(env.DOCKER_IMAGE)
                }
            }
        }
        stage('Push Docker Image') {
            steps {
                script {
                    docker.withRegistry('https://index.docker.io/v1/', env.DOCKER_CREDENTIALS_ID) {
                        docker.image(env.DOCKER_IMAGE).push()
                    }
                }
            }
        }
    }
}

总结

  • 方案一:在 Jenkinsfile 中先构建 JAR 包,然后在 Docker 构建阶段将该 JAR 包复制到 Docker 镜像中。这种方法更直观,适合构建步骤较为简单的项目。
  • 方案二:在 Dockerfile 中使用多阶段构建,将构建和运行环境分离。这种方法优化了 Docker 镜像的大小和安全性,但需要更多的 Dockerfile 知识。

两种方案都可以实现同样的结果,选择哪种方案取决于您的具体需求和偏好。对于复杂的构建流程,多阶段构建可能更具优势,而对于简单的构建流程,直接在 Jenkinsfile 中构建 JAR 包然后进行 Docker 构建可能更为方便。

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿寻寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值