文章目录
- 概述
 - 部署前端Vue应用
 - 一、环境准备
 - 1、Dockerfile
 - 2、.dockerignore
 - 3、nginx.conf
 - 4、Jenkinsfile
 
- 二、Jenkins部署
 - 1、新建任务
 - 2、流水线
 - 3、`Build Now` 构建 & 访问
 
- Springboot后端应用
 - 1. 准备工作
 - 2. 创建项目结构
 - 3. 编写 Dockerfile
 - 后端 Dockerfile (`backend/Dockerfile`)
 
- 4. 创建 Jenkinsfile
 - Jenkinsfile 示例:
 
- 5. 设置 Jenkins Job
 - 6. 运行 Pipeline
 - 7. 持续集成与交付
 - 8. 监控与维护
 
- 其他Jenkinsfile示例
 
概述
本文介绍如何使用Dockerfile+Jenkinsfile方式部署Java前后端应用
部署前端Vue应用
一、环境准备
项目中新增Docker文件夹

1、Dockerfile
# 拉取nginx基础镜像
FROM nginx:1.21.1
# 维护者信息
MAINTAINER zhengqingya
# 将dist文件中的内容复制到 `/usr/share/nginx/html/` 这个目录下面
COPY dist/  /usr/share/nginx/html/
# 用本地配置文件来替换nginx镜像里的默认配置
COPY nginx/nginx.conf /etc/nginx/nginx.conf
# 对外暴漏的端口号
# [注:EXPOSE指令只是声明容器运行时提供的服务端口,给读者看有哪些端口,在运行时只会开启程序自身的端口!!]
EXPOSE 80
# 启动nginx容器
CMD ["nginx", "-g", "daemon off;"]
 
2、.dockerignore
node_modules
 
3、nginx.conf
user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    # include /etc/nginx/conf.d/*.conf;
    server {
        listen       80;
        server_name  localhost; # 服务器地址或绑定域名
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
        # =========================================================
        # ================== ↓↓↓↓↓↓ start ↓↓↓↓↓↓ ==================
        # =========================================================
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
        # =========================================================
        # ================== ↑↑↑↑↑↑ end ↑↑↑↑↑↑ ==================
        # =========================================================
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}
 
4、Jenkinsfile
在项目根目录下新建Jenkinsfile文件
pipeline {
    agent any
    environment {
        APP_NAME = 'vue-web'
        APP_PROFILE = 'prod'
        APP_IMAGE = 'vue-web:dev'
        APP_PORT = 88
    }
    stages {
        stage('vue环境准备') {
            steps {
                sh """
                # 下载依赖 & 构建dist
                cnpm install && cnpm run build:${APP_PROFILE}
                # 拷贝dist到Docker目录下
                cp -r dist Docker/
                """
            }
        }
        stage('构建Docker镜像') {
            steps {
                sh """
                    # 删除旧容器
                    docker ps -a | grep ${APP_NAME} | awk '{print \$1}' | xargs -i docker stop {} | xargs -i docker rm {}
                    # 删除旧镜像
                    docker images | grep ${APP_NAME} | awk '{print \$3}' | xargs -i docker rmi {}
                    # 进入Docker目录
                    cd Docker
                    # 构建镜像
                    docker build -f Dockerfile -t ${APP_IMAGE} . --no-cache
                """
            }
        }
        stage('运行容器') {
            steps {
                sh """
                    docker run -d -p ${APP_PORT}:80 --restart=always --name ${APP_NAME} ${APP_IMAGE}
                """
            }
        }
    }
}
 
二、Jenkins部署
1、新建任务
选择Pipeline

2、流水线

脚本路径:
Jenkinsfile
 
保存配置
3、Build Now 构建 & 访问
 
ip:88
Springboot后端应用
使用 Dockerfile 和 Jenkinsfile 的方式来部署 Java 前端和后端应用,可以实现一个高效的 CI/CD 流程。这个流程包括构建、测试、打包、创建 Docker 镜像、推送镜像到仓库以及部署到目标环境。下面是详细的步骤指南,涵盖了前后端分离的 Java 应用的部署。
1. 准备工作
- 安装和配置 Jenkins:确保你已经安装了 Jenkins,并且它能够访问你的代码仓库(如 GitHub 或 GitLab)。
 - 安装必要的插件: 
  
- Git Plugin:用于从 Git 仓库拉取代码。
 - Docker Pipeline Plugin:用于在 Jenkins Pipeline 中操作 Docker。
 - Docker Hub / 私有仓库凭证:如果你打算将 Docker 镜像推送到 Docker Hub 或其他私有仓库,请确保 Jenkins 已经配置好相应的凭证。
 
 - Docker 安装:确保 Jenkins 节点上安装并配置了 Docker。
 
2. 创建项目结构
假设你有一个包含后端的应用,目录结构如下:
my-java-app/
├── backend/
│   ├── src/
│   ├── pom.xml (或 build.gradle)
│   └── Dockerfile
 
3. 编写 Dockerfile
后端 Dockerfile (backend/Dockerfile)
 
