预期结果

实现本地代码提交后,前后端自动编译打包部署,无需人工操作

准备工作

centos7.9.2

jdk1.8

git项目地址

正式开始

安装docker:yum -y install docker

查看docker版本:docker -v

docker build 编译日志 docker自动编译_docker build 编译日志

启动docker:systemctl start docker

查看docker服务状态:systemctl status docker

docker build 编译日志 docker自动编译_java_02

设为开机启动:systemctl enable docker.service

docker build 编译日志 docker自动编译_docker build 编译日志_03

创建宿主机文件夹(该目录后续为挂载目录):mkdir /usr/local/webSize

创建宿主机文件夹(该目录后续为前端挂载目录):mkdir /usr/local/webSize/dist

拉取并启动容器:docker run -d --name jenkins -u root --privileged=true -p 8080:8080 -p 9000:9000 -p 50000:50000 -v /usr/local/webSize:/data/jenkins_home jenkinsci/blueocean

备注:

run 启动容器,如有没有该容器,docker会从仓库拉取同时启动

-d 标识是让 docker 容器在后台运行

--name 定义一个容器的名字,如果没有指定,那么会自动生成一个随机数字符串当做UUID

-u root 以root权限启动

-p 8080:8080 端口映射,jenkins 默认端口8080

-p 9000:9000 项目端口映射

-p 50000:50000 端口映射

-v /usr/local/webSize:/var/jenkins_home 挂载绑定一个数据卷,/usr/local/webSize是刚才创建的本地数据卷

查看容器:docker ps

docker build 编译日志 docker自动编译_docker build 编译日志_04

此时输入ip+端口已经能够看到jenkins页面了

docker build 编译日志 docker自动编译_docker build 编译日志_05

进入容器:docker exec -it 容器id /bin/bash

根据提示执行:cat  /var/jenkins_home/secrets/initialAdminPassword

docker build 编译日志 docker自动编译_java_06

 输入密码后会跳转至

docker build 编译日志 docker自动编译_docker_07

选择安装推荐的插件

会出现

docker build 编译日志 docker自动编译_docker build 编译日志_08

等待一会

会出现

docker build 编译日志 docker自动编译_docker build 编译日志_09

 填写资料后保存并完成会跳转至

docker build 编译日志 docker自动编译_java_10

这里不做更改,继续点击保存并完成之后就跳转至jenkins主页了

接下来配置下需要的插件

docker build 编译日志 docker自动编译_自动化_11

docker build 编译日志 docker自动编译_自动化_12

docker build 编译日志 docker自动编译_docker build 编译日志_13

 输入:Maven Integration

docker build 编译日志 docker自动编译_自动化_14

 他会自动安装同样的方式再次安装node

docker build 编译日志 docker自动编译_docker_15

此时,需要的插件基本都好了,开始弄环境

docker build 编译日志 docker自动编译_jenkins_16

此处说明下,maven如果不使用默认的配置,可以将配置文件上传至宿主机/usr/local/webSize目录,之前咱们将这个目录作为挂载目录的。

同时上传jdk1.8的包到/usr/local/webSize目录下,也可以在线下载:wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"

解压:tar -zxvf jdk-8u141-linux-x64.tar.gz

此时在容器内其实已经有这两个文件了

docker build 编译日志 docker自动编译_java_17

 maven配置

docker build 编译日志 docker自动编译_自动化_18

 JDK配置

jenkins其实默认已经有jdk环境,但是系统自带的版本是11.0,有些东西不完全兼容,所以要用我们上传||下载的1.8

docker build 编译日志 docker自动编译_自动化_19

所以jdk用我们自己指定的路径

docker build 编译日志 docker自动编译_docker_20

 

docker build 编译日志 docker自动编译_自动化_21

配置maven

docker build 编译日志 docker自动编译_docker build 编译日志_22

配置node,版本我选择跟我本地版本一致

docker build 编译日志 docker自动编译_docker_23

 应用并保存,此时插件和环境的问题基本解决了

新建一个item

docker build 编译日志 docker自动编译_java_24

docker build 编译日志 docker自动编译_docker build 编译日志_25

任务名称建议英文,接下来就开始实现自动化的相关配置了

输入git地址后报红字,这时候是缺少权限,需要登录

docker build 编译日志 docker自动编译_docker build 编译日志_26

 完善相关信息

docker build 编译日志 docker自动编译_自动化_27

添加并选择后就不会报红了

docker build 编译日志 docker自动编译_docker build 编译日志_28

构建环境里选择node

docker build 编译日志 docker自动编译_docker_29

编辑前端构建脚本(路径方面根据自己需要变动,不是通用的)

docker build 编译日志 docker自动编译_java_30

#后台页面路径
UI_PATH=/var/jenkins_home/workspace/test/ruoyi-ui

# 前端路径(此地址已挂载,方便宿主机查看、dist需要提前创建)
WORK_UI_PATH=/data/jenkins_home/dist

echo "准备编译前端页面文件"
cd $UI_PATH

echo "拉取node依赖文件"
npm install --registry=https://registry.npm.taobao.org

echo "删除历史编译"
rm -rf ./dist/*

echo "编译"
npm run build:prod

#echo "删除工作目录原文件"
rm -rf $WORK_UI_PATH/*

#echo "将打包后文件复制到工作目录"
cp -rf ./dist/* $WORK_UI_PATH

编写后端脚本(路径方面根据自己需要变动,不是通用的)

docker build 编译日志 docker自动编译_jenkins_31

#!/bin/bash

#服务名称

SERVER_NAME=wordsCut

# 源jar路径,mvn打包完成之后,target目录下的jar包名称,也可选择成为war包,war包可移动到Tomcat的webapps目录下运行,这里使用jar包,用java -jar 命令执行

JAR_NAME=wordsCut

#target 打包生成jar包的目录

JAR_PATH=/var/jenkins_home/workspace/test/ruoyi-admin/target

# 打包完成之后,把jar包移动到运行jar包的目录--->(此处的路径也是挂载的路径,方便宿主机查看)

JAR_WORK_PATH=/data/jenkins_home

echo "查询进程id-->$SERVER_NAME"

PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $1}'`

echo "结束进程 $PID"

for id in $PID

do

kill -9 $id

echo "kill $id"

done

echo "结束进程完成"

#复制jar包到执行目录

echo "复制jar包到执行目录:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"

cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH

echo "复制jar包完成"

cd $JAR_WORK_PATH

#修改文件权限

chmod 777 $JAR_NAME.jar

#前台运行(方便查看运行异常)

java -jar $JAR_NAME.jar

#后台运行(生产环境使用)

#BUILD_ID=dontkillMe nohup java -jar $JAR_NAME.jar &

应用保存然后点击立即构建,注意观察控制台输出有没有异常,此时node和maven都需要拉需要的环境包,所以第一次很慢,启动成功后注意,还没结束,目前是以前台方式运行,并写,每次构建都需要手点,这不符合我们的预期

日程表填入:* * * * *

docker build 编译日志 docker自动编译_java_32

脚本更改

docker build 编译日志 docker自动编译_docker_33

 如果成功,在挂载目录下会出现

docker build 编译日志 docker自动编译_jenkins_34

 此时服务器已经是在运行状态,前端文件dist通过nginx代理即可

之后只要git上一旦有更新,便会自动重新打包部署