CentOS7中使用Jenkins和Sonar

一:环境准备

操作系统:Centos 7
Jdk1.8
Git2.9.5
Maven3.6.1
并配置好对应环境变量

二:Jenkins安装

1.从Jenkins官网下载jenkins.war文件。官网地址:https://jenkins.io/zh/,注意选择最新版本的Long-Term Support Release版本
在这里插入图片描述
2.将war包拷到相应文件夹
3.后台运行:

nohup java -jar jenkins.war &

三:Jenkins配置和使用

1.登入http://localhost:8080/jenkins,进入Jenkins初始化页面
在这里插入图片描述
如果jenkins报错:Problem accessing /jenkins/. Reason: HTTP ERROR 404
这是一个Jenkins的Bug。临时解决方法是:在浏览器中手工输入:http://localhost:8080,不要访问"/jenkins"这个路径。

2.安装默认的插件在这里插入图片描述
3.设置管理员用户
在这里插入图片描述
4.设置成功后即进入Jenkins主界面
在这里插入图片描述
5.点击左上侧系统管理,进入Jenkins基本系统设置
在这里插入图片描述
6.全局工具配置

6.1 maven
在这里插入图片描述
6.2 jdk
在这里插入图片描述
6.3 git
在这里插入图片描述
Git位置可能是"whereis git"的地址,也可能是"whereis git"的地址 + “/bin/git”,注意此时不报错就行

6.4 maven安装
在这里插入图片描述
7.插件安装(有些插件已经内置,所以可以在已安装里面搜一下)
【Safe Restart】重启jenkins系统
在这里插入图片描述
【Email Extension】由于Jenkins自带的邮件功能比较鸡肋,因此推荐安装专门的邮件插件
在这里插入图片描述
【maven integration】该插件安装了,才能创建maven项目
在这里插入图片描述
【git plugin】从远程拉取代码
在这里插入图片描述
【publish over ssh】ssh远程登录
在这里插入图片描述
【SSH Plugin】或者叫【SSH】SSH登录到一个远程服务器以执行必要的脚本
在这里插入图片描述
8.全局安全配置
在这里插入图片描述
在这里插入图片描述
jenkins全局安全设置中取消勾选“防止跨站点请求伪造,不然jenkins会认为gitlab的请求不合法

9.系统设置
在这里插入图片描述
在这里插入图片描述
HTML模板

<!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="#FF0000">构建结果 - ${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>   SVN_URL
            <td>
                <ul>
                    <li>项目名称:${PROJECT_NAME}</li>
                    <li>SVN路径:${SVN_URL}</li>                    
                    <li>构建编号:${BUILD_NUMBER}</li>                    
                    <li>SVN版本:${SVN_REVISION}</li>
                    <li>触发原因:${CAUSE}</li>   
                    <li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                </ul>
            </td>
        </tr>
        <tr>
            <td>
                <b><font color="#0B610B">变更信息:</font></b>
               <hr size="2" width="100%" align="center" />
            </td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>上次构建成功后变化 :  ${CHANGES_SINCE_LAST_SUCCESS}</a></li>
                </ul>    
            </td>
        </tr>
 <tr>
            <td>
                <ul>
                    <li>上次构建不稳定后变化 :  ${CHANGES_SINCE_LAST_UNSTABLE}</a></li>
                </ul>    
            </td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
                </ul>    
            </td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>变更集:${JELLY_SCRIPT,template="html"}</a></li>
                </ul>    
            </td>
        </tr>
        <!--
        <tr>
            <td>
                <b><font color="#0B610B">Failed Test Results</font></b>
                <hr size="2" width="100%" align="center" />
            </td>
        </tr>
        <tr>
            <td>
                <pre style="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>Test Logs (if test has ran): <a
                href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a>
                <br />
            <br />
            </td>
        </tr> -->
        <!--
        <tr>
            <td>
                <textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100,escapeHtml=true}</textarea>
            </td>
        </tr>-->
        <hr size="2" width="100%" align="center" />
    </table>
</body>
</html>

10.构建任务

10.1 新建item
在这里插入图片描述
10.2 配置
在这里插入图片描述
在这里插入图片描述
URL使用HTTP时会报错,此时换成SSH方式就能成功
在这里插入图片描述
在这里插入图片描述

clean install -Dmaven.test,skip=true

10.3 手动构建
在这里插入图片描述
在这里插入图片描述

四:Sonar的安装和使用

1.安装Sonar

1.1 官网https://www.sonarqube.org/downloads/下载
在这里插入图片描述
1.2 解压到特定的文件夹

1.3 创建运行账户sonar,并设置账户密码(sonar不能用root启动)

useradd sonar
passwd sonar

注意将文件夹所有人赋予sonar

chown -R sonar:sonar /sonar-7.7

2.配置数据库(MySQL)

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'xwj***@Jet';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'xwj***@Jet';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'xwj***@Jet';
FLUSH PRIVILEGES;

3.Sonar配置文件修改(添加数据库信息)
文件位置为${SONAR_HOME}/conf/sonar.properties

