linux学习--week22--jenkins sonarqu
1.自动化部署代码的流程
2.git gitlab gogs ( 轻量 ) <--MySQL
3.jenkins sonarqube
1.jenkins
安装
tomcat --> war
rpm
docker -->
java -jar jenkins.jar
插件管理
freestyle
freestyle-->部署静态站点 html
maven
java项目
通知机制
钉钉
sonarqube质量检测
1.搭建环境 nginxproxy 两个web节点 -->nginx
2.gitlab
2.1) 创建项目
2.2) 分配权限
2.3) 开发Windows与gitlab绑定秘钥
2.4) 开发编写代码-->提交到指定的仓库中
3.jenkins
3.1) 创建一个freestyle 项目| 任务 job
3.2) 配置jenkins与gitlab集成-->填写仓库具体地址 配置 privateKey -->root免密
3.3) 完成jenkins拉取gitlab最新代码
3.4) 找到构建操作--->选择执行Shell
3.5) 编写代码上线的Shell脚本
1.进入代码拉取到的指定目录
2.打包存入本地/opt目录下,但是打包后的名称--->game_casdsadas_2019-12-xx
3.通过scp推送代码至2台web节点 (jenkins-->web集群是免密交互)
4.通过ssh方式远程操作web集群主机
1.进入/opt目录,创建game_casdsadas_2019-12-xx 文件夹
2.解压代码至/opt/game_casdsadas_2019-12-xx 文件夹
3.删除站点目录的软连接 /code/game
4.重新创建软连接
5.重载服务
java
1.jar war 源码包?
1.1) 开发IDE编辑工具编写的--->源码包
1.2) war 将源码包通过编译工具生成出来的,可能会依赖一些jar包
1.3) jar
jar通常指的是工具库 mysql-connection.jar
可独立运行的jar包 java -jar xx.jar
2.部署java项目
1.手动部署如何实现?
1.环境搭建: nginx proxy + 2台 Tomcat
2.编写代码-->提交至代码仓库平台
3.手动克隆项目
4.对项目进行编译 ---> yum install maven -y
5.推送代码-->over
2.自动部署? git_version
1.jenkins创建maven项目
2.jenkins配置对应的地址
3.填写maven编译参数
4.写一个上线的脚本
1.推送war包
2.创建目录-->解压到指定目录
3.删除软连接
4.重建软连接
5.重载服务
3.回退
0.创建一个freestyle回退job即可
1.找到对应版本的连接全路径
2.删除软连接
3.重建软连接
4.重载服务
3.通知notify
邮件 <--不够及时
钉钉 <--推荐 简单
微信 <--不推荐
1.有一个钉钉的群
2.在钉钉群中添加一个机器人,拿到机器的token即可
3.登录jenkins-->添加钉钉的插件 dingding
4.在项目中集成钉钉通知
3.接入sonarqube代码的质量扫描?
java开发
检测: bug 漏洞 重复代码 不规范代码
mysql 高于 5.6
1.安装mysql
[root@oldxu-sonar-172 ~]# yum localinstall mysql-community-* -y
[root@oldxu-sonar-172 ~]# systemctl start mysqld
[root@oldxu-sonar-172 ~]# mysqladmin password 'oldxu.com'
[root@oldxu-sonar-172 ~]# mysql -uroot -poldxu.com
mysql> create database sonar charset utf8;
mysql> exit
2.安装java环境
[root@oldxu-sonar-172 ~]# yum install java -y
3.安装sonarqube-server
[root@oldxu-sonar-172 ~]# unzip sonarqube-7.0.zip -d /usr/local/
[root@oldxu-sonar-172 ~]# ln -s /usr/local/sonarqube-7.0/ /usr/local/sonarqube
[root@oldxu-sonar-172 ~]# grep "^[a-Z]" /usr/local/sonarqube/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=oldxu.com
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
[root@oldxu-sonar-172 ~]# useradd sonar
[root@oldxu-sonar-172 ~]# chown -R sonar.sonar /usr/local/sonarqube
[root@oldxu-sonar-172 ~]# chown -R sonar.sonar /usr/local/sonarqube-7.0/
[root@oldxu-sonar-172 ~]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"
sonarqube token:
6ca6b8031b25810a3369fbcf008427f222ccec8f
安装sonar-scanner客户端
[root@jenkins-172 ~]# ln -s /usr/local/sonar-scanner-4.0.0.1744-linux/ /usr/local/sonar-scanner
[root@jenkins-172 ~]# unzip sonar-scanner-cli-4.0.0.1744-linux.zip -d /usr/local/
配置sonar-scanner
[root@jenkins-172 xiaoniaofeifei]# grep "^[a-Z]" /usr/local/sonar-scanner/conf/sonar-scanner.properties
sonar.host.url=http://sonar.oldxu.com:9000
sonar.login=6ca6b8031b25810a3369fbcf008427f222ccec8f
sonar.sourceEncoding=UTF-8
html:
/usr/local/sonar-scanner/bin/sonar-scanner \
-Dsonar.projectKey=php \
-Dsonar.sources=.
maven项目检测代码;
mvn sonar:sonar \
-Dsonar.host.url=http://sonar.oldxu.com:9000 \
-Dsonar.login=6ca6b8031b25810a3369fbcf008427f222ccec8f
sonarqube插件
[root@oldxu-sonar-172 ~]# rm -f /usr/local/sonarqube/extensions/plugins/*
[root@oldxu-sonar-172 ~]# tar xf sonar_plugins.tar.gz
[root@oldxu-sonar-172 ~]# cp -rp plugins/* /usr/local/sonarqube/extensions/plugins/
[root@oldxu-sonar-172 ~]# chown -R sonar.sonar /usr/local/sonarqube
[root@oldxu-sonar-172 ~]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"
freestyle-
sonar.projectName=${JOB_NAME} #项目在sonarqube上的显示名称
sonar.projectKey=html #项目的唯一标识,不能重复
sonar.sources=. #扫描哪个项目的源码
maven:
clean
verify
sonar:sonar
-Dsonar.host.url=http://sonar.oldxu.com:9000
-Dsonar.login=6ca6b8031b25810a3369fbcf008427f222ccec8f
jenkins pipeline
pipeline {
agent any
stages {
stage('获取代码') {
steps {
echo "get code"
}
}
stage('质量扫描') {
steps {
echo "check code"
}
}
stage('代码编译') {
steps {
echo "code --"
}
}
stage('代码部署') {
steps {
echo "code deploy"
}
}
}
}
--------------------------------------------java
pipeline {
agent {
label 'slave1'
}
stages {
stage('获取代码') {
steps {
checkout([{git_version}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '7121d926-c9db-435a-9be3-a4c71133e01e', url: 'git@gitlab.oldxu.com:devops/java-hello-world.git']]])
}
}
stage('质量扫描') {
steps {
sh '/usr/local/sonar-scanner/bin/sonar-scanner -Dsonar.projectName=${JOB_NAME} -Dsonar.projectKey=html -Dsonar.sources=.'
}
}
stage('代码编译') {
steps {
sh 'mvn clean package'
}
}
stage('是否部署'){
steps {
input '确认部署'
}
}
stage('代码部署') {
steps {
sh 'sh -x /scripts/java_depoly.sh'
}
}
}
//当所有的stages结束后,才执行钉钉通知
post {
success{
dingTalk accessToken: '8c2b9b5584ae574a774e24b08da1b3882c830f63c7342621daac04d566e192d0', imageUrl: '', jenkinsUrl: 'http://jenkins.oldxu.com', message: '构建成功', notifyPeople: ''
}
failure {
dingTalk accessToken: '8c2b9b5584ae574a774e24b08da1b3882c830f63c7342621daac04d566e192d0', imageUrl: '', jenkinsUrl: 'http://jenkins.oldxu.com', message: '构建失败', notifyPeople: ''
}
}
}
slave:
1.无需安装jenkins程序
2.java maven git
3.将master正常的sonar-scanner 推送给slave
4.与web集群的所有主机进行免密交互
5.将所有需要使用的域名进行解析
6.脚本推送
![](https://img.haomeiwen.com/i18562821/fab6d2549cc0410f.png)
作业:
以实现: 开发提交代码-->自动|定时|点击-->拉取代码-->扫描代码-->部署代码-->钉钉通知
job1: 开发提交代码-->自动-->拉取代码-->扫描代码-->钉钉通知扫描质量 https://gitee.com/chejiangyi/dingding-sonar/
job2: 获取稳定的代码--> shell --> 部署