Jenkins整合Docker实现CICD自动化部署的详细过程(若依项目)

 更新时间:2024年10月12日 10:53:25   作者:qq243920161  
本文介绍了如何使用Jenkins和Docker实现CI/CD自动化部署,文章介绍了环境准备,包括Jenkins、Docker、JDK、Node和Maven,然后讨论了如何配置GitLab环境并利用Webhooks实现代码的自动拉取和部署,最后,展示了如何部署前后端分离的项目,并通过实际操作验证了整个流程的有效性

前期准备

提前准备好jenkins环境

并且jenkins能使用docker命令,并且已经配置好了jdk、node、maven环境,我之前写了安装jenkins的博客,里面讲得比较详细,推荐用我这种方式安装

docker安装jenkins,并配置jdk、node和maven_jenkins

需要提前准备好gitlab环境

github、gitee其实也可以,但是需要和jenkins互相能访问到,这边推荐gitlab

docker搭建gitlab

需要准备好mysql

如果没安装的,docker一句话就可以了

docker run -d \
--name mysql \
-p 0.0.0.0:3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
mysql:8.0.39

准备好redis环境

docker run -d \
--name redis \
-p 0.0.0.0:6379:6379 \
--restart=always \
redis:7.4.1

安装gitlab插件

如果想实现代码提交自动部署,需要安装gitlab插件

进入系统管理,插件管理

搜索gitlab插件进行安装

安装成功即可,无需重启

开始部署

拉取项目

拉取若依项目,我们拉取的是若依项目的前后端分离版

若依项目下载地址

根目录有个ruoyi-ui,这是前端项目,我们把它移动到外层,我们分成2个项目部署

部署后端项目

将这两个sql文件导入到数据库中

到application-druid.yml中修改数据库的连接信息

修改redis的连接信息

根目录新建Dockerfile

pipeline {
    // 任意节点都可以执行Jenkins流水线
    agent any
    tools {
        // 刚刚配置的java环境
        jdk 'jdk8'
    }
    // 环境变量
    environment {
        // 项目名称
        APP_NAME = 'ruoyi-server'
        // 端口
        APP_PORT = 9800
    }
    // 流水线阶段
    stages {
        // 构建阶段
        stage('build') {
            // 步骤
            steps {
                // 可以写流水线脚本,groovy语法
                script {
                    // 执行shell命令
                    sh 'mvn clean package -DskipTests=true'
                }
            }
        }
        // 部署阶段
        stage('deploy') {
            steps {
                script {
                    sh """
                        docker stop $APP_NAME || true
                        docker rm $APP_NAME || true
                        docker rmi $APP_NAME || true
                        docker build -t $APP_NAME .
                        docker run -d --name $APP_NAME \
                        -p 0.0.0.0:$APP_PORT:$APP_PORT \
                        --restart=always \
                        $APP_NAME \
                        --server.port=$APP_PORT
                    """
                }
            }
        }
    }
}

根目录新建Jenkinsfile

pipeline {
    // 任意节点都可以执行Jenkins流水线
    agent any
    tools {
        // 刚刚配置的java环境
        jdk 'jdk8'
    }
    // 环境变量
    environment {
        // 项目名称
        APP_NAME = 'ruoyi-server'
        // 端口
        APP_PORT = 9800
    }
    // 流水线阶段
    stages {
        // 构建阶段
        stage('build') {
            // 步骤
            steps {
                // 可以写流水线脚本,groovy语法
                script {
                    // 执行shell命令
                    sh 'mvn clean package -DskipTests=true'
                }
            }
        }
        // 部署阶段
        stage('deploy') {
            steps {
                script {
                    sh """
                        docker stop $APP_NAME || true
                        docker rm $APP_NAME || true
                        docker rmi $APP_NAME || true
                        docker build -t $APP_NAME .
                        docker run -d --name $APP_NAME \
                        -p 0.0.0.0:$APP_PORT:$APP_PORT \
                        --restart=always \
                        $APP_NAME \
                        --server.port=$APP_PORT
                    """
                }
            }
        }
    }
}