# 使用官方的 OpenJDK 镜像作为基础镜像
FROM eclipse-temurin:17-jdk-alpine
# 维护者信息 (可选)
LABEL maintainer="your-email@example.com"
# 设置工作目录
WORKDIR /app
# 将本地的 myapp.jar 复制到容器中的 /app 目录下
COPY target/myapp.jar /app/myapp.jar
# 暴露应用监听的端口 (默认为8080)
EXPOSE 8080
# 启动命令,使用 java 命令来运行 jar 文件
ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]
 
4. 创建 Jenkinsfile
在项目的根目录下创建 Jenkinsfile 来定义 CI/CD 流程。
Jenkinsfile 示例:
pipeline {
    agent any
    environment {
        DOCKER_IMAGE_BACKEND = 'my-backend-app'
        DOCKER_TAG_BACKEND = "latest"
  
        DOCKER_HUB_CREDENTIALS_ID = 'docker-hub-credentials-id' // 替换为你的凭证 ID
    }
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'https://github.com/your-repo-url.git'
            }
        }
        stage('Build Backend') {
            steps {
                dir('backend') {
                    sh './mvnw clean package -DskipTests' // 使用 Maven 构建,如果使用 Gradle,则改为 ./gradlew build -x test
                }
            }
        }    
        stage('Build Docker Images') {
            parallel {
                stage('Backend Image') {
                    steps {
                        script {
                            docker.build("${env.DOCKER_IMAGE_BACKEND}:${env.DOCKER_TAG_BACKEND}", 'backend')
                        }
                    }
                }
               
            }
        }
        stage('Push Docker Images') {
            parallel {
                stage('Push Backend Image') {
                    steps {
                        script {
                            docker.withRegistry('https://registry.hub.docker.com', "${env.DOCKER_HUB_CREDENTIALS_ID}") {
                                docker.image("${env.DOCKER_IMAGE_BACKEND}:${env.DOCKER_TAG_BACKEND}").push()
                            }
                        }
                    }
                }
              
            }
        }
        stage('Deploy') {
            steps {
                script {
                    // 这里可以根据实际情况添加部署逻辑,例如通过 Docker Compose 或 Kubernetes 部署
                    // 下面是一个简单的示例,直接运行容器
                    def backendContainer = docker.run("-d --name my-backend-container -p 8080:8080 ${env.DOCKER_IMAGE_BACKEND}:${env.DOCKER_TAG_BACKEND}")
                  
                }
            }
        }
    }
    post {
        always {
            // 清理工作空间或其他清理任务
            cleanWs()
        }
    }
}
 
5. 设置 Jenkins Job
- 在 Jenkins 中创建一个新的 Pipeline Job。
 - 将 
Pipeline script from SCM选项设置为 Git,并指定你的仓库 URL 和分支。 - 如果你在仓库中有 
Jenkinsfile,选择它作为 Pipeline 的定义文件。 - 配置构建触发器(例如,基于 Git 提交或定时触发)。
 
6. 运行 Pipeline
一旦所有配置完成,点击“立即构建”按钮来手动触发一次构建,或者等待自动触发条件满足时自动执行。
7. 持续集成与交付
- 持续集成 (CI):每次代码提交后,Jenkins 会自动拉取最新代码并运行测试,确保代码质量。
 - 持续交付 (CD):构建成功后,Jenkins 会自动创建 Docker 镜像并将其推送到仓库,然后根据配置部署到目标环境。
 
8. 监控与维护
- 日志查看:通过 Jenkins UI 查看构建和部署的日志输出,以便快速定位问题。
 - 健康检查:为应用设置健康检查端点,并在 Jenkins 中配置相应检查以确保服务正常运行。
 - 回滚策略:考虑实现回滚机制,以便在新版本出现问题时能够迅速恢复到上一个稳定版本。
 
其他Jenkinsfile示例
pipeline{
    agent {
        label 'MVN3'
    }
    stages{
        stage('clone'){
            steps{
                git url: 'https://github.com/tarunkumarpendem/shopi
                zer.git',
                    branch: 'master'
            }
        }
        stage ('build') {
            steps {
               sh 'mvn clean package'
           }
        }
        stage('Build the Code') {
            steps {
                withSonarQubeEnv('sonarcloud') {
                    sh script: 'mvn clean package sonar:sonar'
                }
            }
        stage('archiving-artifacts'){
            steps{
                archiveArtifacts artifacts: '**/target/*.jar', followSymlinks: false
            }
        }
        stage('junit_reports'){
            steps{
                junit '**/surefire-reports/*.xml'
            }
        }
    }    
pipeline {
    agent {label 'OPENJDK-11-JDK'}
    triggers {
        pollSCM('0 17 * * *')
    }
    stages {
        stage('vcs') {
            steps {
                git branch: 'release', url: 'https://github.com/longflewtinku/shopizer.git'         
            }
        }
        stage('merge') {
            steps {
                sh 'git checkout devops'
                sh 'git merge release --no-ff'
            }
        }
        stage('build') {
            steps {
                sh 'mvn clean install'
            }
        }
    }
}
                








![在Ubuntu-22.04 [WSL2]中配置Docker](https://i-blog.csdnimg.cn/direct/44a03d15d8874e629fae4ec4a1d2d7a0.png)