sonar.jdbc.username=sonar
sonar.jdbc.password=xwj***@Jet
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
sonar.jdbc.driverClassName:com.mysql.jdbc.Driver

4.配置环境变量(vim /etc/profile)

export SONAR_HOME=/usr/local/sonarqube-6.7.5
PATH=$PATH:$SONAR_HOME/bin:$SONAR_RUNNER_HOME/bin

5.启动(先切换到sonar用户)
进入到${SONAR_HOME}/bin/linux-x86-64目录

./sonar.sh start

排错说明:可以先跟着sonar.log日志,如果报了es错误,可以去查看es.log;如果报了web错误,那么就是查看web.log

在浏览器中访问: http://localhost:9000/ ,运行界面如下代表成功
在这里插入图片描述
Sonar默认的端口是”9000”、默认的上下文路径是”/”、默认的网络接口是”0.0.0.0”,默认的管理员帐号和密码为:admin/admin

6.页面配置

登陆过后在配置栏里禁用掉SCM,不禁用的话在执行Sonar Scanner完成后,SonarQube Server还会去访问SVN项目,再次要求输入用户名和密码,导致扫描任务失败
在这里插入图片描述
7.插件

安装过后重启Sonar则可
在这里插入图片描述
8.使用Sonar分析Maven工程代码

8.1 找到maven的安装目录,修改setting.xml文件

<pluginGroups>
    <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
	<profile>
		<id>sonar</id>
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
		<properties>
			<sonar.host.url>
			  http://localhost:9000
			</sonar.host.url>
		</properties>
	</profile>
 </profiles>

8.2 进入想要测试的maven工程中

8.3 3.执行命令

mvn clean verify sonar:sonar

另一种使用Sonar分析Maven工程代码的方法

在页面点击创建新项目->项目标识->创建令牌->选择java/maven->生成命令mvn

sonar:sonar \
  -Dsonar.projectKey=1111ee \
  -Dsonar.host.url=http://192.168.203.241:9000 \
  -Dsonar.login=d640239d8e6f90b4ec038f22975fc2bf7329176a

在maven工程中执行上述代码

五:Jenkins与Sonar集成

1.安装Jenkins插件

登录Jenkins→系统设置→插件管理→可选插件→搜索SonarQube
在这里插入图片描述
安装后重启Jenkins

2.全局配置
在这里插入图片描述
3.全局工具配置

这里可以通过访问SonarQube Scanner官网进行下载相应Zip包,或者在Jenkins里进行自动安装
3.1 使用自己下载的Zip包(本人使用)

3.1.1 访问Sonar官网下载scanner插件:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

3.1.2 下载以后放到特定文件夹并解压

3.1.3 配置
在这里插入图片描述
3.2 Jenkins自动安装
在这里插入图片描述
4.在Jenkins中使用Sonar

4.1 配置项目
在这里插入图片描述
找到Post Steps项
在这里插入图片描述

sonar.projectKey=2019-07-23-job //必填,不要和其他sonar项目重名
sonar.projectName=websocket //必填,随意取
sonar.projectVersion=1.0 //必填,随意取
sonar.sources=/root/.jenkins/workspace/test5/src/main/java/ //必填 路径为项目构建后工程所在目录
sonar.java.binaries=/root/.jenkins/workspace/test5/target/classes/ //必填 路径为项目构建后target/classes所在目录
sonar.java.libraries=/root/.m2/repository/org/projectlombok/lombok/1.16.18/lombok-1.16.18.jar //可有可无
sonar.java.coveragePlugin=jacoco
sonar.jacoco.reportPaths=./targe/coverage-reports/jacoco-unit.exec
sonar.dynamicAnalysis=reuseReports
sonar.language=java
sonar.sourceEncoding=UTF-8

4.2 构建
在这里插入图片描述
4.3 构建完成
在这里插入图片描述
4.4 跳转查看
在这里插入图片描述

五:实践过程中的坑

1.Jenkins安装配置问题

1.1 Jenkins安装在linux服务器上,通过yum安装的git一般都是1.X低版本的,执行Jenkins时会提示git版本的错误。
解决方法:需把通过yum安装的git卸载掉,重新安装2.X及以上高版本的git。

1.2 Jenkins构建项目时,会按照maven的setting.xml中配置的把依赖包下载到指定的仓库中。如果这个时候报关于maven的错误,很可能是本地仓库权限问题,给maven本地仓库赋予777的权限。

1.3 当git版本,maven配置都没问题时,用Jenkins构建执行,会报jdk的问题,这是由于jdk版本低引起的,应装jdk1.8版本及以上。
注:如之前在Jenkins中已经配置了低版本jdk的路径,而linux服务器中也修改了jdk高版本,这时候会打不开Jenkins页面。需要做如下操作:一,找到Jenkins中的conf.xml,vi编辑
在这里插入图片描述
1.4. jenkins执行shell脚本等场景中遇见的权限不足问题
解决方法:以root用户运行jenkins中shell命令

以centOS系统为例,记录下修改Jenkins以root用户运行的方法。
修改Jenkins配置文件
打开配置文件

