Jenkins是一款开源 CI&CD
软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
Jenkins安装部署所需条件及作用
Jenkins安装部署所需条件
机器要求
- 最少256 MB 的内存,建议大于 512 MB
- 10 GB 的硬盘空间(用于 Jenkins 和 Docker 镜像)
环境要求
- Java 8 ( JRE 或者 JDK 都可以)
- Docker (如果需要使用
docker
来部署) - Maven (如果需要使用Maven构建项目)
- Tomcat (如果基于Tomcat安装)
Jenkins的作用
Jenkins的主要作用是用来做CI&CD
,在软件工程中,CI / CD或CICD通常是指持续集成以及持续交付或持续部署的组合实践(from wiki)。具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持。
所以在此处,Jenkins的主要作用是,我们将代码提交到SVN,Jenkins自动从SVN获取最新的代码,然后进行一系列自动的打包、测试、部署的工作,不需要我们手动去完成。
Jenkins安装部署
首先是JDK的安装 :
cd /mnt/java
wget xxx.com/jdk-8u251-linux-x64.tar.gz
tar -zxvf jdk-8u251-linux-x64.tar.gz
因为环境变量中已经配置了Jdk1.7,所以不再配置环境变量。
然后是安装Maven ;
安装maven
mkdir /mnt/maven
cd /mnt/maven
wget xxx.com/apache-maven-3.6.3-bin.tar.gz
tar -zxvf apache-maven-3.6.3-bin.tar.gz
vim /etc/profile
# 添加
export M2_HOME=/mnt/maven/apache-maven-3.6.3
export PATH=${M2_HOME}/bin:$PATH
#使环境变量生效
source /etc/profile
更改默认的仓库位置与maven阿里云镜像:
# 新建仓库文件夹
mkdir /mnt/maven/repository
# 备份默认的配置文件
cd /mnt/maven/apache-maven-3.6.3/conf
cp settings.xml settings-backup.xml
vim settings.xml
# 在settings标签中添加
<localRepository>/mnt/maven/repository</localRepository>
# 添加mirrors子节点
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
安装Jenkins
此处采用war包方式安装:
首先设置Jenkins_home
# 创建文件夹 mkdir /mnt/jenkins mkdir /mnt/jenkins/jenkins-home vim /etc/profile # 添加 export JENKINS_HOME=/mnt/jenkins/jenkins-home #使环境变量生效 source /etc/profile
拉取免安装war包(建议先在本地下载,然后在传上去)
cd /mnt/jenkins wget http://mirrors.jenkins.io/war-stable/2.249.1/jenkins.war
添加Jenkins运行脚本
cd /mnt/jenkins # 新建日志存放目录 mkdir jenkins-logs vim run.sh # 添加 #!/bin/bash pid=`ps -ef | grep jenkins.war | grep -v 'grep'| awk '{print $2}'| wc -l` if [ "$1" = "start" ];then if [ $pid -gt 0 ];then echo 'jenkins is running...' else /mnt/java/jdk1.8.0_251/bin/java -jar jenkins.war --httpPort=8080 >jenkins-logs/log1.log 2>&1 & echo 'jenkins is starting' fi elif [ "$1" = "stop" ];then exec ps -ef | grep jenkins | grep -v grep | awk '{print $2}'| xargs kill -9 echo 'jenkins is stop..' else echo "Please input like this:"./run.sh start" or "./jenkins stop"" fi # 赋予脚本执行权限 chmod +x run.sh
运行
bash run.sh start
Jenkins的配置
系统配置
- 打开域名/ip:8080
获取初始密码,在
/mnt/jenkins/jenkins-logs/log1.log
日志文件中寻找,或者cat /mnt/jenkins/jenkins-home/secrets/initialAdminPassword
- 输入初始密码,继续
- 安装推荐的插件/选择插件安装,都不选,直接叉掉跳过,然后在用户名-configure-修改密码
- 汉化:
System configuration
--plugin manage
--available plugin
--search cn
--选择Chinese simplified安装,然后重启Jenkins 设置jdk和maven
- jdk:系统管理-全局工具配置-新增JDK-别名:JDK1.8;JAVA_HOME:/mnt/java/jdk1.8.0_251
- maven:系统管理-全局工具配置-新增Maven-别名:MAVEN3.6.3;MAVEN_HOME:/mnt/maven/apache-maven-3.6.3
安装需要的插件:(勾选直接安装,视情况选择)
新建Job(此处以cloudweb为例)
- 新建任务
- 选择构建一个maven项目
- 勾选丢弃旧的构建,保持构建的天数与保持构建的最大个数都填10
- 源码管理选择git或者Subversion,填入URL
- Credentials-添加-Jenkins-username with password
- 构建触发器-去掉
Build whenever a SNAPSHOT dependency is built
勾选 build:root
pom:pom.xml
Goals and options:package -Dmaven.test.skip=true
- 保存-立即构建
Sonarqube
SonarQube 是一个开源的代码分析平台,用来持续分析和评测代码的质量,支持检测 Java、JavaScript、C#、C、C++ 等二十几种编程语言。通过 SonarQube 可以检测出项目中潜在的Bug、漏洞、代码规范、重复代码、缺乏单元测试的代码等问题,并提供了 UI 界面进行查看和管理。
sonarqube安装
确定要使用的sonarqube版本
当前sonarqube最新版本为8.4,但是需要jdk版本至少为11,且不支持mysql5.7,最近的长期支持版本SonarQube 7.9.4 LTS也是。
所以我选择的是sonarqube 7.7,支持jdk8和MySQL 5.7.
首先下载sonarqube(建议手动下载上传)
mkdir /mnt/jenkins/sonarqube
cd /mnt/jenkins/sonarqube
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
安装sonarqube
# 直接解压即可
unzip sonarqube-7.7.zip
配置sonarqube
- 首先区mysql中新建一个数据库,名称为
sonar
配置
sonar.properties
中的数据库(这里很坑,地址填localhost无法连接,找了很久)vim /mnt/jenkins/sonarqube/sonarqube-7.7/conf/sonar.properties # 添加 sonar.jdbc.url=jdbc:mysql://xhofe.top:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false&serverTimezone=Asia/Shanghai sonar.jdbc.username=test sonar.jdbc.password=test
启动Sonarqube
因为环境变量中的Java版本是1.7,而sonarqube需要的jdk是8,所以需要手动修改一下启动文件:
vim /mnt/jenkins/sonarqube/sonarqube-7.7/conf/wrapper.conf # 修改 wrapper.java.command wrapper.java.command=/mnt/java/jdk1.8.0_251/bin/java
sonarqube不能以root用户运行,所以需要创建新用户
useradd sonar passwd sonar Enter new UNIX password: sonar Retype new UNIX password: sonar chown -R sonar:sonar /mnt/jenkins/sonarqube/sonarqube-7.7
修改vm.max_map_count 与max file descriptors
sudo vim /etc/sysctl.conf # 添加 vm.max_map_count=655360 # 执行 sudo sysctl -p vim /etc/security/limits.conf # 添加 sonar soft nofile 65536 sonar hard nofile 65536
启动
su sonar cd /mnt/jenkins/sonarqube/sonarqube-7.7/bin/linux-x86-64 ./sonar.sh start
- 汉化(或者手动上传)
打开http://[url/ip]:9000/
默认密码为admin/admin;
cd /mnt/jenkins/sonarqube/sonarqube-7.7/extensions/plugins
wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.27/sonar-l10n-zh-plugin-1.27.jar
cd /mnt/jenkins/sonarqube/sonarqube-7.7/bin/linux-x86-64
./sonar.sh restart
与Jenkins集成
Jenkins安装SonarQube Scanner
- Jenkins-系统管理-插件管理-可用插件-SonarQube Scanner-直接安装
- 重启Jenkins
配置Jenkins与sonarqube集成
- 首先,在SonarQube中生成一个Token:我的账号-安全-生成令牌-名称填Jenkins(token)
- 然后,在Jenkins中配置连接sonarqube服务器的地址,这里用到的token就是刚才在sonarqube中创建的那个token:Jenkins-系统管理-系统配置-SonarQube servers-add sonarqube:
Name | sonarqube |
---|---|
Server URL | http://[url/ip]:9000 |
Server authentication token | 添加-secret text-id/描述:sonarqube,secret:刚刚生成的token |
保存应用
- 最后,配置全局工具配置:Jenkins-系统管理-全局工具配置-SonarQube Scanner-新增SonarQube Scanner-
名称:sonarqube scanner,勾选自动安装,版本选择4.0.0.1744
保存应用。
sonarqube中配置svn(选做,如果使用git则不需要)
sonar-runner发现了.svn文件,于是启动了自己的SVN插件,去访问SVN,所以需要配置svn,配置-scm-将Disabled the SCM Sensor设置为true,在svn页面,设置svn的用户名和密码。
如何使用
在Jenkins中创建job时,post-steps中添加excute sonarqube scanner;
Analysis properties:
sonar.projectKey=cloudweb
sonar.projectName=cloudweb
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE/src
sonar.java.binaries=$WORKSPACE/target/classes
保存应用。
OK~现在就点击立即构建吧。
参考
- Jenkins使用教程
- Jenkins 集成 SonarQube Scanner
- Jenkins集成SonarQube进行代码质量扫描
- sonarqube
- sonar-scanner扫描代码出错 SonarQube svn: E170001
- [max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]](https://blog.csdn.net/lilongsy/article/details/78708027)
- [解决:max file descriptors [65535] for elasticsearch process is too low](https://blog.csdn.net/jiahao1186/article/details/90235771)
- sonar es can not run elasticsearch as root
- Linux下为Sonarqube安装中文插件