• Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)


    Linux 环境安装

    虚拟机相关环境安装可以查考我的这篇文章:https://blog.csdn.net/wuhuayangs/article/details/125295937?spm=1001.2014.3001.5501

    安装 Docker 之前查看是否已经安装,可以卸载重新安装。

    卸载 Docker

    1、列出当前 Docker 相关的安装包

    yum list installed|grep docker
    
    • 1

    2、如果已经存在,则卸载对应的包

    yum -y remove Docker包(比如docker-ce-cli.x86_64 )
    
    • 1

    3、最后删除 Docker 目录

    rm -rf /var/lib/docker
    rm -rf /var/lib/containerd
    
    • 1
    • 2

    安装 Docker

    1、检查环境
    在 CentOS 7 安装 Docker 要求系统为64位、系统内核版本为 3.10 以上,可以使用以下命令查看

    uname -r
    
    • 1

    在这里插入图片描述
    2、使用 yum 源安装 Docker

    yum -y install docker
    
    • 1

    3、查看当前版本和查看 Docker 是否安装成功

    docker version
    
    • 1

    在这里插入图片描述

    yum list installed | grep docker
    
    • 1

    在这里插入图片描述

    4、查看 Docker 服务状态

    systemctl status docker
    
    • 1

    5、启动 Docker

    systemctl start docker
    
    • 1

    安装 Jenkins

    1、搜索 Jenkins 镜像

    docker search jenkins
    
    • 1

    在这里插入图片描述

    1、Docker 下载 Jenkins

    docker pull jenkins/jenkins:lts
    
    • 1

    在这里插入图片描述
    Jenkins 的镜像已经下载完成

    3、创建映射目录
    我这里映射目录的路径为/data/jenkins_home/,是为了映射镜像容器中/data/jenkins_home文件夹的内容,大家也可以放到别的地方,

    mkdir -p /data/jenkins_home
    
    • 1

    4、修改文件夹的权限

    chown -R 1000:1000 /data/jenkins_home/
    
    • 1

    5、创建并启动 Jenkins 容器

    docker run -d --name jenkins -u root -p 11000:8080 -p 11089:8089 --privileged=true -v /data/jenkins_home/:/var/jenkins_home/ -v /usr/local/maven/apache-maven-3.6.3:/usr/local/maven jenkins/jenkins:lts
    
    • 1
    • -d:标识是让 Docker 容器在后台运行
    • –name: 定义一个容器的名字,如果没有指定,那么会自动生成一个随机数字符串当做 UUID
    • -p 11000:8080 :端口映射,11000 是本地端口号也就是 jenkins 的端口号,8080 是映射的端口号
    • -p 11089:8089 :将镜像的 8089 端口映射到服务器的11089 端口
    • -v /data/jenkins_home:/var/jenkins_home :绑定一个数据卷,/data/jenkins_home是刚才创建的本地数据卷
    • -v /usr/local/maven/apache-maven-3.6.3:/usr/local/maven :将宿主机 maven 绑定到 Jenkins 镜像的 /usr/local/maven下
    • --privileged=true:使用该参数,容器内的 root 拥有真正的 root 权限。否则,容器内的 root 只是外部的一个普通用户权限。

    通过以下命令进去容器看是否挂载了

    docker exec -it 容器ID bash
    
    • 1

    在这里插入图片描述

    6、查看启动是否

    docker ps -a
    
    • 1

    在这里插入图片描述

    7、根据虚拟机 IP + 端口访问
    由于我们上面 Docker 配置的是 11000 端口,去访问 11000 端口即可,如果是云服务器,需要开放安全组的 11000 端口
    在这里插入图片描述

    这里需要输入密码,我们根据 /var/jenkins_home/secrets/initialAdminPassword 这个文件路径找到密码,注意这个路径是 Docker 容器中的,所以我们通过如下命令来获取

    docker exec 1de90e765dfb(容器ID) cat /var/jenkins_home/secrets/initialAdminPassword
    
    • 1

    在这里插入图片描述
    密码输入以后点击继续,选择安装默认插件即可

    然后创建自己的账户
    在这里插入图片描述

    Jenkins 配置 Maven

    进入“全局工具配置”,找到“Maven”,MAVEN_HOME 里填 “/usr/local/maven”,这个是挂载的目录
    在这里插入图片描述

    Jenkins 配置 JDK

    这里使用 Jenkins 默认自动带的 jdk1.8,使用命令进入容器

    docker exec -it 容器ID bash
    
    • 1

    进入容器后,使用以下命令查看 Jenkins 默认自带的 jdk 路径

    echo $JAVA_HOME
    
    • 1

    在这里插入图片描述
    获取到 jdk 路径填入如下的 Jenkins 配置中
    在这里插入图片描述
    下面配置拉取gitee 代码需要的凭据,主要填写gitee用户名和账号

    在这里插入图片描述

    在构建的项目中填写拉取的代码地址和选择上面配置好的凭据点击保存就好

    在这里插入图片描述

    这里我们实现的是把当前编译好的 jar 包拷贝到应用服务器去启动,所以我们还需要配置 ssh 免密登录。

    从 jenkins 服务器 192.168.2.129 拷贝 jar 包到应用服务器 192.168.2.128 并且启动项目。

    配置 ssh 免密登录

    1、在 jenkins 机器上使用 root 用户生成秘钥

    ssh-keygen -t rsa
    进行三次回车
    
    • 1
    • 2

    2、运行后会在当前用户的/root目录生成一个.ssh文件夹,如下图
    在这里插入图片描述
    在这里插入图片描述

    文件描述:

    • id_rsa : 生成的私钥文件
    • id_rsa.pub : 生成的公钥文件
    • know_hosts : 已知的主机公钥清单

    3、通过 scp 把生成的 id_rsa.pub(公钥)内容复制到 192.168.2.128 中的 /root/.ssh/authorized_keys 文件下

    scp -p ~/.ssh/id_rsa.pub root@192.168.2.128:/root/.ssh/authorized_keys
    
    • 1

    在这里插入图片描述
    这里提示 ” No such file or directory“:没有这样的文件或目录,这里我们先在 2.128 服务器上面创建一个 .ssh 文件夹

    cd root/
    mkdir .ssh
    
    • 1
    • 2

    之后再执行上面的拷贝命令,输入密码执行成功,第一次还没有免密登录需要密码

    192.168.2.129:
    在这里插入图片描述
    192.168.2.128:
    在这里插入图片描述
    已经拷贝完成。

    5、在 192.168.2.129 服务器上进行免密连接测试

    ssh root@192.168.2.128
    
    • 1

    在这里插入图片描述
    出来这个提示证明已经免密登录 192.168.2.128 服务器了。

    在 192.168.2.129 上面创建一个文件夹 test

    cd home/
    mkdir test
    scp -r test root@192.168.2.128:/home/
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    192.168.2.128 服务看到文件夹 test 已经拷贝过来了
    在这里插入图片描述
    到此免密登录和拷贝实现成功,接下来就是从 jenkins 中把 jar 包部署到服务器。

    部署 SpringBoot 项目

    1、配置 SSH 连接,在系统管理 --> 系统配置,找到 Publish over SSH
    在这里插入图片描述
    在这里插入图片描述
    2、创建一个 maven 项目
    在这里插入图片描述
    3、Jenkins 部署配置
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    启动脚本 test.sh :

    #!/bin/bash
    echo "部署的目录和项目名称"
    DIR="/home/webapps"
    projectName="spring-boot2-dockerfile"
    
    echo "切换到启动脚本目录"
    cd ${DIR}
    
    BUILD_ID=dontKillMe
    
    echo "停止服务"
    sh stop.sh
    
    echo "停止服务"
    sh start.sh 
    
    echo "success"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在上面命令中还有两个启动脚本 stop.sh 和 start.sh,这里 切换到 /home/webapps 目录下创建脚本

    创建启动脚本 start.sh

    touch start.sh
    vi start.sh
    
    • 1
    • 2

    将下面代码粘贴到 start.sh 中

    #!/bin/bash
    set -e #任何命令出错就退出
    set -o pipefail
    
    APP_ID=spring-boot2-dockerfile
    APP_DIR="/home/webapps"
    
    nohup java -Dspring.profiles.active=dev -jar ${APP_DIR}/${APP_ID}.jar > release_out.log &
    start_ok=false
    if [[ $? = 0 ]];then
            sleep 3
            tail -n 10 release_out.log
            sleep 5
            tail -n 50 release_out.log
    fi
    aaa=`grep "Started" release_out.log | awk '{print $1}'`
    if [[ -n "${aaa}" ]];then
        echo "Application started ok"
        exit 0
    else
        echo "Application started error"
        exit 1
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    创建停止脚本 stop.sh:

    touch stop.sh
    vi stop.sh
    
    • 1
    • 2

    将下面代码粘贴到 stop.sh 中

    #!/bin/bash
    
    APP_ID=spring-boot2-dockerfile
    ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh
    
    • 1
    • 2
    • 3
    • 4

    4、最后构建发布项目

    构建成功
    在这里插入图片描述
    通过 tail -f release_out.log 实时查看日志,已经启动成功
    在这里插入图片描述
    在这里插入图片描述
    以上就是本文的全部内容,希望对大家的学习有所帮助!

  • 相关阅读:
    python-文件操作常用功能-2
    python字符串
    牛客网——扫雷
    【毕业设计】大数据共享单车数据分析系统 - python
    C语言memcpy +memmove实现
    【Java从零到架构师第③季】【50】权限控制—Shiro
    STM32_ESP8266 连接阿里云 操作图解
    Ceres 自动求导解析-从原理到实践
    【计算机网络】HTTP协议
    23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)
  • 原文地址:https://blog.csdn.net/wuhuayangs/article/details/125426751