根目录新建.dockerignore

这个是为了提高docker的构建速度,把不必要的文件屏蔽起来

.git
ruoyi-admin/src
ruoyi-admin/target/classes
ruoyi-admin/target/generated-sources
ruoyi-admin/target/maven-archiver
ruoyi-admin/target/maven-status
ruoyi-common
ruoyi-framework
ruoyi-generator
ruoyi-quartz
ruoyi-system
ruoyi-ui
sql

检查项目中是否已经有了这几个文件

将项目提交到gitlab

Jenkins中新建任务

名称随便填,选择流水线,确定

找到流水线,选择scm

然后选择git

然后把ssh地址复制进去

不出意外的话,会出现无法连接仓库,原因是Jenkins无法拉取gitlab的代码

我们到Jenkins容器中

docker exec -it jenkins bash

生成ssh秘钥

ssh-keygen
# 然后3个回车

查看公钥

cat ~/.ssh/id_rsa.pub

将公钥配置到gitlab中

进行一次ssh通信,然后将信息保存下来

这步仍然是在jenkins容器中操作的

# 192.168.200.120是gitlab的地址,8091是gitlab的ssh端口
ssh-keyscan -p 8091 192.168.200.120 >> ~/.ssh/known_hosts

查看一下.ssh目录下的文件

ls -l ~/.ssh

如果有这3个文件,就说明Jenkins可以拉取gitlab的代码了

回到Jenkins看下,就会发现错误消失了

下一步,找到这个,把它勾上

展开高级

找到Secret token,点击Generate生成,就会生成一串token,这串token一会儿到gitlab中会用上

我们到gitlab中Settings中有一个Webhooks

我们来添加一个webhook

填写相关信息

如果出现了这个错误,说明github没有开启webhook

 我们到管理员设置中,找到Network

找到Allow requests to the local network from webhooks and integrations,勾上

这时候再来添加webhooks就能添加了

我们模拟一次push事件,看看Jenkins有什么反应

回来看Jenkins,你就会发现Jenkins在构建了

这时候代码push的时候,Jenkins也会自动构建

如果没有报错就说明构建成功了

部署前端项目

打开前端项目

添加nginx.conf,真实的后端地址根据实际情况修改

server {
    # 前端访问端口
    listen 9801;
    # 前端
    location / {
        # 前端页面路径
        root /usr/share/nginx/html;
        # 尝试着从$uri寻找静态资源,找不到就到$uri/找,如果还是找不到就找/index.html
        try_files $uri $uri/ /index.html;
    }
    # 后端
    location /prod-api {
        # 去掉/prot-api开头
        rewrite ^/prod-api/(.*)$ /$1 break;
        # 真实的后端地址,根据实际情况修改
        proxy_pass http://192.168.200.120:9800;
    }
}

添加Dockerfile

# 使用nginx镜像来部署
FROM nginx:1.26.2
# 解决文件名乱码问题
ENV LC_ALL=C.UTF-8
# 将nginx配置文件添加到容器
ADD nginx.conf /etc/nginx/conf.d
# 前端打包后,将dist下的文件复制到容器里
COPY dist/ /usr/share/nginx/html/

添加.dockerignore

node_modulessrc

添加Jenkinsfile

pipeline {
    agent any
    environment {
        // 项目名称
        APP_NAME = 'ruiyi-ui'
        // 端口
        APP_PORT = 9801
    }
    stages {
        stage('build') {
            steps {
                script {
                    // 进行打包
                    sh """
                        npm install
                        npm run build:prod
                    """
                }
            }
        }
        stage('deploy') {
            steps {
                script {
                    sh """
                        docker stop $APP_NAME || true
                        docker rm $APP_NAME || true
                        docker rmi $APP_NAME || true
                        docker build -t $APP_NAME .
                        docker run -d --name $APP_NAME \
                        -p 0.0.0.0:$APP_PORT:$APP_PORT \
                        --restart=always \
                        $APP_NAME
                    """
                }
            }
        }
    }
}

