1. 什么是持续集成

持续集成(Continuous integration,简称CI)指的是频繁将代码集成到主干。它的目的,就是让产品可以快速迭代,同时保持高质量。核心措施,代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,就不能集成

持续集成的设计,从提交到生产,整个过程有以下步骤:

  • 提交

  • 测试(第一次)

    代码仓库对commit操作配置钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试

  • 构建

  • 测试(第二次)

  • 部署

  • 回滚

jenkins就是一个配置简单和使用方便的持续集成服务器(中文官网:https://www.jenkins.io/zh)

(1)持续集成流程说明



首先,开发人员进行代码提交,提交到git仓库;然后jenkins作为持续集成工具,将仓库代码集成到服务器,再配合JDK、Maven等软件完成代码编译、测试和打包;最后jenkins将生成的jar或war包分发到测试服务器或生产服务器,测试人员或用户就可以访问应用。

2.gitLab使用

2.1gitlab安装

1、安装相关依赖

yum -y install policycoreutils openssh-server openssh-clients postfix

2、启动ssh服务和设置为开机启动

systemctl enable sshd && sudo systemctl start sshd

3、设置postfix开机自启,并启动,postfix支持gitlab发信功能

systemctl enable postfix && systemctl start postfix

4、开放ssh以及http服务,然后重新加载防火墙

firewall-cmd --add-service=ssh --permanent

firewall-cmd --add-service=http --permanent

firewall-cmd --reload

如果关闭防火墙不需要以上设置

5、下载gitlab包,并安装

在线下载安装包

安装:

rpm -i gitlab-ce-12.4.2-ce.el6.x86_64.rpm

6、修改gitlab配置

vi /etc/gitlab/gitlab.rb

修改gitlab访问地址和端口,默认为80,这里改为了82

external_url'http://192.168.66.100:82'

nginx['listen_port']= 82

7、重载配置及启动gitlab

gitlab-ctl reconfigure

gitlab-ctl restart

8、把端口添加到防火墙

firewall-cmd --zone=pubilc --add-port=82/tcp --permanent

firewall-cmd --reload

启动成功后,访问http://192.168.66.100:82

3.JenKins的使用

3.1 jenkins安装

(1)安装jdk

yum install java-1.8.0-openjdk* -y

安装目录为/usr/lib/jvm

(2)获取jenkins安装包

下载地址

(3)找到centos下载里面的rpm文件

rpm -ivh jenkins-2.190.3-1.1.noarch.rmp

(4)修改jenkins配置

vi /etc/sysconfig/jenkins

修改内容如下

JENKINS_USER="root"

JENKINS_PORT="8888"

(5)启动jenkins

systemctl start jenkins

(6)打开浏览器访问

http://192.168.66.101:8888

注意:如果开启防火墙,需要再防火墙添加端口

(7)跳过插件安装

jenkins连接默认官网下载,速度很慢,跳过插件安装



3.2jenkins安装插件

(1)修改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

提交后,在浏览器输入:http://192.168.66.101:8888/restart 重启jenkins

下载汉化插件

3.3 Jenkins用户权限管理

我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权限



(1)开启全局安全配置



授权策略切换为"Role-Based Strategy",保存



(2)创建角色

在系统管理页面进入 Manage and Assign Roles



点击"Manage Roles"

  • Global roles(全局角色):管理员等高级用户可以创建基于全局的角色 - - Project roles(项目角色):针对某个或者某些项目的角色
  • Slave roles(奴隶角色):节点相关的权限

    我们添加以下三个角色:

baseRole:该角色为全局角色。这个角色需要绑定Overall下面的Read权限,是为了给所有用户绑定最基本的Jenkins访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission

role1:该角色为项目角色。使用正则表达式绑定"itcast.",意思是只能操作itcast开头的项目。

role2:该角色也为项目角色。绑定"itheima.
",意思是只能操作itheima开头的项目。



保存

(3)创建用户

在系统管理页面进入 Manage Users



分别创建两个用户:jack和eric

3.4给用户分配角色

系统管理页面进入Manage and Assign Roles,点击Assign Roles

绑定规则如下:

  • eric用户分别绑定baseRole和role1角色
  • jack用户分别绑定baseRole和role2角色

3.5 创建项目测试权限

以itcast管理员账户创建两个项目,分别为itcast01和itheima01



结果为:

eric用户登录,只能看到itcast01项目

jack用户登录,只能看到itheima01项目

3.6 Jenkins凭证管理

凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。







Username with password:用户名和密码

SSH Username with private key: 使用SSH用户和密钥

Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。

Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token

Certificate:通过上传证书文件的方式

3.7 安装git插件和git工具

(1)为了让jenkins支持从gitlab拉取代码,需要安装git插件和在centos7上安装git工具



centos上安装git工具

yum install git -y

查看版本

git --version

(2)jenkins添加git地址

(2.1)创建凭证

Jenkins->凭证->系统->全局凭证->添加凭证



选择"Username with password",输入Gitlab的用户名和密码,点击"确定"

(2.2)测试凭证是否可用

在gitlab中找到"源码管理"->“Git”,在Repository URL复制Gitlab中的项目URL

然后再jenkins中创建一个FreeStyle项目:新建Item->FreeStyle Project->确定





保存配置后,点击构建”Build Now“ 开始构建项目

查看/var/lib/jenkins/workspace/目录,发现已经从Gitlab成功拉取了代码到Jenkins中。

3.8 maven安装和配置

在jenkins集成服务器上,需要安装maven来编译和打包项目

(1)安装

先上传maven软件到192.168.66.101

tar -vxzf apache-maven-3.6.2-bin.tar.gz

mkdir -p /opt/maven

mv apache-maven-3.6.2/* /opt/maven

(2)配置环境变量

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

  • 查看maven版本

    mvn -v

  • 创建本地仓库目录

    mkdir /root/repo

  • 修改maven配置文件

    vi /opt/maven/conf/settings.xml

    修改为/root/repo

    修改为

点击查看代码
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror> <mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

(3)jenkins配置jdk和maven

Jenkins->Global Tool Configuration->JDK->新增JDK,配置如下:

可以参考(https://www.yuque.com/spiderman-dquv0/kgifc9/zk83s7#pRd9l)



Jenkins->Global Tool Configuration->Maven->新增Maven,配置如下:



(4)添加Jenkins全局变量

Manage Jenkins->Configure System->Global Properties ,添加三个全局变量

JAVA_HOME、M2_HOME、PATH+EXTRA



(5)测试maven是否成功

使用之前的gitlab密码测试项目,修改配置



构建->增加构建步骤->Execute Shell



再次构建,如果可以把项目打成包,代表maven环境配置成功啦!

3.9 tomcat安装和配置

(1)安装

把Tomcat压缩包上传到192.168.66.102服务器(如果springboot项目不用安装tomcat)

yum install java-1.8.0-openjdk* -y 安装JDK(已完成)
tar -xzf apache-tomcat-8.5.47.tar.gz 解压
mkdir -p /opt/tomcat 创建目录
mv /root/apache-tomcat-8.5.47/* /opt/tomcat 移动文件
/opt/tomcat/bin/startup.sh 启动tomcat

注意:服务器已经关闭了防火墙,所以可以直接访问Tomcat啦

地址为:http://192.168.66.102/8080

(2)配置Tomcat用户角色权限

默认情况下Tomcat是没有配置用户角色权限的





但是,后续Jenkins部署项目到Tomcat服务器,需要用到Tomcat的用户,所以修改tomcat以下配置,添加用户及权限

vi /opt/tomcat/conf/tomcat-users.xml

内容如下

<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager- script,tomcat,admin-gui,admin-script"/>
</tomcat-users>

用户和密码都是:tomcat

注意:为了能够刚才配置的用户登录到Tomcat,还需要修改以下配置

vi /opt/tomcat/webapps/manager/META-INF/context.xml

注释掉如下内容

<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

(3)重启测试

/opt/tomcat/bin/shutdown.sh 停止
/opt/tomcat/bin/startup.sh 启动

访问: http://192.168.66.102:8080/manager/html ,输入tomcat和tomcat,看到以下页面代表成功啦

4.Jenkins构建Maven项目

(1)jenkins构建的项目类型介绍

主要有三种:

  • 自由风格软件项目(freestyle project)
  • maven项目
  • 流水线项目

    推荐使用流水线,灵活度高

4.1 自由风格项目构建

集成过程:拉取代码->编译->打包->部署

(1)创建项目



(2)配置源码管理,在gitlab拉取代码



(3)构建->添加构建步骤->Executor Shell

echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"

(4)部署

把项目部署到远程的Tomcat里面

安装tomcat插件,Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现



添加Tomcat用户凭证



添加构建后操作







点击"Build Now",开始构建过程

4.2 maven项目构建

(1)安装Maven Integration插件



(2)创建Maven项目



(3)配置项目

拉取代码和远程部署的过程和自由风格项目一样,只是构建部分不同

4.3 pipeline流水线

pipeline就是将原来独立运行于单个或多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化工作

  • 如何创建pipeline支持两种语法Declarative(声明式)和Scripted PipeLine(脚本式)
  • 也有两种创建方法:直接在jenkins的web Ui页面中输入脚本,也可以通过创建一个jenkinsfile脚本文件放入项目源码库中(一般选中放在源码中)

    (1)安装pipeline插件

    Manage Jenkins->Manage Plugins->可选插件



    安装插件后,创建项目的时候多了“流水线”类型



    流水线->选择HelloWorld模板



    生成的内容:
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo 'Hello World'
}
}
}
}

stages:代表整个流水线的所有执行阶段。通常stages只有1个,里面包含多个stage

stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段。

steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内容。

编写一个简单的脚本式Pipeline

node {
def mvnHome
stage('拉取代码') {
// for display purposes
echo '拉取代码'
}
stage('编译构建') {
echo '编译构建'
}
stage('项目部署') {
echo '项目部署'
}
}

构建结果和声明式一样!

pipeline {
agent any stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false, extensions: [],
submoduleCfg: [], userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url: 'git@192.168.66.100:itheima_group/web_demo.git']]])
}
}
}
}

编译打包

pipeline {
agent any stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false, extensions: [],
submoduleCfg: [], userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url: 'git@192.168.66.100:itheima_group/web_demo.git']]])
}
}
stage('编译构建') {
steps {
sh label: '', script: 'mvn clean package'
}
}
}
}

部署

pipeline {
agent any stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false, extensions: [],
submoduleCfg: [], userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url: 'git@192.168.66.100:itheima_group/web_demo.git']]])
}
}
stage('编译构建') {
steps {
sh label: '', script: 'mvn clean package'
}
}
stage('项目部署') {
steps {
deploy adapters: [tomcat8(credentialsId: 'afc43e5e-4a4e-4de6-984f- b1d5a254e434', path: '', url: 'http://192.168.66.102:8080')], contextPath: null, war: 'target/*.war'
}
}
}
}

刚才我们都是直接在Jenkins的UI界面编写Pipeline代码,这样不方便脚本维护,建议把Pipeline脚本放在项目中(一起进行版本控制)

  • 在项目根目录建立Jenkinsfile文件,把内容复制到该文件中



    把Jenkinsfile上传到Gitlab
  • 在项目中引用该文件

4.4 jenkins项目构建细节

jenkins内置4中构建触发器

  • 触发远程构建
  • 其他工程构建后触发(Build after other projects are build)
  • 定时构建(build periodically)
  • 轮询SCM(poll SCM)
  • 当gitlab改变时触发

    (1)触发远程构建



    http://192.168.66.101:8888/job/web_demo_pipeline/build?token=6666

    (2)其他工程构建后触发

    创建pre_job流水线工程



    (3)定时构建



    (4)轮询SCM

    轮询SCM,是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。



    (5)Git hook自动触发构建(*)

    轮询SCM可以实现Gitlab代码更新,项目自动构建,但是该方案的性能不佳

    利用Gitlab的webhook实现代码push到仓库,立即触发项目自动构建。

    区别:



    需要安装两个插件:

    Gitlab Hook和GitLab





    Jenkins设置自动构建



    等会需要把生成的webhook URL配置到Gitlab中

    (5.1)Gitlab配置webhook

    开启webhook功能

    使用root账户登录到后台,点击Admin Area -> Settings -> Network

    勾选"Allow requests to the local network from web hooks and services"



    在项目添加webhook

    点击项目->Settings->Integrations



    注意:以下设置必须完成,否则会报错!

    Manage Jenkins->Configure System

4.5jenkins参数化构建

有时在项目构建的过程中,我们需要根据用户的输入动态传入一些参数,从而影响整个构建结果,这时我们可以使用参数化构建。

Jenkins支持非常丰富的参数类型



项目创建分支,并推送到Gitlab上,新建分支:v1,代码稍微改动下,然后提交到gitlab上。

这时看到gitlab上有一个两个分支:master和v1



在Jenkins添加字符串类型参数





改动pipeline流水线代码



点击Build with Parameters



入分支名称,构建即可!构建完成后访问Tomcat查看结果

5 配置邮箱服务器发送构建结果

安装Email Extension插件



(1)Jenkins设置邮箱相关参数

Manage Jenkins->Configure System



设置邮件参数



设置Jenkins默认邮箱信息



(2)准备邮件内容

在项目根目录编写email.html,并把文件推送到Gitlab,内容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>
${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志
</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans- serif">
<tr>
<td>
(本邮件是程序自动下发的,请勿回复!)
</td>
</tr>
<tr>
<td>
<h2>
<font color="#0000FF">
构建结果 - ${BUILD_STATUS}
</font>
</h2>
</td>
</tr>
<tr>
<td>
<br />
<b>
<font color="#0B610B">
构建信息
</font>
</b>
<hr size="2" width="100%" align="center" />
</td>
</tr>
<tr>
<td>
<ul>
<li>
项目名称&nbsp;:&nbsp;${PROJECT_NAME}
</li>
<li>
构建编号&nbsp;:&nbsp;第${BUILD_NUMBER}次构建
</li>
<li>
触发原因:&nbsp;${CAUSE}
</li>
<li>
构建日志:&nbsp;
<a href="${BUILD_URL}console">
${BUILD_URL}console
</a>
</li>
<li>
构建&nbsp;&nbsp;Url&nbsp;:&nbsp;
<a href="${BUILD_URL}">
${BUILD_URL}
</a>
</li>
<li>
工作目录&nbsp;:&nbsp;
<a href="${PROJECT_URL}ws">
${PROJECT_URL}ws
</a>
</li>
<li>
项目&nbsp;&nbsp;Url&nbsp;:&nbsp;
<a href="${PROJECT_URL}">
${PROJECT_URL}
</a>
</li>
</ul>
</td>
</tr>
<tr>
<td>
<b>
<font color="#0B610B">
Changes Since Last Successful Build:
</font>
</b>
<hr size="2" width="100%" align="center" />
</td>
</tr>
<tr>
<td>
<ul>
<li>
历史变更记录 :
<a href="${PROJECT_URL}changes">
${PROJECT_URL}changes
</a>
</li>
</ul>
${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:
<br />
%c
<br />
",showPaths=true,changesFormat="
<pre>
[%a]
<br />
%m
</pre>
",pathFormat="&nbsp;&nbsp;&nbsp;&nbsp;%p"}
</td>
</tr>
<tr>
<td>
<b>
Failed Test Results
</b>
<hr size="2" width="100%" align="center" />
</td>
</tr>
<tr>
<td>
<prestyle="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
$FAILED_TESTS
</pre>
<br />
</td>
</tr>
<tr>
<td>
<b>
<font color="#0B610B">
构建日志 (最后 100行):
</font>
</b>
<hr size="2" width="100%" align="center" />
</td>
</tr>
<tr>
<td>
<textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">
${BUILD_LOG, maxLines=100}
</textarea>
</td>
</tr>
</table>
</body> </html>

编写Jenkinsfile添加构建后发送邮件

pipeline {
agent any stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url: 'git@192.168.66.100:itheima_group/web_demo.git']]])
}
}
stage('编译构建') {
steps {
sh label: '',
script: 'mvn clean package'
}
}
stage('项目部署') {
steps {
deploy adapters: [tomcat8(credentialsId: 'afc43e5e-4a4e-4de6-984f- b1d5a254e434', path: '', url: 'http://192.168.66.102:8080')],
contextPath: null,
war: 'target/*.war'
}
}
}
post {
always {
emailext(subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!', body: '${FILE,path="email.html"}', to: 'xxx@qq.com')
}
}
}

测试



备注:

邮件相关全局参数参考列表

系统设置->Extended E-mail Notification->Content Token Reference,点击旁边的?号

6 Jenkins+SonarQube代码审查

(1)安装SonarQube

SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误

环境要求



安装MySQL(已完成),安装SonarQube,在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端口被占用,需要更改。

启动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



默认账户:admin/admin

创建token

token要记下来后面要使用

bb8b6c53d9d921e101343cef0395243e6c1dc8a3

(2)实现代码审查



SonarQube Scanner插件



添加SonarQube凭证





Jenkins进行SonarQube配置

Manage Jenkins->Configure System->SonarQube servers



Manage Jenkins->Global Tool Configuration



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



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

添加构建步骤:

# must be unique in a given SonarQube instance
sonar.projectKey=web_demo
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=web_demo
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

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

1))项目根目录下,创建sonar-project.properties文件

# must be unique in a given SonarQube instance
sonar.projectKey=web_demo
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=web_demo
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

2)修改Jenkinsfile,加入SonarQube代码审查阶段

pipeline {
agent any stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url: 'git@192.168.66.100:itheima_group/web_demo.git']]])
}
}
stage('编译构建') {
steps {
sh label: '',
script: 'mvn clean package'
}
}
stage('SonarQube代码审查') {
steps {
script {
scannerHome = tool 'sonarqube-scanner'
}
withSonarQubeEnv('sonarqube6.7.4') {
sh "${scannerHome}/bin/sonar-scanner"
}
}
}
stage('项目部署') {
steps {
deploy adapters: [tomcat8(credentialsId: 'afc43e5e-4a4e-4de6-984f- b1d5a254e434', path: '', url: 'http://192.168.66.102:8080')],
contextPath: null,
war: 'target/*.war'
}
}
}
post {
always {
emailext(subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!', body: '${FILE,path="email.html"}', to: '1014671449@qq.com')
}
}
}

到SonarQube的UI界面查看审查结果

Jenkins持续集成入门到精通(入门篇)的更多相关文章

  1. 【Jenkins持续集成(一)】SonarQube 入门安装使用教程

    一.前言 持续集成管理平台不只是CI服务器,是一系列软件开发管理工具的组合. 源码版本管理:svn.git 项目构建工具:Maven.Ant 代码质量管理:Sonar(Checkstyle.PMD.F ...

  2. Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 【持续集成与交付快速入门必备】

    Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 [持续集成与交付快速入门必备]

  3. Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步

    Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步 一.概述     PV操作是对信号量进行的操作.     进程同步是指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消 ...

  4. .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统

    .NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言     相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...

  5. SaltStack 入门到精通第二篇:Salt-master配置文件详解

    SaltStack 入门到精通第二篇:Salt-master配置文件详解     转自(coocla):http://blog.coocla.org/301.html 原本想要重新翻译salt-mas ...

  6. SaltStack入门到精通第一篇:安装SaltStack

    SaltStack入门到精通第一篇:安装SaltStack 作者:纳米龙  发布日期:2014-06-09 17:50:36   实际环境的设定: 系统环境: centos6 或centos5 实验机 ...

  7. Promise入门到精通(初级篇)-附代码详细讲解

    Promise入门到精通(初级篇)-附代码详细讲解 ​     Promise,中文翻译为承诺,约定,契约,从字面意思来看,这应该是类似某种协议,规定了什么事件发生的条件和触发方法. ​     Pr ...

  8. Jmeter(三十九) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 上篇(详解教程)

    ------------------------------------------------------------------- 转载自:北京-宏哥 https://www.cnblogs.co ...

  9. Jenkins持续集成(上)-Windows下安装Jenkins

    环境:Windows 2008 R2.Jenkins2.235.1: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成SLB.配置管理.Jenkins)> ...

  10. Jenkins持续集成学习-搭建jenkins问题汇总

    目录 Jenkins持续集成学习5-搭建jenkins问题汇总 目录 前言 问题列表 nuget还原包问题 编译问题 SVN更新问题 参考文档 Jenkins持续集成学习5-搭建jenkins问题汇总 ...

随机推荐

  1. 【HarmonyOS】元服务和APP的相互跳转、相互成就

    ​ [关键字] 卡片.跳转.加桌 [背景介绍] 随着鸿蒙生态的发展,各种类型的应用都已经可以在Harmony OS上无差异的运行,面对鸿蒙新兴元服务的兴起,各大厂家可能都在考虑一个问题:如果已经有AP ...

  2. 如何解决PyCharm中运行不了python代码的问题

    一.问题分析 一般是新手小白才会出现这个问题.刚入门python或者Web自动化测试的集美们很多都会选择使用PyCharm来运行python,但是下载安装完PyCharm后,新建了一个python项目 ...

  3. Vue——登录小案例、scoped、ref属性、props其他、混入mixin、插件、Element-ui

    解析Vue项目 # 1 为什么浏览器中访问某个地址,会显示某个页面组件 根组件:APP.vue 必须是 <template> <div id="app"> ...

  4. Elasticsearch 6.x 配置search-guard 插件

    前言   es之前版本一直无用户验证功能,不过官方有提供一x-pack,但是问题是付费.在es的6.3.2版本中,已经集成了x-pack,虽然es团队已经对x-pack开源,但是在该版本中如果需要使用 ...

  5. JAVA SE基础《一》----JAVA入门

    初识Java 1.Java背景知识 java是美国sun公司(Stanford University Network)在1995年推出的一门计算机高级编程语言. Java早期称为Oak(橡树),后期改 ...

  6. 如何刷新 DNS 缓存 (macOS, Linux, Windows)

    如何刷新 DNS 缓存 (macOS, Linux, Windows) Unix Linux Windows 如何刷新 DNS 缓存 (macOS, FreeBSD, RHEL, CentOS, De ...

  7. sharding-jdbc分库连接数优化

    一.背景: 配运平台组的快递订单履约中心(cp-eofc)及物流平台履约中心(jdl-uep-ofc)系统都使用了ShardingSphere生态的sharding-jdbc作为分库分表中间件, 整个 ...

  8. 华为P9黑屏的解决方案-更换屏幕

    解决办法(系统软件) 1.回退系统版本,b198或者b139固件. 2.升级版本,到最新版本.新版本使用时并没有发现这个问题. 解决方法(系统设置) 点开设置-电池-选择进入超级省电模式,然后退出超级 ...

  9. 2023年icpc大学生程序设计竞赛-crf

    第一次在除郑轻以外的校外的地方比赛,也是第一次出市比赛,赛程也比较长.20号出发的时候遇到一些意外,不过无伤大雅,第一天热身赛平平无奇,晚上的时候补了一下前年icpc的题,一个多小时做了五题,很是自信 ...

  10. Blazor中CSS隔离无法用在子组件内部

    Blazor的CSS隔离是个很好的东西,如图,只需添加一个与Razor组件同名的CSS文件,这个文件中的CSS样式只会在同名的Razor组件中使用. 原理是通过在dom元素添加一个代表标识符的属性 在 ...