一、前置条件
在开始“Jenkins+Docker 一键自动化部署 SpringBoot 项目”的手动部署前,需要完成以下环境准备:
- 安装并配置Java环境,SpringBoot项目需要Java支持;
- 安装并配置Docker环境,需要使用Docker运行SpringBoot项目;
- 编写Dockerfile文件,用于Docker镜像构建;
- 编写Jenkinsfile文件,用于Jenkins自动化构建。
二、使用Dockerfile构建Docker镜像
在Dockerfile中定义了SpringBoot项目所需的环境,以及如何运行项目。下面是一个示例Dockerfile文件:
FROM java:8-jdk-alpine
WORKDIR /app
COPY target/{your-app.jar} /app
ENTRYPOINT ["java", "-jar", "your-app.jar"]
Dockerfile中从基础镜像java:8-jdk-alpine开始构建,设置工作目录为/app。然后将SpringBoot应用jar包拷贝到/app目录下,最后设置应用程序入口点,用于启动SpringBoot应用。
运行以下命令构建镜像:
docker build -t your-app-image .
其中,your-app-image为Docker镜像名称,.表示在当前目录下查找Dockerfile文件。
三、使用Jenkinsfile自动构建Docker镜像
Jenkinsfile是定义Jenkins构建流水线的脚本文件。下面是一个示例Jenkinsfile文件:
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
environment {
APP_NAME = 'your-app'
IMAGE_NAME = 'your-app-image'
DOCKER_REPO = 'your-docker-repo'
}
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Build Docker image') {
steps {
sh 'docker build -t $DOCKER_REPO/$IMAGE_NAME:$BUILD_NUMBER .'
}
post {
success {
sh 'docker push $DOCKER_REPO/$IMAGE_NAME:$BUILD_NUMBER'
}
}
}
stage('Deploy') {
steps {
deploy(
app: $APP_NAME,
dockerImage: $DOCKER_REPO/$IMAGE_NAME:$BUILD_NUMBER
)
}
}
}
post {
always {
cleanWs()
sh 'docker rmi $DOCKER_REPO/$IMAGE_NAME:$BUILD_NUMBER'
}
}
}
Jenkinsfile中定义了构建流程。首先,使用maven:3-alpine基础镜像作为默认代理代理环境。然后,定义了环境变量,包括SpringBoot应用名称、Docker镜像名称和Docker仓库地址。接下来是构建流程,包括构建、构建Docker镜像和部署。构建阶段使用maven进行构建,构建Docker镜像阶段使用Dockerfile文件生成Docker镜像,最后推送Docker镜像到Docker仓库,并在部署阶段使用Docker部署SpringBoot应用。最后是在任务之后始终清理工作空间并删除Docker镜像。
四、示例说明
例1: SpringBoot应用程序名称为"sample-app",Docker容器镜像命名为"sample-image",Docker仓库名称为"local.docker.repo"。
在项目根提供Dockerfile的基础上,可以通过以下命令进行构建镜像。 然后通过 Dockerfile 进行运行,端口使用标准 80 端口,将 Spring Boot 应用程序的端口映射至 Docker 容器的标准 8080 端口。
docker build -t local.docker.repo/sample-image .
docker run -p 80:8080 local.docker.repo/sample-image
例2: 随机变量 SpringBoot应用程序名称、Docker容器镜像和Docker仓库名称。
通过变量来执行部署的自动化构建。 在 Jenkins 中,我们已经定义了参数和凭据,即:
参数名称 | 值 |
---|---|
APP_NAME | $APP_NAME |
IMAGE_NAME | $IMAGE_NAME |
DOCKER_REPO | $DOCKER_REPO |
DOCKERHUB_CREDENTIALS | Docker 自描述凭证 (Docker Hub 中的凭证) 使用 dockerhub |
使用随机变量 Spring Boot 应用程序名称和 Docker 容器镜像的名称。
为了避免命名规则混乱,我们将应用程序名称和 Docker 容器映像视为相同的变量。在这个例子中,我们可以选择随机生成这个变量。
environment {
APP_NAME = getRandomVariable(10)
IMAGE_NAME = APP_NAME
DOCKER_REPO = 'local.docker.repo'
}
然后,我们可以使用随机生成的变量进行自动化构建。
pipeline {
environment {
APP_NAME = getRandomVariable(10)
IMAGE_NAME = APP_NAME
DOCKER_REPO = 'your-docker-repo'
}
....
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Jenkins+Docker 一键自动化部署 SpringBoot 项目的详细步骤 - Python技术站