Jenkins持续交付实战
实现项目:JeeSite4
这里使用的是开源项目:JeeSite4
(JAVA项目模板)
源码位置:https://gitee.com/yj-l/JeeSite4
原始工程源码:https://gitee.com/thinkgem/jeesite4
项目目录结构
# 多模块组合项目
- 基础公共引擎模块 common
- 核心系统模块 core
- 模块示例模板 template
- 模块父节点 parent
- 入口模块 root
- web模块 web
- Deploy 部署代码
环境准备
mysql(JeeSite4版本需要mysql 8) + java + maven
mysql
-
安装
docker pull mysql:8
-
创建目录用来存放相关的配置、日志、数据
mkdir -p /root/mysql/log/ mkdir -p /root/mysql/conf/ mkdir -p /root/mysql/data/ touch /root/mysql/my.cnf
my.cnf文件内容如下
[mysqld] user=mysql character-set-server=utf8 default_authentication_plugin=mysql_native_password secure_file_priv=/var/lib/mysql expire_logs_days=7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=1000 [client] default-character-set=utf8 [mysql] default-character-set=utf8
-
运行
docker run -di -p 3306:3306 --privileged=true -v /root/soft/docker-mysql/log:/var/log/mysql -v /root/soft/docker-mysql/data:/var/lib/mysql -v /root/soft/docker-mysql/conf/:/etc/mysql -v /root/soft/docker-mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:8 #-e MYSQL_ROOT_PASSWORD=root:mysql数据库密码设置为root #--privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
-
使用
mysql
连接工具navicat
测试安装是否成功
java开发环境安装
-
下载
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
-
安装
centOS:yum install java-1.8-openjdk* -y ubuntu:apt-get install oracle-java8-installer mac:brew cask install java
-
解压安装,并配置环境变量
将JDK运行程序直接解压到本地路径,然后配置环境变量
vim /etc/profile
JAVA_HOME=<jdk root path> export PATH=$PATH:$JAVA_HOME/bin
-
java环境安装正确的验证
java -version
-
IntelliJ IDEA
配置JDK-
File --> Project Structure --> SDK
,添加选中jdk
安装目录 -
File --> Project Structure --> Project
-
Maven环境安装
-
下载
https://maven.apache.org/download.cgi
或者
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
-
下载文件:zip或者tar格式压缩包,带bin字样的表明是可以直接运行的二进制文件
-
将安装包解压到本地路径,然后配置环境变量
vim /etc/profile
# tar -zxvf apache-maven-3.6.3-bin.tar.gz export M2_HOME=<maven root path> export PATH=$PATH:$M2_HOME/bin
source /etc/profile
-
验证Maven安装成功
mvn -version
-
在IntelliJ IDEA中配置maven
- 在
File | Settings | Build, Execution, Deployment | Build Tools | Maven 配置
Maven home directory:D:\environment\apache-maven-3.8.1
- 重启
IntelliJ IDEA
- 在
加速依赖包下载方法,在settings.xml中添加阿里云镜像
maven下载java的很多依赖包,如果服务器是在国外,需要保证网络互通(避免通讯故障),这时就需要配置镜像库,apache-maven-3.6.3/conf/settings.xml
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
项目配置、调式、运行
数据库准备
-
创建jeesite数据库
create database `jeesite`;
-
检查数据创建结果
刷新查看是否创建成果
-
初始化数据导入
-
打开
JeeSite4\web\src\main\resources\config\application.yml
,填写数据库配置(IP、端口、用户名、密码) -
进入项目路径
jeesite4/web/bin
-
运行数据初始化脚本程序
init-data.sh(windows batch command : init-data.bat)
D:JeeSite4\web\bin>init-data.bat
初始化成功,如下图:
-
然后到查看数据库是否添加46张表
-
IDE里配置项目
-
项目
JeeSite4\root\pom.xml
Maven 根节点到IDE的maven view中-
使用
IntelliJ IDEA
,打开root/pom.xml
-
在
pom.xml
,在文件内容中右键点击add the maven
或者 按下图的步骤,导入后需要等一会
-
-
其余依赖module会根据配置一起导入
在IDE在Maven编译、打包项目
-
编译打包
- 在
maven view
中选中JeeSite Root
下Lifecycle
中的Clean + Install(ctrl+单击选中),然后单击运行按钮
-
打包成功,如下图:
- 在
-
IDE里直接运行项目
-
在Run/Debug Configurations中添加Spring Boot
-
配置Main class:com.jeesite.modules.Application
-
运行项目 ,浏览器访问:http://localhost:8980/a/login
-
命令行里编译、打包项目
-
进入项目的root模块所在的目录,然后运行mvn clean install 命令执行项目编译
D:\java-project\JeeSite4\root>mvn clean install
-
打包成功,如下图:
-
-
IDE 里面运行项目
-
展开
JeeSite Web -> Plugins -> Spring Boot:run
,直接双击运行
-
命令行里运行项目
-
进入jeesite4/web目录下,运行
mvn clean spring-boot:run -Dmaven.test.skip=true
浏览器里访问验证web应用启动的正确性
http://localhost:8980/
管理员用户名/密码:system/admin
脚本部署,并部署到jenkins进行持续交付部署
-
准备脚本
deploy/start_spring-boot.sh
#!/usr/bin/env bash ## 检查系统类型 export os_type=`uname` ## 停止spring-boot函数 killSpringBoot() { pid=`ps -ef|grep spring-boot|grep java|awk '{print $2}'` echo "spring-boot list :$pid" if [ "$pid" = "" ] then echo "no spring-boot pid alive" else kill -9 $pid fi } ## Kill 当前正在运行的spring-boot killSpringBoot ## Maven 编译 cd ${WORKSPACE}/root mvn clean install ## Maven 运行 cd ${WORKSPACE}/web nohup mvn clean spring-boot:run -Dmaven.test.skip=true &
-
jenkins容器配置java、maven环境
-
启动
jenkins
容器,挂载宿主机目录-
创建宿主机配置目录
mkdir -p /root/soft/jenkins/conf vim en_config.conf # 内容如下 以下的环境变量与挂载宿主机的目录一致 # maven环境变量 export M2_HOME=/usr/local/maven export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin # jdk JAVA_HOME=/usr/local/jdk/jdk1.8.0_271 #JAVA_HOME=/root/soft/jdk/jdk1.8.0_271 CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH
-
在jenkins的工作目录
jenkins_home
目录下创建vim .bashrc # 避免执行没有权限,所以在启动容器时要加上-u root或者-u 0 chmod 777 /etc/profile cat /conf/en_config.conf >> /etc/profile source /etc/profile
-
启动jenkins容器需要加上以下内容
-v /root/soft/jdk/jdk1.8.0_271:/usr/local/jdk/jdk1.8.0_271 -v /root/soft/maven/apache-maven-3.6.3:/usr/local/maven -v /root/soft/jenkins/conf:/conf/ -u root # 完整命令 docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v /root/soft/jdk/jdk1.8.0_271:/usr/local/jdk/jdk1.8.0_271 -v /root/soft/maven/apache-maven-3.6.3:/usr/local/maven -v /root/soft/jenkins/conf:/conf/ -v /root/soft/jenkins/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
-
-
-
slave节点安装git,并配置密钥
- 安装git
- 生成密钥
- 公钥添加到仓库
- 私钥配置到jenkins凭据
-
将java、maven、Git环境配置到全局系统配置
-
系统管理 >> 全局工具配置
-
Maven 配置
-
默认 settings 提供
-
文件系统中的
settings
文件-
文件路径:宿主机maven安装目录/conf/settings.xml,如下:
/root/soft/maven/apache-maven-3.6.3/conf/settings.xml
-
-
-
默认全局 settings 提供
-
文件系统中的全局
settings
文件-
文件路径:宿主机maven安装目录/conf/settings.xml,如下:
/root/soft/maven/apache-maven-3.6.3/conf/settings.xml
-
-
-
-
JDK(没有报错,可以先不管)
-
Git
- name:
Git
- Path to Git executable:
/usr/bin/git
(通过whereis git
)
- name:
-
Maven
- name:
Maven
- MAVEN_HOME:
/usr/local/maven
- name:
-
-
-
创建jenkins任务,设定部署任务
-
限制项目的运行节点:
master/node
-
源码管理
-
构建:
-
执行shell
jenkins如果在shell里使用nohup发现还是不能后台运行,直接挂掉。
那么可以在jenkins命令里加上BUILD_ID=dontKillMe解决
# 别杀我。避免进程随构建结束被杀掉 #BUILD_ID=DONTKILLME . /etc/profile sh deploy/start_spring-boot.sh
-
-
-
任务执行,构建完成,如下图:
https://ceshiren.com/t/topic/6238
踩坑问题
1、Maven打包报错Could not transfer artifact com.jeesite:jeesite-parent:pom:4.1.9-SNAPSHOT找不到依赖的问题
解决方案
-
打开maven安装包下的conf/settings.xml
-
添加国内私有镜像库,我这里添加的是阿里云的,位置要添加正确,我之前就是直接添加到最后一行了,最后才发现内容是有一块的
<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>