Jenkins安装和持续集成环境配置
持续集成流程说明
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f1IjP7GQ-1651910098010)(.\assets\image-20220507093313997.png)]
1)首先,开发人员每天进行代码提交,提交到Git仓库
2)然后,Jenkins作为持续集成工具,使用Git工具到Git仓库拉取代码到集成服务器,再配合JDK,
Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新
再执行一次整个流程。
3)最后,Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问
应用。
服务器列表
本课程虚拟机统一采用CentOS7。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b5nGE79I-1651910098011)(.\assets\image-20220507093705659.png)]
Gitlab代码托管服务器安装
Gitlab安装
- 安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix
- 启动ssh服务&设置为开机启动
systemctl enable sshd && sudo systemctl start sshd
- 设置postfifix开机自启,并启动,postfifix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix
- 开放ssh以及http服务,然后重新加载防火墙列表
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
如果关闭防火墙就不需要做以上配置
- 下载gitlab包,并且安装
在线下载安装包:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x
86_64.rpm
安装:
rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
- 修改gitlab配置
vim /etc/gitlab/gitlab.rb
修改gitlab访问地址和端口,默认为80,我们改为82
external_url 'http://192.168.66.100:82'
nginx['listen_port'] = 82
使用sed
sed -i 's/external_url 'http://192.168.66.100:82'/external_url 'http://192.168.66.100:82'/g' gitlab.rb.tmp
使用awk
// 把a.txt中的前2行,生成到b.txt中
awk 'NR<=2{print > "b.txt"}' a.txt
// 在文本文档的第2行插入一条内容
sed '2i\this is new line' -i ./a.txt
// 在尾部追加一行
echo 'this is end'>> ./a.txt
- 重载配置及启动gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
- 把端口添加到防火墙
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
启动成功后,看到以下修改管理员root密码的页面,修改密码后,然后登录即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ffh06QF-1651910098012)(.\assets\image-20220507095653467.png)]
Gitlab添加组、创建用户、创建项目
1)创建组
使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,
不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的
管理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJCaHbyW-1651910098013)(.\assets\image-20220507100556764.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-93q7VZ2u-1651910098014)(.\assets\image-20220507100639555.png)]
2)创建用户
创建用户的时候,可以选择Regular或Admin类型。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T0IxeD0f-1651910098016)(.\assets\image-20220507100717654.png)]
创建完用户后,立即修改密码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9snD2JX-1651910098018)(.\assets\image-20220507100745573.png)]
3)将用户添加到组中
选择某个用户组,进行Members管理组的成员
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6v1MpY6v-1651910098019)(.\assets\image-20220507100820541.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dMZ44S3X-1651910098020)(.\assets\image-20220507100844575.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uflNVB17-1651910098021)(.\assets\image-20220507100912405.png)]
Gitlab用户在组里面有5种不同权限:
Guest:可以创建issue、发表评论,不能读写版本库 Reporter:可以克隆代码,不能提交,QA、PM
可以赋予这个权限
Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个
权限 Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限
4)在用户组中创建项目
以刚才创建的新用户身份登录到Gitlab,然后在用户组中创建新的项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lfwgQOi3-1651910098023)(.\assets\image-20220507101034986.png)]
源码上传到Gitlab仓库
下面来到IDEA开发工具,我们已经准备好一个简单的Web应用准备到集成部署。
我们要把源码上传到Gitlab的项目仓库中。
1)项目结构说明
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SSOSsdoq-1651910098024)(.\assets\image-20220507101135781.png)]
2)开启版本控制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rz8MpAaT-1651910098025)(.\assets\image-20220507101220193.png)]
2)提交代码到本地仓库
先Add到缓存区
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uGppbS7y-1651910098026)(.\assets\image-20220507101612045.png)]
再Commit到本地仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k0rpj1Xq-1651910098027)(.\assets\image-20220507105315039.png)]
Jenkins持续集成环境
Jenkins安装
1)安装JDK
Jenkins需要依赖JDK,所以先安装JDK1.8
yum install java-1.8.0-openjdk* -y
安装目录为:/usr/lib/jvm
2)获取jenkins安装包
下载页面:https://jenkins.io/zh/download/
安装文件:jenkins-2.190.3-1.1.noarch.rpm
3)把安装包上传到192.168.66.101服务器,进行安装
rpm -ivh jenkins-2.190.3-1.1.noarch.rpm
4)修改Jenkins配置
vi /etc/syscofifig/jenkins
修改内容如下:
JENKINS_USER="root"
JENKINS_PORT="8888"
5)启动Jenkins
systemctl start jenkins
6)打开浏览器访问
http://192.168.66.101:8888
注意:本服务器把防火墙关闭了,如果开启防火墙,需要在防火墙添加端口
7)获取并输入admin账户密码
cat /var/lib/jenkins/secrets/initialAdminPassword
8)跳过插件安装
因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-58171d65-1651910098028)(.\assets\image-20220507133504766.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qjpUiihs-1651910098031)(.\assets\image-20220507133526279.png)]
Jenkins插件管理
修改Jenkins插件下载地址
Jenkins->Manage Jenkins->Manage Plugins,点击Available
这样做是为了把Jenkins官方的插件列表下载到本地,接着修改地址文件,替换为国内插件地址
cd /var/lib/jenkins/updates
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
最后,Manage Plugins点击Advanced,把Update Site改为国内插件下载地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yyBVlVs7-1651910098033)(.\assets\image-20220507134342667.png)]
Sumbit后,在浏览器输入:
http://192.168.66.101:8888/restart ,重启Jenkins。
中文汉化插件
Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索"Chinese"
用户权限管理插件
我们可以利用 Role-based Authorization Strategy 插件来管理Jenkins用户权限
-
安装Role-based Authorization Strategy插件
-
开启权限全局安全配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K3oC1CQZ-1651910098034)(.\assets\image-20220507134819894.png)]
授权策略切换为"Role-Based Strategy",保存
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p6qTq6AI-1651910098035)(.\assets\image-20220507134859504.png)]
- 创建角色
在系统管理页面进入 Manage and Assign Roles
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4HsQ9w0Z-1651910098035)(.\assets\image-20220507134946667.png)]
点击"Manage Roles"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVk8EgtC-1651910098036)(.\assets\image-20220507135019623.png)]
Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
Project roles(项目角色):针对某个或者某些项目的角色
Slave roles(奴隶角色):节点相关的权限
- 创建用户
在系统管理页面进入 Manage Users
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-scwF4uok-1651910098036)(.\assets\image-20220507135209394.png)]
- 给用户分配角色
系统管理页面进入Manage and Assign Roles,点击Assign Roles进行用户角色分配。
凭证管理插件
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。
- 安装Credentials Binding插件
要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件
可以添加的凭证有5种:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9T1yyjSR-1651910098037)(.\assets\image-20220507135458238.png)]
-
Username with password:用户名和密码
-
SSH Username with private key: 使用SSH用户和密钥
-
Secret fifile:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret fifile就会被删除。
-
Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
-
Certifificate:通过上传证书文件的方式
常用的凭证类型有:Username with password(用户密码)和SSH Username with private key(SSH密钥)
安装Git插件和Git工具
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CHVGVNDp-1651910098038)(.\assets\image-20220507135722763.png)]
- CentOS7上安装Git工具:
yum install git -y // 安装
git --version // 安装后查看版本
- 用户密码类型
1)创建凭证
Jenkins->凭证->系统->全局凭证->添加凭证
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TycSPWsq-1651910098038)(.\assets\image-20220507135857607.png)]
选择"Username with password",输入Gitlab的用户名和密码,点击"确定"。
2)测试凭证是否可用
创建一个FreeStyle项目:新建Item->FreeStyle Project->确定
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vCtUyMBC-1651910098039)(.\assets\image-20220507135933522.png)]
找到"源码管理"->“Git”,在Repository URL复制Gitlab中的项目URL
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8WC6ahqq-1651910098039)(.\assets\image-20220507140025129.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gXninQSp-1651910098040)(.\assets\image-20220507140044202.png)]
点击构建”Build Now“
查看**/var/lib/jenkins/workspace/**目录,发现已经从Gitlab成功拉取了代码到Jenkins中。
- SSH密钥类型
SSH免密登录示意图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bQGtaZ8G-1651910098040)(.\assets\image-20220507140428066.png)]
1)使用root用户生成公钥和私钥
ssh-keygen -t rsa
id_rsa:私钥文件
id_rsa.pub:公钥文件
2)把生成的公钥放在Gitlab中
以root账户登录->点击头像->Settings->SSH Keys
复制刚才id_rsa.pub文件的内容到这里,点击"Add Key"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ULEbEWfN-1651910098041)(.\assets\image-20220507140556443.png)]
3)在Jenkins中添加凭证,配置私钥
在Jenkins添加一个新的凭证,类型为"SSH Username with private key",把刚才生成私有文件内容复制过来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KBDPFyxj-1651910098042)(.\assets\image-20220507140739701.png)]
4)测试凭证是否可用
新建"test02"项目->源码管理->Git,这次要使用Gitlab的SSH连接,并且选择SSH凭证
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VF6SQuyf-1651910098042)(.\assets\image-20220507140843226.png)]
点击构建”Build Now“
Maven安装和配置
在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。
- 安装Maven
先上传Maven软件到192.168.66.101
tar -xzf apache-maven-3.6.2-bin.tar.gz // 解压
mkdir -p /opt/maven // 创建目录
mv apache-maven-3.6.2/* /opt/maven // 移动文件
- 配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
source /etc/profile // 配置生效
mvn -v // 查找Maven版本
- 全局工具配置关联JDK和Maven
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bUfS9CLh-1651910098043)(.\assets\image-20220507141209007.png)]
- 添加Jenkins全局变量
Manage Jenkins->Confifigure System->Global Properties ,添加三个全局变量
JAVA_HOME、M2_HOME、PATH+EXTRA
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ujOfi2a-1651910098043)(.\assets\image-20220507141358379.png)]
- 修改Maven的settings.xml
mkdir /root/repo // 创建本地仓库目录
vi /opt/maven/conf/settings.xml
本地仓库改为:/root/repo/
添加阿里云私服地址:
alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central
- 测试Maven是否配置成功
使用之前的gitlab密码测试项目,修改配置
构建->增加构建步骤->Execute Shell
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5EXhZpLm-1651910098044)(.\assets\image-20220507141600885.png)]
输入
mvn clean package
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTYTNtA2-1651910098045)(.\assets\image-20220507141631031.png)]
Pipeline流水线项目构建
- 安装Pipeline插件
Manage Jenkins->Manage Plugins->可选插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b6F3kiKM-1651910098045)(.\assets\image-20220507141846064.png)]
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo 'Hello World'
}
}
}
}
stages:代表整个流水线的所有执行阶段。通常stages只有1个,里面包含多个stage
stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段。
steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内容。
编写一个简单声明式Pipeline:
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
echo '拉取代码'
}
}
stage('编译构建') {
steps {
echo '编译构建'
}
}
stage('项目部署') {
steps {
echo '项目部署'
}
}
}
}
点击构建,可以看到整个构建过程
- Scripted Pipeline脚本式Pipeline
创建项目,选择"Scripted Pipeline" 。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pskGbbfu-1651910098046)(.\assets\image-20220507142304775.png)]
node {
def mvnHome stage('Preparation') {
// for display purposes
}
stage('Build') {
}
stage('Results') {
}
}
Node:节点,一个 Node 就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境,后续讲到Jenkins的Master-Slave架构的时候用到。
Stage:阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,比如:
Build、Test、Deploy,Stage 是一个逻辑分组的概念。
Step:步骤,Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,由各类 Jenkins 插件提供,比如命令:sh ‘make’,就相当于我们平时 shell 终端中执行 make 命令一样。
- Pipeline Script from SCM
1)把Pipeline脚本放在项目中(一起进行版本控制)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-flsm5W3v-1651910098047)(.\assets\image-20220507142613003.png)]
把Jenkinsfifile上传到Gitlab
2)在项目中引用该文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gQhzOOFt-1651910098047)(.\assets\image-20220507142647266.png)]
Jenkins项目构建细节常用的构建触发器
Jenkins内置4种构建触发器:
-
触发远程构建
-
其他工程构建后触发(Build after other projects are build)
-
定时构建(Build periodically)
-
轮询SCM(Poll SCM)
触发远程构建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TOX9IgBE-1651910098048)(.\assets\image-20220507142749197.png)]
其他工程构建后触发
1)创建pre_job流水线工程
2)配置需要触发的工程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5eERenLk-1651910098049)(.\assets\image-20220507142834964.png)]
定时构建
定时字符串从左往右分别为: 分 时 日 月 周
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-owhQOUes-1651910098050)(.\assets\image-20220507142916746.png)]
轮询SCM
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qnjYtzll-1651910098050)(.\assets\image-20220507143615779.png)]
Git hook自动触发构建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mcjmphnq-1651910098051)(.\assets\image-20220507143006539.png)]
- 安装Gitlab Hook插件
Gitlab Hook和GitLab
- Gitlab配置webhook
1)开启webhook功能
使用root账户登录到后台,点击Admin Area -> Settings -> Network
勾选"Allow requests to the local network from web hooks and services"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dEaFJ1Ra-1651910098051)(.\assets\image-20220507143120177.png)]
2)在项目添加webhook
点击项目->Settings->Integrations
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FyAp7TaC-1651910098052)(.\assets\image-20220507143150205.png)]
注意:以下设置必须完成,否则会报错!
Manage Jenkins->Confifigure System
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zNcpqj1O-1651910098052)(.\assets\image-20220507143227292.png)]
Jenkins的参数化构建
有时在项目构建的过程中,我们需要根据用户的输入动态传入一些参数,从而影响整个构建结果,这时我们可以使用参数化构建。
Jenkins支持非常丰富的参数类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAU5UR8L-1651910098053)(.\assets\image-20220507143936651.png)]
接下来演示通过输入gitlab项目的分支名称来部署不同分支项目。
新建分支:dev,代码稍微改动下,然后提交到gitlab上。
这时看到gitlab上有一个两个分支:master和dev
在Jenkins添加字符串类型参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ji42en6A-1651910098054)(.\assets\image-20220507144037441.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q51cfY5A-1651910098054)(.\assets\image-20220507144111030.png)]
改动pipeline流水线代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7YymWMol-1651910098055)(.\assets\image-20220507144136975.png)]
点击Build with Parameters
输入分支名称,构建即可!
SonarQube代码审查
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z2KFZFPM-1651910098056)(.\assets\image-20220507144332991.png)]
mysql:5.7安装
wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum localinstall mysql57-community-release-el7-11.noarch.rpm
yum repolist enabled | grep "mysql.*-community.*"
vim /etc/yum.repos.d/mysql-community.repo
将[mysql57-community]下的enabled=1改为enabled=0
yum install mysql-community-server
systemctl enable mysqld && systemctl start mysqld && systemctl daemon-reload
mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改
grep 'temporary password' /var/log/mysqld.log
vim /etc/my.cnf
validate_password_policy=0
systemctl restart mysqld
show variables like '%character%';
mysql –u root –p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql123';
或者
set password for 'root'@'localhost'= password('mysql123');
开启mysql的远程登录
grant all privileges on *.* to 'root' @'%' identified by 'mysql123';
flush privileges;
设置默认编码为utf8
vim /etc/my.cnf
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
systemctl restart mysqld
show variables like '%character%';
参考:https://jingyan.baidu.com/article/4d58d5417ca1fc9dd5e9c05f.html
在MySQL创建sonar数据库
下载sonar压缩包:
https://www.sonarqube.org/downloads/
解压sonar,并设置权限
yum install unzip
unzip sonarqube-6.7.4.zip 解压
mkdir /opt/sonar 创建目录
mv sonarqube-6.7.4/* /opt/sonar 移动文件
useradd sonar 创建sonar用户,必须sonar用于启动,否则报错
chown -R sonar. /opt/sonar 更改sonar目录及文件权限
修改sonar配置文件
vi /opt/sonarqube-6.7.4/conf/sonar.properties
内容如下:
sonar.jdbc.username=root sonar.jdbc.password=Root@123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?
useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=
maxPerformance&useSSL=false
注意:sonar默认监听9000端口,如果9000端口被占用,需要更改。
sonarqube启动时elasticsearch报错: **max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]**处理
说明最新版本sonarqube需要内存大小不低于262144,那首先要保证运行环境的内存大小不低于3G,例如我采用的VMware直接给加大到3G以上
然后在进入虚机环境
vi /etc/sysctl.conf
vm.max_map_count=262144
sysctl -p
vm.max_map_count = 262144
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
登录后使用
ulimit -S -n
ulimit -H -n
启动sonar
cd /opt/sonarqube-6.7.4
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 查看日志
访问sonar
http://192.168.66.101:9000
创建token
token要记下来后面要使用
实现代码审查
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SFJU464V-1651910098057)(.\assets\image-20220507145611736.png)]
- 安装SonarQube Scanner插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8WfqrcMI-1651910098057)(.\assets\image-20220507145648522.png)]
- 添加SonarQube凭证
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ajZeX5nf-1651910098058)(.\assets\image-20220507145721198.png)]
- Jenkins进行SonarQube配置
Manage Jenkins->Confifigure System->SonarQube servers
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZTaejk5-1651910098059)(.\assets\image-20220507145813455.png)]
- 关闭审查结果上传到SCM功能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z1pdblRD-1651910098060)(.\assets\image-20220507145855690.png)]
sonar 汉化问题
默认的sonar 满屏英文,也不好理解,可以利用sonar 的插件体系,直接汉化
登录sonar->选择Administration中->选择MarketPlace->搜索Chinese Pack->点击安装,安装完成后,按照提示重启即可
Harbor安装及使用
Harbor需要安装在192.168.66.102上面
1)先安装Docker并启动Docker(已完成)
参考之前的安装过程
2)先安装docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
3)给docker-compose添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
4)查看docker-compose是否安装成功
docker-compose -version
5)下载Harbor的压缩包(版本为:v1.9.2)
https://github.com/goharbor/harbor/releases
6)上传压缩包到linux,并解压
tar -xzf harbor-offline-installer-v1.9.2.tgz
mkdir /opt/harbor
mv harbor/* /opt/harbor
cd /opt/harbor
7)修改Harbor的配置
vi harbor.yml
修改hostname和port
hostname: 192.168.66.102
port: 85
8)安装Harbor
./prepare
./install.sh
9)启动Harbor
docker-compose up -d 启动
docker-compose stop 停止
docker-compose restart 重新启动
10)访问Harbor
http://192.168.66.102:85
默认账户密码:admin/Harbor12345
创建一个新的项目 tensquare
把镜像上传到Harbor
1)给镜像打上标签
docker tag eureka:v1 192.168.66.102:85/tensquare/eureka:v1
2)把Harbor地址加入到Docker信任列表
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], "insecure-registries": ["192.168.66.102:85"]
}
重启Docker
3)登录Harbor
docker login -u 用户名 -p 密码 192.168.66.102:85
4)推送镜像
docker push 192.168.66.102:85/tensquare/eureka:v1
从Harbor下载镜像
docker login -u 用户名 -p 密码 192.168.66.102:85
docker pull 192.168.66.102:85/tensquare/eureka:v1
拉取镜像和发布应用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ryZTaWQ6-1651910098060)(.\assets\image-20220507151953767.png)]
项目代码上传到Gitlab
在IDEA操作即可,参考之前的步骤。包括后台微服务和前端web网站代码
从Gitlab拉取项目源码
1)创建Jenkinsfifile文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lofQ2DF6-1651910098061)(.\assets\image-20220507153300390.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZDfB6bHo-1651910098062)(.\assets\image-20220507153354139.png)]
2)拉取Jenkinsfifile文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xTt99fac-1651910098062)(.\assets\image-20220507153426211.png)]
提交到SonarQube代码审查
1)创建项目,并设置参数
创建tensquare_back项目,添加两个参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y5aQb9ek-1651910098063)(.\assets\image-20220507153542974.png)]
2)每个项目的根目录下添加sonar-project.properties
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VCUmv15r-1651910098064)(.\assets\image-20220507153619251.png)]
修改sonar.projectKey和sonar.projectName
3)修改Jenkinsfifile构建脚本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xyeULtGR-1651910098065)(.\assets\image-20220507153659217.png)]
使用Dockerfifile编译、生成镜像
利用dockerfifile-maven-plugin插件构建Docker镜像
1)在每个微服务项目的pom.xml加入dockerfifile-maven-plugin插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DEyNcTNl-1651910098065)(.\assets\image-20220507153759546.png)]
2)在每个微服务项目根目录下建立Dockerfifile文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GZOubGSJ-1651910098066)(.\assets\image-20220507153817884.png)]
3)修改Jenkinsfifile构建脚本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IONBMeL0-1651910098067)(.\assets\image-20220507153846679.png)]
上传到Harbor镜像仓库
1)修改Jenkinsfifile构建脚本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4HzQ8zgV-1651910098068)(.\assets\image-20220507153954712.png)]
2)使用凭证管理Harbor私服账户和密码
先在凭证建立Harbor的凭证,在生成凭证脚本代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lKJeniwI-1651910098068)(.\assets\image-20220507154043887.png)]
拉取镜像和发布应用
**安装 Publish Over SSH 插件 **
配置远程部署服务器
1)拷贝公钥到远程服务器
ssh-copy-id 192.168.66.103
2)系统配置->添加远程服务器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lvMjL5pY-1651910098069)(.\assets\image-20220507154252029.png)]
修改Jenkinsfifile构建脚本
生成远程调用模板代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0YR9lHe2-1651910098069)(.\assets\image-20220507154353138.png)]
添加一个port参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xJZsxSD-1651910098070)(.\assets\image-20220507154415888.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9AdPJeuO-1651910098070)(.\assets\image-20220507154458490.png)]
编写部署脚本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rWWcpBHb-1651910098071)(.\assets\image-20220507154538725.png)]
上传deploy.sh文件到/opt/jenkins_shell目录下,且文件至少有执行权限!
chmod +x deploy.sh // 添加执行权限
部署前端静态web网站
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAjbZzlU-1651910098071)(.\assets\image-20220507154629099.png)]
安装NodeJS插件
Jenkins配置Nginx服务器
Manage Jenkins->Global Tool Confifiguration
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S8Sy5huI-1651910098072)(.\assets\image-20220507154854341.png)]
建立Jenkinsfifile构建脚本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VVdpVHIR-1651910098072)(.\assets\image-20220507154947270.png)]
设计Jenkins集群项目的构建参数
1)安装Extended Choice Parameter插件