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. Kafka在Linux下的安装和使用

    Kafka简介 Tips:本文主要介绍在Linux系统中安装和使用Lafka的操作步骤. 安装Kafka 访问Kafka官网,下载安装包版本(https://kafka.apache.org/down ...

  2. 曲线艺术编程 coding curves 第二章 三角函数曲线(TRIG CURVES)

    第二章 三角函数曲线(TRIG CURVES) 原作:Keith Peters 原文:https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中 ...

  3. Python 列表、字典、元组的一些小技巧

    1. 字典排序 我们知道 Python 的内置 dictionary 数据类型是无序的,通过 key 来获取对应的 value.可是有时我们需要对 dictionary 中的 item 进行排序输出, ...

  4. 移动App测试概述:移动App特性

    移动App测试概述:移动App特性 移动App在现代人的日常生活中扮演着越来越重要的角色,因而对于它们的质量和稳定性的要求也越来越高.为了确保App的质量,开发商需要进行充分的测试和检验.本文将讨论移 ...

  5. K8S | 核心原理分析

    目录 一.背景 二.持续集成 三.K8S架构 1.核心组件 2.分层结构 3.核心能力 3.1 发现与负载 3.2 调度 3.3 自动伸缩 四.应用案例 1.服务部署 2.交互流程 五.参考源码 整体 ...

  6. 【C++ Primer】2.1 基本内置类型

    1. 基本内置类型 基本算数类型: 类型 含义 最小尺寸 bool 布尔类型 8bits char 字符 8bits wchar_t 宽字符 16bits char16_t Unicode字符 16b ...

  7. 生成式预训练Transformer在机器翻译中的应用与挑战

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 5. 优化与改进 6. 结论与展望 机器翻译是人工智能领域的重要应用之一,而生成式预训练Transforme ...

  8. vue2父传子,子传父

    首先看父传子 自定义一个子组件 <template> <div> 子组件: <span>{{inputName}}</span> </div> ...

  9. 对敏感操作的二次认证 —— 详解 Sa-Token 二级认证

    一.需求分析 在某些敏感操作下,我们需要对已登录的会话进行二次验证. 比如代码托管平台的仓库删除操作,尽管我们已经登录了账号,当我们点击 [删除] 按钮时,还是需要再次输入一遍密码,这么做主要为了两点 ...

  10. Centos 7安装dotnet 3.1

    # 注册 Microsoft 密钥和源 sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft- ...