预期结果
实现本地代码提交后,前后端自动编译打包部署,无需人工操作
准备工作
centos7.9.2
jdk1.8
git项目地址
正式开始
安装docker:yum -y install docker
查看docker版本:docker -v
启动docker:systemctl start docker
查看docker服务状态:systemctl status docker
设为开机启动:systemctl enable docker.service
创建宿主机文件夹(该目录后续为挂载目录):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
此时输入ip+端口已经能够看到jenkins页面了
进入容器:docker exec -it 容器id /bin/bash
根据提示执行:cat /var/jenkins_home/secrets/initialAdminPassword
输入密码后会跳转至
选择安装推荐的插件
会出现
等待一会
会出现
填写资料后保存并完成会跳转至
这里不做更改,继续点击保存并完成之后就跳转至jenkins主页了
接下来配置下需要的插件
输入:Maven Integration
他会自动安装同样的方式再次安装node
此时,需要的插件基本都好了,开始弄环境
此处说明下,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
此时在容器内其实已经有这两个文件了
maven配置
JDK配置
jenkins其实默认已经有jdk环境,但是系统自带的版本是11.0,有些东西不完全兼容,所以要用我们上传||下载的1.8
所以jdk用我们自己指定的路径
配置maven
配置node,版本我选择跟我本地版本一致
应用并保存,此时插件和环境的问题基本解决了
新建一个item
任务名称建议英文,接下来就开始实现自动化的相关配置了
输入git地址后报红字,这时候是缺少权限,需要登录
完善相关信息
添加并选择后就不会报红了
构建环境里选择node
编辑前端构建脚本(路径方面根据自己需要变动,不是通用的)
#后台页面路径
UI_PATH=/var/jenkins_home/workspace/test/ruoyi-ui# 前端路径(此地址已挂载,方便宿主机查看、dist需要提前创建)
WORK_UI_PATH=/data/jenkins_home/distecho "准备编译前端页面文件"
cd $UI_PATHecho "拉取node依赖文件"
npm install --registry=https://registry.npm.taobao.orgecho "删除历史编译"
rm -rf ./dist/*echo "编译"
npm run build:prod#echo "删除工作目录原文件"
rm -rf $WORK_UI_PATH/*#echo "将打包后文件复制到工作目录"
cp -rf ./dist/* $WORK_UI_PATH
编写后端脚本(路径方面根据自己需要变动,不是通用的)
#!/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都需要拉需要的环境包,所以第一次很慢,启动成功后注意,还没结束,目前是以前台方式运行,并写,每次构建都需要手点,这不符合我们的预期
日程表填入:* * * * *
脚本更改
如果成功,在挂载目录下会出现
此时服务器已经是在运行状态,前端文件dist通过nginx代理即可
之后只要git上一旦有更新,便会自动重新打包部署