vim /etc/sysconfig/jenkins

修改$JENKINS_USER,并去掉当前行注释

$JENKINS_USER="root"

修改Jenkins相关文件夹用户权限

chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

重启Jenkins服务并检查运行Jenkins的用户是否已经切换为root

重启Jenkins(若是其他方式安装的jenkins则重启方式略不同)

service jenkins restart 

2.Sonar安装配置问题

2.1 保证至少3GB可用内存,否则会直接导致启动失败

2.2 SonarQube6.6以上版本不能使用root账号启动,否则会报错
解决办法:新建一个sonar账号,并用root账号给sonar账号赋予权限

2.3 Linux不一样的用户启动,需要删除目录下的temp临时文件夹,不然会报错

2.4 如果启动了sonar,但是无法进入平台,可能是因为防火墙没关,这时可以将防火墙关闭并重新载入
注:防火墙的shell命令:

firewall-cmd --zone=public --add-port=80/tcp --permanent  (--permanent永久生效,没有此参数重启后失效)
firewall-cmd --reload  重新载入
firewall-cmd --zone=public --remove-port=80/tcp --permanent  删除
firewall-cmd --zone=public --query-port=80/tcp  查看
firewall-cmd --state  查看firewall是否运行
firewall-cmd --list-services  查看当前开了哪些端口
firewall-cmd --get-services  查看还有哪些服务可以打开
firewall-cmd --zone=public --list-ports  查看所有打开的端口

2.5 如果Sonar配置好且运行成功,但过一会自动关闭且报出错误信息: Process exited with exit value [es]: 137
解决方案:因为分配内存过低引起,将虚拟机的运行内存提升至3GB或更高则可保证正常运行

3 Jenkins集成Sonar问题

3.1 在Jenkins里配置SonarQube时,配置里有自动下载SonarQube Scanner的选项.文件比较大,最好自己下载解压然后指定对应解压的位置

3.2 在配置构建项目时,如果项目是第一次构建,则单元测试可能会需要很长时间。如果不需要单元测试,在Build里添加跳过测试的mvn命令。
在这里插入图片描述

3.3 在配置构建项目时,在Post Steps配置sonar信息时,要把SonarQube Scanner扫描路径填写正确,否则扫描会失败并报错
在这里插入图片描述

3.4 如果Jenkins构建成功,但是Sonar扫描失败,可能是因为IP地址有变更,但是在Jenkins里配置的SonarQube Service没有做更新.
在这里插入图片描述
在这里插入图片描述
3.5 如果sonar扫描分析过后,页面上代码覆盖率显示为0.0%,则可能是扫描配置没有配置正确,或者pom文件里jacoco包路径错误,需要重新确认无误再进行扫描

在pom文件里加入:

         <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.7.201606060606</version>
                <configuration>
                    <!--指定生成 .exec 文件的存放位置-->
                    <destFile>target/coverage-reports/jacoco-unit.exec</destFile>
                    <!--Jacoco 是根据 .exec 文件生成最终的报告,所以需指定 .exec 的存放路径-->
                    <dataFile>target/coverage-reports/jacoco-unit.exec</dataFile>
                </configuration>
                <executions>
                    <execution>
                        <id>jacoco-initialize</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>jacoco-site</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

在jenkins的项目配置里Post Steps里的Analysis properties添加

sonar.java.coveragePlugin=jacoco
sonar.jacoco.reportPaths=./targe/coverage-reports/jacoco-unit.exec
sonar.dynamicAnalysis=reuseReports
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!要在CentOS 7上使用Docker安装Jenkins,您可以按照以下步骤操作: 1. 首先,确保您的CentOS 7系统已安装Docker。如果没有安装,请按照以下步骤安装Docker: ``` sudo yum update -y sudo yum install -y docker sudo systemctl start docker sudo systemctl enable docker ``` 2. 确保Docker已正确启动后,可以使用以下命令检查其状态: ``` sudo systemctl status docker ``` 3. 创建一个Docker容器来运行Jenkins。您可以使用以下命令创建并运行一个名为"my-jenkins"的容器: ``` sudo docker run -d -p 8080:8080 -p 50000:50000 --name my-jenkins jenkins/jenkins:lts ``` 这将从Docker Hub上的Jenkins镜像创建一个新容器,并将容器的8080端口映射到主机的8080端口,以及50000端口用于Jenkins代理。 4. 容器启动后,可以使用以下命令查看容器日志并获取初始管理员密码: ``` sudo docker logs my-jenkins ``` 在日志,搜索类似于"Please use the following password to proceed to installation"的行,后面会跟着一个密码。复制该密码。 5. 使用浏览器访问`http://your_server_ip:8080`,将"your_server_ip"替换为您的服务器的实际IP地址。 6. 在Jenkins界面,粘贴刚刚复制的密码,并继续安装过程。 7. 安装完成后,您可以设置Jenkins的管理员账号和密码,并根据需要进行其他配置。 这样,您就成功在CentOS 7上使用Docker安装了Jenkins。希望对您有所帮助!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值