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

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

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

3、最后删除 Docker 目录

rm -rf /var/lib/docker
rm -rf /var/lib/containerd

安装 Docker

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

uname -r

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

yum -y install docker

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

docker version

在这里插入图片描述

yum list installed | grep docker

在这里插入图片描述

4、查看 Docker 服务状态

systemctl status docker

5、启动 Docker

systemctl start docker

安装 Jenkins

1、搜索 Jenkins 镜像

docker search jenkins

Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第1张图片

1、Docker 下载 Jenkins

docker pull jenkins/jenkins:lts

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

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

mkdir -p /data/jenkins_home

4、修改文件夹的权限

chown -R 1000:1000 /data/jenkins_home/

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 
-v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
  • -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下
  • -v /var/run/docker.sock:/var/run/docker.sock:将本地socket映射到容器内
  • --privileged=true:使用该参数,容器内的 root 拥有真正的 root 权限。否则,容器内的 root 只是外部的一个普通用户权限。

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

docker exec -it 容器ID bash

Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第2张图片

6、查看启动是否

docker ps -a

在这里插入图片描述

7、根据虚拟机 IP + 端口访问
由于我们上面 Docker 配置的是 11000 端口,去访问 11000 端口即可,如果是云服务器,需要开放安全组的 11000 端口
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第3张图片

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

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

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

然后创建自己的账户
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第4张图片

Jenkins 配置 Maven

进入“全局工具配置”,找到“Maven”,MAVEN_HOME 里填 “/usr/local/maven”,这个是挂载的目录
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第5张图片

Jenkins 配置 JDK

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

docker exec -it 容器ID bash

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

echo $JAVA_HOME

在这里插入图片描述
获取到 jdk 路径填入如下的 Jenkins 配置中
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第6张图片
下面配置拉取gitee 代码需要的凭据,主要填写gitee用户名和账号

Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第7张图片

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

Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第8张图片

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

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

配置 ssh 免密登录

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

ssh-keygen -t rsa
进行三次回车

2、运行后会在当前用户的/root目录生成一个.ssh文件夹,如下图
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第9张图片
在这里插入图片描述

文件描述:

  • 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

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

cd root/
mkdir .ssh

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

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

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

ssh root@192.168.2.128

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

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

cd home/
mkdir test
scp -r test root@192.168.2.128:/home/

Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第10张图片
192.168.2.128 服务看到文件夹 test 已经拷贝过来了
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第11张图片
到此免密登录和拷贝实现成功,接下来就是从 jenkins 中把 jar 包部署到服务器。

部署 SpringBoot 项目

1、配置 SSH 连接,在系统管理 --> 系统配置,找到 Publish over SSH
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第12张图片
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第13张图片
2、创建一个 maven 项目
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第14张图片
3、Jenkins 部署配置
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第15张图片
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第16张图片

Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第17张图片
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第18张图片
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第19张图片

启动脚本 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"

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

创建启动脚本 start.sh

touch start.sh
vi start.sh

将下面代码粘贴到 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

创建停止脚本 stop.sh:

touch stop.sh
vi stop.sh

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

#!/bin/bash

APP_ID=spring-boot2-dockerfile
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

4、最后构建发布项目

构建成功
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第20张图片
通过 tail -f release_out.log 实时查看日志,已经启动成功
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第21张图片
Docker、Jenkins、Git 自动化部署 SpringBoot 项目(从零到搭建完成)_第22张图片
以上就是本文的全部内容,希望对大家的学习有所帮助!

你可能感兴趣的:(Linux,Docker,Jenkins,jenkins,docker,git)