美文网首页
linux学习--week22--jenkins sonarqu

linux学习--week22--jenkins sonarqu

作者: 亮仔_c1b5 | 来源:发表于2019-12-22 21:31 被阅读0次

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([class: 'GitSCM', branches: [[name: '{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.脚本推送

代码部署过程.png

作业:
以实现: 开发提交代码-->自动|定时|点击-->拉取代码-->扫描代码-->部署代码-->钉钉通知
job1: 开发提交代码-->自动-->拉取代码-->扫描代码-->钉钉通知扫描质量 https://gitee.com/chejiangyi/dingding-sonar/
job2: 获取稳定的代码--> shell --> 部署

相关文章

网友评论

      本文标题:linux学习--week22--jenkins sonarqu

      本文链接:https://www.haomeiwen.com/subject/xyhanctx.html