jenkins实现自动部署(CD/CI)

执行流程图

jenkins 自动创建目录权限 jenkins自动部署流程_jar

一 环境服务器配置

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、安装完成后将环境变量配置好

jenkins 自动创建目录权限 jenkins自动部署流程_maven_02

3、进入maven的setting.xml文件将存储区改

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins 自动创建目录权限_03

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目录下看到算法包

jenkins 自动创建目录权限 jenkins自动部署流程_jar_04

7、配置过程可能会由于缺少 maven-metadata-local.xml 文件导致一直编译失败,该文件是坐标引导,会引导我们去哪里找包路径,如果没有这个文件maven就找不到包就会去云镜像里面找相应的包,自定义的包在云镜像肯定找不到,找不到就会报错。

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins_05

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,如下

jenkins 自动创建目录权限 jenkins自动部署流程_maven_06


jenkins 自动创建目录权限 jenkins自动部署流程_jenkins_07


jenkins 自动创建目录权限 jenkins自动部署流程_maven_08

三 配置

1、安装完成之后返回点击Mannge Jenkins进入管理页面—>点击Global Tool Configuration 进入全局配置可以查看到安装的插件

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins_09

2、然后配置插件对应的信息

jenkins 自动创建目录权限 jenkins自动部署流程_运维_10

3、配置凭据/凭证

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins 自动创建目录权限_11

4、配置凭据,与gitlab关联

jenkins 自动创建目录权限 jenkins自动部署流程_jar_12

四 新建项目

1、准备工作配置完成后新建一个项目,这里主要介绍freestyle类型的项目

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins_13

2、设置构建后保留时间

jenkins 自动创建目录权限 jenkins自动部署流程_运维_14

3、配置gitlab

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins 自动创建目录权限_15

4、构建触发器配置

jenkins 自动创建目录权限 jenkins自动部署流程_jar_16

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins_17

jenkins 自动创建目录权限 jenkins自动部署流程_maven_18

5、配置脚本

jenkins 自动创建目录权限 jenkins自动部署流程_运维_19

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数据库

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins_20

2 下载sonar压缩包 https://www.sonarqube.org/downloads/ 下载后解压到 /opt 目录下

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins 自动创建目录权限_21

3 通过命令 useradd sonar 创建sonar用户,必须用sonar启动,否则报错

通过命令chown -R sonar. /opt/sonar更改sonar目录及文件权限

jenkins 自动创建目录权限 jenkins自动部署流程_jar_22

4 修改sonar配置文件
通过命令vim /opt/sonar/conf/sonar.properties进入sonar.properties文件

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins_23

5、配置以下地方

jenkins 自动创建目录权限 jenkins自动部署流程_maven_24

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

jenkins 自动创建目录权限 jenkins自动部署流程_maven_25

默认账户:admin/admin
创建token
第一次登陆时会要求创建token,此时该token应该保存,后面jenkins整合时要用到。由于已经设置过token值,这里就没有设置token的截图效果

8、在jenkins中安装SonarQube Scanner插件

jenkins 自动创建目录权限 jenkins自动部署流程_maven_26

9、添加SonarQube凭据

1)在用户列表->root->凭据里面

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins 自动创建目录权限_27


然后点击“添加凭据”

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins_28

10、Jenkins进行SonarQube配置,Manage Jenkins->Configure System->SonarQube servers

jenkins 自动创建目录权限 jenkins自动部署流程_运维_29

11、在Manage Jenkins->Global Tool Configuration配置

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins_30

12、SonaQube关闭审查结果上传到SCM功能

jenkins 自动创建目录权限 jenkins自动部署流程_运维_31

13、在项目添加SonaQube代码审查(非流水线项目)

添加构建步骤:

jenkins 自动创建目录权限 jenkins自动部署流程_jenkins 自动创建目录权限_32

# 项目唯一标识
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的工作区,然后对工作区的项目重新编译打包并通过脚本部署后启动。