jenkins实现自动部署(CD/CI)
执行流程图
一 环境服务器配置
1、需要在服务器上安装以下环境:
1) 安装jdk-1.8
2) 安装maven-3.6.1
3) 安装git-2.34
4) 安装node-16.13.1(也可以不用,根据部署方式选择)
5)sonarQube-6.7.4
2、安装完成后将环境变量配置好
3、进入maven的setting.xml文件将存储区改
4、将镜像地址改为阿里云镜像地址,如下添加了两个镜像,防止有的镜像找不到包
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
5、通过命令mvn install:install-file -Dfile=/usr/local/jars/formal/Algorithm_assessment.jar -DgroupId=com.xjgd -DartifactId=algorithm_sd -Dversion=2.0 -Dpackaging=jar
将算法包添加进maven仓库
6、添加到maven仓库后可以在 resposity/com/xjgd目录下看到算法包
7、配置过程可能会由于缺少 maven-metadata-local.xml 文件导致一直编译失败,该文件是坐标引导,会引导我们去哪里找包路径,如果没有这个文件maven就找不到包就会去云镜像里面找相应的包,自定义的包在云镜像肯定找不到,找不到就会报错。
8、这种情况我们就直接从原来正常的包下面把包拷过来,我就是在windows下直接把整个resposity拷过来,免得差东差西的
二 安装插件
相关插件
1 jdk
2 maven
3 git
4 Gedentials Binding (和凭证相关的)
5 Gitlab Hook (构建触发器,为了构建时使用实时构建,提交代码就构建)
6 gitlab
7 SonarQube Scaner(代码检查插件)
其他还有插件根据自己的需要安装,上面是最主要的插件
由于jenkins是在服务器安装好的就不需要我们去安装,我们登录jenkins后点击Mannge Jenkins进入管理页面—>点击Mannage Plugins,如下
三 配置
1、安装完成之后返回点击Mannge Jenkins进入管理页面—>点击Global Tool Configuration 进入全局配置可以查看到安装的插件
2、然后配置插件对应的信息
3、配置凭据/凭证
4、配置凭据,与gitlab关联
四 新建项目
1、准备工作配置完成后新建一个项目,这里主要介绍freestyle类型的项目
2、设置构建后保留时间
3、配置gitlab
4、构建触发器配置
5、配置脚本
track.sh的具体脚本
#!/bin/sh
#.etc/profil
mvn clean package
#该目录为jenkins工作区的target目录
app_dir=/var/lib/jenkins/workspace/freestyleTrack/track-admin/target
#jenkins工作目录下的jar包
app_file_path=$app_dir/track-admin.jar
#jenkins工作目录下的jar包
app_path=$app_dir/track-admin.jar
if [ -f $app_file_path ] ;then
echo -- stop app
pidlist=`ps -ef | grep track-admin.jar | grep -v grep | awk '{print $2}'`
if [ "$pidlist" = "" ] ;then
echo "进程pid不存在!"
else
echo "进程pid :$pidlist"
kill -9 $pidlist
echo "KILL $ pidlist:"
fi
# export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64
echo -- 开始启动 $app_path
nohup java -jar $app_path &
echo -- 启动完成
fi
同理,部署前端项目的时候脚本
#!/bin/sh
echo $PATH
node -v
npm -v
#第一次安装需要npm install,后面就不需要
echo '开始安装npm'
# npm install
echo '开始打包'
npm run build:prod
echo '打包成功'
#移除原来的路径
rm -R /opt/track/track-ui/
#将新打包的文件放到原来路径下
cp -r /var/lib/jenkins/workspace/freestyleTrack-ui/dist/. /opt/track/track-ui
echo '配置track-ui成功'
五 配置SonarQube代码走查
官网:https://www.sonarqube.org
本次下载版本为6.7.4,如果下载版本过高会不支持mysql5.7版本和jdk1.8版本
1 在mysql5.7数据库中创建sonar数据库
2 下载sonar压缩包 https://www.sonarqube.org/downloads/ 下载后解压到 /opt 目录下
3 通过命令 useradd sonar
创建sonar用户,必须用sonar启动,否则报错
通过命令chown -R sonar. /opt/sonar
更改sonar目录及文件权限
4 修改sonar配置文件
通过命令vim /opt/sonar/conf/sonar.properties
进入sonar.properties文件
5、配置以下地方
sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
RUN_AS_USER=sonar
注意:sonar默认监听9000端口,如果9000端口被占用,需要更改。
6、启动sonar,启动过程中有一些坑都可以通过百度解决
cd /opt/sonar
su sonar ./bin/linux-x86-64/sonar.sh start 启动
su sonar ./bin/linux-x86-64/sonar.sh status 查看状态
su sonar ./bin/linux-x86-64/sonar.sh stop 停止
tail -f logs/sonar.logs 查看日志
7、访问sonar http://xxxx:9000
默认账户:admin/admin
创建token
第一次登陆时会要求创建token,此时该token应该保存,后面jenkins整合时要用到。由于已经设置过token值,这里就没有设置token的截图效果
8、在jenkins中安装SonarQube Scanner插件
9、添加SonarQube凭据
1)在用户列表->root->凭据里面
然后点击“添加凭据”
10、Jenkins进行SonarQube配置,Manage Jenkins->Configure System->SonarQube servers
11、在Manage Jenkins->Global Tool Configuration配置
12、SonaQube关闭审查结果上传到SCM功能
13、在项目添加SonaQube代码审查(非流水线项目)
添加构建步骤:
# 项目唯一标识
sonar.projectKey=freestyleImportExport
# SonarQube UI中显示的名称和版本。
sonar.projectName=freestyleImportExport
sonar.projectVersion=1.0
#该配置为加载项目下的编译好的文件,此版本的sonar没有该配置会报错
sonar.java.binaries =/var/lib/jenkins/workspace/freestyleImportExport/target/classes
#扫描元素 .代表目录下所有文件
sonar.sources=.
#sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
# 设置编码
sonar.sourceEncoding=UTF-8
总结:
其实CI/CD持续集成持续部署就是通过勾子(webhook)触发器监测gitlab上面的代码提交,如果提交了新代码就将代码同步到genkins的工作区,然后对工作区的项目重新编译打包并通过脚本部署后启动。