jenkins的安装与使用
参考链接:
jenkins的安装:https://www.unixhot.com/article/55
jenkins的教程:https://www.yiibai.com/jenkins/jenkins_maven_setup.html
不错的博客:https://www.cnblogs.com/ceshi2016/p/6529496.html
1、jenkins简介
持续集成Continuous Integration
持续交付Continuous Delivery
持续部署Continuous Deployment
1.1、什么是持续集成
持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并进程自动化测试 。
1.2、什么是持续交付
持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境
1.3、持续部署
在持续交付的基础上,把部署到生产环境的过程自动化,持续部署和持续交付的区别就是最终部署到生产环境是自动化的。
1.4、部署代码上线流程
1.代码获取(直接了拉取) 2.编译 (可选) 3.配置文件放进去 4.打包 5.scp到目标服务器 6.将目标服务器移除集群 7.解压并放置到Webroot 8.Scp 差异文件 9.重启 (可选) 10.测试 11.加入集群
1.5、运维必知OWASP
Jenkins上OWASP 插件介绍: 它是开放式Web应用程序安全项目[OWASP,Open Web Application Secunity Project
]
它每年会出一个top10的安全漏洞,我们需要知道当前top10的漏洞有哪些
https://www.owasp.org/index.php/Category:OWASP_Top_Ten_2017_Project
https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf
2、jenkins的安装
2.1、安装java环境
yum -y install java 或 yum install java-1.8.0-openjdk
2.2、jenkins安装
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key sudo yum install jenkins
也可以先把包下载好后再安装
[root@jenkins ~]# yum localinstall jenkins-2.222.1-1.1.noarch.rpm 启动: systemctl start jenkins systemctl enable jenkins 默认8080,如果想修改默认端口: /etc/sysconfig/jenkins
2.3、防火墙设置
firewall-cmd --permanent --new-service=jenkins firewall-cmd --permanent --service=jenkins --set-short="Jenkins Service Ports" firewall-cmd --permanent --service=jenkins --set-description="Jenkins service firewalld port exceptions" firewall-cmd --permanent --service=jenkins --add-port=8080/tcp firewall-cmd --permanent --add-service=jenkins firewall-cmd --zone=public --add-service=http --permanent firewall-cmd --reload 查看: firewall-cmd --list-all
2.4、安装web提示操作即可
1、 访问Jenkins:在浏览器输入: http://10.10.10.61:8080
2、中间有一个需要选择安装的插件,我这里暂不安装,后续更加需要再自行安装。
3、安装完成进去之后首先要修改密码,要不然默认还是那一串长长的密码。(账户:admin)
2.4.1、jenkins加速插件
为加速插件的安装,这里选择清华源地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
2.5、jenkins目录介绍
/var/lib/jenkins 主目录 /etc/init.d/jenkins 启动文件 /var/cache/jenkins 程序文件 /var/log/jenkins 日志文件 /etc/sysconfig/jenkins 主配置文件
vim /etc/sysconfig/jenkins JENKINS_HOME="/var/lib/jenkins" 主目录地址,备份可以备份这个,到时候切换目录就行 JENKINS_USER="jenkins" 改为root,主要是为了避免脚本调用系统命令; JENKINS_PORT="8080" 修改jenkins页面访问端口 JENKINS_LISTEN_ADDRESS="" 指定监听地址
修改配置需要重启jenkins
service jenkins restart
2.6、备份
每天备份,保留15天数据
tar zcvf jenkins.tar.gz /var/lib/jenkins
2.7、jenkins系统设置
3、设置中文显示
3.1、安装中文语言包
在插件管理,搜索 Localization: Chinese (Simplified),然后点击Install without restart安装即可
3.2、在地址栏输入 restart 重启Jenkins
4、jenkins插件安装
jenkins插件安装的地址为:https://updates.jenkins.io/update-center.json 这也是官方自带的,我这儿使用没有问题,返应很快;如果有因为源的问题而导致插件安装慢或失败的问题可以更换这个源地址
jenkins的其他源地址:http://mirrors.jenkins-ci.org/status.html
插件安装方式:
jenkins平台方式:插件管理-选择插件安装,但有一定几率安装失败,基本都是连接不上下载地址
手工安装方式:先下载安装包后拷贝进相应的目录后重启
手工安装:下载地址:http://updates.jenkins-ci.org/
4.1、安装gitlab插件
4.2、通过平台安装失败的
注释:如果多次安装失败,可以选择高级选项栏里边有个 上传插件的选项;在已安装好的jenkins的插件服务器内拷贝一份过来也是可以的;/var/lib/jenkins/plugins/ 目录下,需要注意权限:plugins目录必须是jenkins用户和组才行。
拷贝完成后需要重启jenkins服务即可!
4.3、直接找yum源下载安装
我这里找的是清华源,比较全速度还可以
这里以安装ssh为例:Index of /jenkins/plugins/ssh/2.6/ 或者去官网找对应的版本以免出现依赖安装不上:http://updates.jenkins-ci.org/
下载下来后,上传到jenkins的/var/lib/jenkins/plugins/就行;如果有更新,也可以以这样的方式更新。
4.4、批量导入插件
我这里有打包好的jenkins2.222.1的插件软件包,上传到/var/lib/jenkins/plugins 目录后解压并重启jenkins就可以正常使用了
下载地址:
链接:https://pan.baidu.com/s/1Ywj1COPoksd52uarjCbCOw
提取码:vxbq
cd /var/lib/jenkins/plugins 上传包文件到该目录 tar xf jenkins-plugins.tar.gz systemcatl restart jenkins
4.4、插件在更新后报错
参考博客地址:http://www.mamicode.com/info-detail-2949400.html
再安装插件
4.4、升级jenkins
当前版本为jenkins2.222 需要升级到最新版jenkins2.232
停止服务 service jenkins stop 查看war包所放位置: [root@localhost ~]# rpm -ql jenkins /usr/lib/jenkins/jenkins.war [root@localhost ~]# cd /usr/lib/jenkins/ [root@localhost jenkins]# mv jenkins.war jenkins.war.2.222.bak war包下载 https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.233/ 下载完后后上传至该目录 启动jenkins service jenkins start 备注:升级前先备份数据
5、jenkins设置邮箱
6、jenkins与gitlab结合
需要在jenkins服务器上创建一个可以连接gitlab的ssh密钥
https://www.cnblogs.com/ceshi2016/p/6529532.html
jenkins需要选安装git
[root@jenkins ~]# ssh-keygen -t rsa [root@jenkins ~]# cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQA***************PQN+7DeTkwS63s7IMbAluWSNF root@jenkins
6.1、下载测试(jenkins端)
[root@jenkins ~]# git clone git@10.10.10.60:root/kuaiyun-web01.git Cloning into 'kuaiyun-web01'... The authenticity of host '10.10.10.60 (10.10.10.60)' can't be established. ECDSA key fingerprint is SHA256:Fp/H7GU+ju/FbSwBw7nn4XWl9Irpn3FWlbwotTCgUEo. ECDSA key fingerprint is MD5:c2:65:2b:94:71:a9:31:9b:31:de:8f:4e:9a:dd:15:1d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.10.10.60' (ECDSA) to the list of known hosts. remote: Counting objects: 1843, done. remote: Compressing objects: 100% (1675/1675), done. remote: Total 1843 (delta 38), reused 1836 (delta 36) Receiving objects: 100% (1843/1843), 9.31 MiB | 1.76 MiB/s, done. Resolving deltas: 100% (38/38), done. [root@jenkins ~]# 注释:是成功的
6.2、jenkins设置gtilab私钥端
6.3、构建一个新的项目
任务名称: freestyle-app01 选 构建一个自由风格的软件项目
5、Sonar代码质量管理(待完善!!!)
5.1、Sonar介绍
Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)
直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。
在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。 此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
5.2、Sonar作用
Sonar的相关下载和文档可以在下面的链接中找到:http://www.sonarqube.org/downloads/。需要注意最新版的Sonar需要至少JDK 1.8及以上版本。 上篇文章我们已经可以成功的使用Git进行拉去,Sonar的功能就是来检查代码是否有BUG。除了检查代码是否有bug还有其他的功能,比如说:你的代码注释率是多少,代码有一些建议,编写语法的建议。所以我们叫质量管理 Sonar还可以给代码打分,并且引用了技术宅的功能(告诉你有很多地方没改)
5.3、Sonar部署
#下载sonar文件 yum install -y java-1.8.0 wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-7.3.zip unzip sonarqube-7.3.zip mv sonarqube-7.3 /usr/local/ ln -s /usr/local/sonarqube-7.3/ /usr/local/sonarqube #准备sonar数据库(sonar不支持mysql5.5,故安装mysql5.7) wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm yum -y install mysql57-community-release-el7-10.noarch.rpm yum -y install mysql-community-server #启动数据库 systemctl start mysqld.service systemctl enable mysqld.service #查找初始密码 grep "password" /var/log/mysqld.log 2018-08-16T06:07:08.282950Z 1 [Note] A temporary password is generated for root@localhost: I6L:M3tN#HwY
#设置密码
[root@jenkins src]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.23
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'yanqi1993';
mysql> flush privileges;
注释:最后一步,取消mysql yum 自动更新
yum -y remove mysql57-community-release-el7-10.noarch
新建sonar数据库后插入数据
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar@pw'; GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar@pw'; #不是必须的 FLUSH PRIVILEGES;
配置Java访问数据库驱动(可选)
默认情况Sonar有自带的嵌入的数据库,那么你如果使用类是Oracle数据库,必须手动复制驱动类到${SONAR_HOME}/extensions/jdbc-driver/oracle/
目录下,其它支持的数据库默认提供了驱动。其它数据库的配置可以参考官方文档:
http://docs.sonarqube.org/display/HOME/SonarQube+Platform
5.4、sonar配置
[root@jenkins src]# vim /usr/local/sonarqube/conf/sonar.properties 16 sonar.jdbc.username=sonar 17 sonar.jdbc.password=sonar@pw 28 sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedS tatements=true&useConfigs=maxPerformance&useSSL=false 107 sonar.web.host=0.0.0.0 113 sonar.web.port=9000
设置连接池:
#sonar.properties
sonar.jdbc.maxActive: 20
sonar.jdbc.maxIdle: 5
sonar.jdbc.minIdle: 2
sonar.jdbc.maxWait: 5000
sonar.jdbc.minEvictableIdleTimeMillis: 600000
sonar.jdbc.timeBetweenEvictionRunsMillis: 30000
#因为sonar里有elk的启动程序不允许root启动进程,创建普通用户
useradd sonarqube
passwd sonarqube
su - sonarqube
chown -R sonarqube.sonarqube /usr/local/sonarqube/*
[sonarqube@jenkins ~]$ /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start Starting SonarQube... Started SonarQube.
9000端口启动较慢,需要等上近一分钟!!! 注释:如果有什么问题可以看一下日志[/usr/local/sonarqube/logs/sonar.log]
此处启动sonar有故障,详情看附录
5.5、sonar进程
[sonarqube@jenkins ~]$ netstat -luntp (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 11752/java tcp6 0 0 127.0.0.1:43180 :::* LISTEN 12079/java tcp6 0 0 :::8080 :::* LISTEN - tcp6 0 0 :::22 :::* LISTEN - tcp6 0 0 ::1:25 :::* LISTEN - tcp6 0 0 :::9000 :::* LISTEN 11870/java tcp6 0 0 127.0.0.1:9001 :::* LISTEN 11777/java tcp6 0 0 :::3306 :::* LISTEN - udp 0 0 127.0.0.1:323 0.0.0.0:* - udp6 0 0 :::33848 :::* - udp6 0 0 :::5353 :::* - udp6 0 0 ::1:323 :::* -
5.6、sonar设置
1、安装汉化插件
2、其他插件的安装
•安装 SonarJava 插件Java代码分析器; •安装SonarJS插件,JavaScript代码分析器 •安装SonarXML插件,XML分析器; •安装Web插件,HTML, JSP, JSF, ..代码分析器; •安装CSS / SCSS / Less插件,CSS、Less代码分析器; •安装SonarC# 插件,C#代码分析器; •安装SonarQube :: Plugins :: SCM :: SVN插件; •安装Checkstyle插件,Provide Checkstyle rules for Java projects; •安装Findugs 插件,Provide Findbugs rules for analysis of Java projects。
5.7、安装 sonar-scanner
安装完成sonargube 服务后,还需要安装一个分析工具,可以用runner 或者scanner ,本文采用scanner ,它与sonargube的关系可以大致理解为客户端和服务端。
cd /usr/local/src/ https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.2.0.1227-linux.zip unzip sonar-scanner-cli-3.2.0.1227-linux.zip mv sonar-scanner-3.2.0.1227-linux /usr/local/ ln -s /usr/local/sonar-scanner-3.2.0.1227-linux/ /usr/local/sonar-scanner cd /usr/local/sonar-scanner/conf/ vim sonar-scanner.properties sonar.host.url=http://localhost:9000 sonar.sourceEncoding=UTF-8 注释:去掉这两行的注释即可
5.7.1、在需要检测的代码目录内新增一个文件名(名字必须一致),文件内容如下
[root@jenkins wstmart_v2.0.6_180726]# vim sonar-project.properties # must be unique in a given SonarQube instance sonar.projectKey=my:project #注册实例,必须是唯一的名称 # this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1. sonar.projectName=My project #项目名称 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=/usr/local/src/wstmart_v2.0.6_180726/sonar-project.properties #sonar-project.properties 文件的绝对路径 # Encoding of the source code. Default is default system encoding sonar.sourceEncoding=UTF-8 #默认系统编码
5.7.2、手动执行
[root@jenkins wstmart_v2.0.6_180726]# /usr/local/sonar-scanner/bin/sonar-scanner
注释:在web目录网站下执行sonar-scanner检查命令即可!执行后会在sonarweb端看到
5.8、jenkins集成sonar
注释:这里需要设置一个随机的key值,后续需要填写到下边的第三个框内。
注释:上张图的意思是没有安装node js https://www.cnblogs.com/lpbottle/p/7733397.html
最后:
[root@jenkins ~]# ln -s /usr/local/bin/node /bin/node
说明:
ERROR: Error during SonarQube Scanner execution ERROR: Failed to upload report - 500: An error has occurred. Please contact your administrator 问题原因:mysql参数设置问题 1、修改/etc/my.cnf文件: max_allowed_packet = 50M 2、检查mysql参数: mysql> SHOW VARIABLES LIKE 'max_allowed_packet'; 重启mysql服务: [root@jenkins ~]# systemctl stop mysqld [root@jenkins ~]# systemctl start mysqld 3、重启sonar [sonarqube@jenkins ~]$ /usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart 注释:9000端口开启后登陆jenkins页面再重构一下
5.7、最终结果
6、代码流水线管理
https://www.cnblogs.com/ceshi2016/p/6529557.html
Pipeline
名词顾名思义就是流水线的意思,自动的 每次gitlab上master有更新就拉取数据构建、代码质量测试后再上传到测试服务器上。
上边做的是数据的拉取和质量测试,下边我们要把测试过后的代码部署到
6.1、做密钥登陆
因为文件的部署这次使用的是脚本来执行的。需要把拉取得数据拷贝到对应的测试机内,所以要做无密钥登陆!!!
我们做无秘钥有2种分案: 1、使用jenkins用户将秘钥分发给192.168.56.12上 2、使用root用户将秘钥分发给192.168.56.12上,如果使用root用户还要进行visudo授权。因为Web上默认执行命令的用户是jenkins
6.2、我们使用root做密码验证
这里我们的key已经做好,如果没做可以直接 ssh-keygen -t ras
来生成秘钥
我们将10.10.10.61(jenkins服务)上的公钥复制到10.10.10.60(原本是gitlab服务,现当作web服务使用)上
[root@jenkins ~]# cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQKt1AUXxiRCoF85eFE2SvvCdWAdKGQFD02ZQ2Ld+uJTUnM4QCvbIIGeHnlQmv2HJ84xhxar0QcpjHEiuNVnfy6otG8oVqudbaTYU8FZgKhKubdzRxz/FluK//753O8vjhc1joUU8X9hhML+USTmpu8i55PbLvtvqtSmMuGPmVMizJdqj+4Y05YYJcZeha+V2j/0ayyvorA3buFZu+DRg8pSoI5mvY0y04o931fQpTVKZA021VqsPGqXK5lbuK7kGE9QxMzX+eHWdlw2d1g1lYzKXfy/dMJ9I4X8SKUXuBJH0zeKcNQczppfF7RhEfxlAxGngj15n0ItBSdJCfYbzZ root@jenkins [root@jenkins ~]# 把10.10.10.61上的公钥放置带10.60上 [root@gitlab ~]# cat .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQKt1AUXxiRCoF85eFE2SvvCdWAdKGQFD02ZQ2Ld+uJTUnM4QCvbIIGeHnlQmv2HJ84xhxar0QcpjHEiuNVnfy6otG8oVqudbaTYU8FZgKhKubdzRxz/FluK//753O8vjhc1joUU8X9hhML+USTmpu8i55PbLvtvqtSmMuGPmVMizJdqj+4Y05YYJcZeha+V2j/0ayyvorA3buFZu+DRg8pSoI5mvY0y04o931fQpTVKZA021VqsPGqXK5lbuK7kGE9QxMzX+eHWdlw2d1g1lYzKXfy/dMJ9I4X8SKUXuBJH0zeKcNQczppfF7RhEfxlAxGngj15n0ItBSdJCfYbzZ root@jenkins 测试登陆情况: [root@jenkins ~]# ssh root@10.10.10.60 Last login: Fri Aug 17 14:29:43 2018 from 10.10.10.1 [root@gitlab ~]#
注释:这次脚本就可以正常的在客户端执行sh命令了。
6.3、使用git钩子把代码质量管理和测试部署连接起来
这时候就用到了Git
钩子
我们需要安装jenkins插件parameterized
说明:插件安装完毕后,开始关联项目。
6.4、关联结果
6.5、使用pipeline关联项目更加直观
6.5.1、安装插件pipeline
6.5.2、使用pipeline插件
7、Jenkins + gitlab集成
https://www.cnblogs.com/ceshi2016/p/6529557.html
Jenkins + gitlab
集成后,实现的功能是 开发写好代码提交至gitlab上,当时开始push到gitlab上之后,jenkins自动帮我们立即构建
这个项目我们需要安装一个gitlab钩子
的脚本
提示: jenkins不论想实现什么功能,都需要安装插件!!
7.1、安装gitlab hook 钩子插件
这里需要我们在服务器里面写一个令牌,在jenkins上也写一个令牌。这两个可以连接到一起就可以。
#因为用到了令牌我们还需要在安装一个插件,否则将无法使用。因为令牌是需要登录之后才会有,所以需要有一个管理的插件
插件搜索:Build Aut
7.2、配置钩子脚本
7.2.1、生成一个令牌
[root@jenkins ~]# openssl rand -hex 10 d305dede856d6c764031
7.3、gitlab上操作如下
Build Authorization Token Root Plugin 插件使用说明
https://wiki.jenkins.io/display/JENKINS/Build+Token+Root+Plugin
使用Build插件后,url如下:
http://10.10.10.61:8080/buildByToken/build?job=sonar-test01&token=d305dede856d6c764031 sonar-test01=项目名称(构建时的项目名称) d305dede856d6c764031=jenkins填写的令牌
推送测试
7.4、向git
服务器提交代码,验证是否可以自动部署
[root@linux-node1 ~]# echo "Build Token Root Plugin" > index.html [root@linux-node1 ~]# git add index.html [root@saltmaster ~/weather]# git commit -m "text" [root@linux-node1 ~]# git push origin master
7.4.1、查看jenkins的日志信息
tail -f /var/log/jenkins/jenkins.log
7.4.2、查看web端信息
FAQ:
1.插件在官方网站的搜索
2、启动sonar报错
显示:不允许root运行sonar进程