Jenkins持续集成项目

1、利用Docker安装Jenkins

#拉取镜像
docker pull jenkinsci/blueocean
#给home_mount赋予777权限
chmod 777 ./home_mount
#创建容器
docker run -d -p 8080:8080 -p 50000:50000 -v /home/lighthouse/Jenkins/home_mount:/var/jenkins_home -v  /home/lighthouse/Maven/apache-maven-3.8.5:/usr/local/maven -v /home/lighthouse/Java/jdk1.8:/usr/local/jdk  -v /etc/localtime:/etc/localtime --name jenkins jenkinsci/blueocean

配置好Jenkins的环境即可使用了
根据所需要的下载对应插件:我用到了SSH, Maven

2、新建Jenkins项目

1、新建任务

在这里插入图片描述

2、选择项目风格

Tip:我的后端项目SpringBoot项目,所以我选的是构建Maven项目
在这里插入图片描述

3、配置项目

在这里插入图片描述
配置Jenksin项目分为一下几个步骤
在这里插入图片描述

  • General:配置一些项目的基本信息
  • 源码管理:用来让Jenkins持续构建的代码库远端
  • 构建触发器:选择何种条件会触发本项目的构建
  • 构建环境:配置Jenksin项目的环境
  • Pre Step:构建前的操作步骤(操作环境是在项目中,就是在/workspace/hongyuMS-test/)
  • Build:构建操作
  • Post Steps:构建后操作(操作环境是在项目中,就是在/workspace/hongyuMS-test/)
  • 构建后操作:构建后的操作步骤(操作环境是在项目中,就是在/workspace/hongyuMS-test/)

3、我的配置

1、General

在这里插入图片描述

2、源码管理

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

3、构建触发器

在这里插入图片描述

4、Pre Steps

在这里插入图片描述

5、Build

在这里插入图片描述

6、Post Steps

这里我是添加两个步骤
第一个步骤,是在我的Jenkins项目中执行一个shell命令,我写的是一个bash脚本
第二个步骤,是我通过ssh通讯方式,发送文件且在远端的默认文件夹(SSH配置的远端文件夹)下执行一个bash脚本

如果需要将打包的文件发送给远端服务器,则需配置 SSH Server。直接在Jenkins构建的话则不需要部署服务器
在这里插入图片描述

这里的shell是构建完后执行的bash脚本
在这里插入图片描述

通过SSH发送文件或执行命令
在这里插入图片描述

source files:表示要发送的文件;我这就表示将docker_file下的文件全部发送过去。pwd为当前jenkins项目
的目录
Remove prefix:表示去掉前缀。不去掉的话则传过去的是一个docker_file文件夹
Remote directory:表示的是,远端文件夹位置。pwd为远端home

贴上脚本

这个脚本的逻辑就是将配置好的Dockerfile路径和打好包的项目移动到同一文件夹下

#!/bin/bash 
#操作/项目路径(Dockerfile存放的路径)
BASE_PATH=/var/jenkins_home/workspace/ruoyi/docker_file
#源jar路径
SOURCE_PATH=/var/jenkins_home/workspace/ruoyi/ruoyi-admin/target
#Dockerfile路径
FILE_PATH=/var/jenkins_home/workspace/ruoyi/Dockerfile
#jar包名称
jar=ruoyi-admin.jar
 
#最新构建代码 移动到项目环境
function transfer(){
    mkdir $BASE_PATH
    echo "移动 $SOURCE_PATH/$jar$BASE_PATH/"
    cp $SOURCE_PATH/$jar $BASE_PATH/
    echo "移动完成"
    echo "移动 $FILE_PATH$BASE_PATH/"
    cp $FILE_PATH $BASE_PATH/
    echo "移动完成"
}
 
#运行脚本
function run(){
        transfer
}

#入口
run 