检查一下有没有这几个文件

提交代码

Jenkins再新建一个项目

和刚刚一样,勾上

生成Secret token

设置gitlab仓库地址

 gitlab中webhooks配置

添加一个webhook

然后push代码

等待Jenkins构建

构建成功

我们到浏览器看一下吧

到此这篇关于Jenkins整合Docker实现CICD自动化部署的文章就介绍到这了,更多相关Jenkins整合Docker CICD自动化部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何隔离docker容器中的用户的方法

    如何隔离docker容器中的用户的方法

    这篇文章主要介绍了如何隔离docker容器中的用户的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Docker安装部署Neo4j的保姆级教程

    Docker安装部署Neo4j的保姆级教程

    本文主要介绍了Docker安装部署Neo4j的保姆级教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • docker容器指定主机同网段方式

    docker容器指定主机同网段方式

    文章介绍了如何使用Docker的macvlan网络模式,让容器直接连接到物理网络,提高网络性能和稳定性,同时,也提供了创建、绑定、配置和解除容器网络的相关命令
    2025-12-12
  • 利用docker搭建LAMP运行环境教程详解

    利用docker搭建LAMP运行环境教程详解

    LAMP相信对大家来说都不陌生, Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器,所以这篇文章给大家介绍利用docker快速搭建LAMP运行环境的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-10-10
  • IDEA通过Docker插件部署SpringBoot项目的过程详解

    IDEA通过Docker插件部署SpringBoot项目的过程详解

    在idea中如何通过Docker插件部署SpringBoot项目呢?很多朋友在配置过程中走了很多误区,今天小编给大家分享一篇教程关于IDEA通过Docker插件部署SpringBoot项目的过程,感兴趣的朋友一起看看吧
    2021-11-11
  • 如何解决docker容器访问不了外部网络问题

    如何解决docker容器访问不了外部网络问题

    介绍了Docker bridge网络的工作原理,包括虚拟网桥的创建、容器的IP地址分配、IP转发的作用以及NAT的配置,通过配置IP转发和NAT规则,Docker能够实现容器与外部网络之间的通信,文章还提供了解决某个具体问题的步骤
    2024-11-11
  • docker部署ES集群的实现

    docker部署ES集群的实现

    本文介绍了如何在Ubuntu20.04.2 LTS环境下通过Docker部署Elasticsearch7.10.1集群,详细步骤包括从Docker镜像仓库拉取Elasticsearch镜像,创建文件映射目录,运行Docker容器,配置Elasticsearch的端口和权限,以及集群的相关设置,感兴趣的可以了解一下
    2024-10-10
  • Docker网络配置从基础到高级实践的完全指南

    Docker网络配置从基础到高级实践的完全指南

    Docker 网络系统允许容器之间、容器与主机以及外部网络进行安全可控的通信,理解 Docker 网络是构建可靠容器化应用的关键,下面我们就来看看Docker基础网络配置和高级网络配置的具体方法吧
    2025-05-05
  • 基于windows10安装docker及遇到的问题

    基于windows10安装docker及遇到的问题

    这篇文章主要介绍了基于windows10安装docker及遇到的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Linux中使用Docker构建Nginx容器的详细攻略

    Linux中使用Docker构建Nginx容器的详细攻略

    Nginx是一款广泛使用的高性能 Web 服务器和反向代理服务器,适用于各种场景,如静态文件服务、负载均衡和 API 网关等,在本教程中,我们将详细介绍如何在 Docker 中构建并运行一个 Nginx 容器,帮助开发者快速搭建和管理 Nginx 服务,感兴趣的朋友跟随小编一起看看吧
    2025-12-12

最新评论