这个脚本的逻辑就是,在同一文件夹下的Dockerfile和打好包的项目进行镜像的构建和容器的部署。具体是先查看是否存在当前应用正在运行的容器,如果存在,则删除之前的容器和镜像。然后根据自定义的容器名称和镜像名称进行镜像的构建和容器的部署。如果没有正在运行的容器,则直接构建镜像部署容器。

#!/bin/bash 
#配置信息
#操作/项目相对路径(Dockerfile和源jar的文件位置)
BASE_PATH=/root/DockerFiles/jenkins/workspace/ruoyi/dist
#存储文件的位置(物理机)
FILE_PATH=/root/DockerFiles/ruoyi
VFILE_PATH=/data
#容器名称
CONTAINER_NAME=ruoyi
#镜像名称
MIRR_NAME=ruoyi
#端口映射
PORT=15200

#查找正在运行的本程序的容器ID
CID=$(docker ps | grep "$CONTAINER_NAME" | awk '{print $1}')
#当前容器的个数
CNUMS=$(docker ps | grep "$CONTAINER_NAME" | wc -l)
#查找正在运行的本程序的镜像ID
IID=$(docker images | grep "$MIRR_NAME" | awk '{print $3}')
#当前镜像个数
INUMS=$(docker images | grep "$MIRR_NAME" | wc -l)
#当前时间
DATE=$(date "+%Y-%m-%d-%H-%M-%S")

#进入项目镜像路径
function goDir(){
        echo "进入$BASE_PATH" >>log.txt
        cd $BASE_PATH
}
#构建docker镜像
function build(){
        echo "开始构建镜像" >>log.txt
        docker build -t $CONTAINER_NAME$DATE .
        echo "结束构建镜像" >>log.txt
}

#运行docker容器
function run(){
        goDir
        if [ -n "$CID" ]; then
                echo "存在$CONTAINER_NAME容器,CID=$CID,停止$CONTAINER_NAME容器" >>log.txt
                docker stop $CID
                delRuningCt
                delRuningIg
                build   
                docker run -d -p $PORT:$PORT -v $FILE_PATH:$VFILE_PATH --restart always --name $CONTAINER_NAME$DATE $MIRR_NAME$DATE
                echo "$CONTAINER_NAME容器创建完成" >>log.txt
        else
                echo "不存在$CONTAINER_NAME容器,docker run创建$CONTAINER_NAME容器" >>log.txt
                build
                docker run --restart always  --name $CONTAINER_NAME$DATE -d -p $PORT:$PORT  -v $FILE_PATH:$VFILE_PATH $MIRR_NAME$DATE
                echo "$CONTAINER_NAME容器创建完成" >>log.txt
        fi
}

#删除正在运行的docker容器
function delRuningCt(){
        echo "当前正在运行的$CONTAINER_NAME容器个数: $CNUMS" >>log.txt
        # 当前CID的个数<=1时才允许删除
        if [ "$CNUMS" -le 1 ];then
                echo "删除容器 $CID $CONTAINER_NAME" >>log.txt
                docker rm $CID
        else
                echo "不允许一次性删除多个容器"
        fi
}
#删除镜像
function delRuningIg(){
        echo "当前正在运行的$MIRR_NAME镜像个数: $INUMS" >>log.txt
        # 当前IID的个数<=1时才允许删除
        if [ "$INUMS" -le 1 ];then
                echo "删除镜像 $IID $MIRR_NAME" >>log.txt
                docker rmi $IID
        else
                echo "不允许一次性删除多个镜像" >>log.txt
        fi
}
#入口
run 

4、总结

因为我们是要将项目持续集成,打包成Docker容器部署在应用服务器上的所以整合成一下几个步骤。

  1. 配置项目基本信息
  2. 填写Git源码仓库地址
  3. 配置Maven构建指令
  4. 配置Shell脚本,移动项目Dockerfile和Jar包/War包放入同一个文件夹
  5. SSH方式移动两个文件(相当于是镜像)到应用服务器
  6. 在应用服务器下执行脚本,部署容器
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值