kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用
背景:
顺序有点乱了在ci/cd过程中应该是先进行代码的静态扫描再去进行扫描镜像的呢,就佛系的写了。反正步骤都是独立的。这里写一下sonarqube的安装与集成,估计实践的我还要好好研究一下!
helm安装sonarqube
参照官方文档:
https://docs.sonarqube.org/8.9/setup/sonarqube-on-kubernetes/
helm增加repo仓库
[root@k8s-master-01 helm]# helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube
[root@k8s-master-01 helm]# helm repo update
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/1c57af9e158b4f3e85d8a8991e18bef1.jpg)
文章图片
helm fetch包到本地
[root@k8s-master-01 helm]# helm search repo sonarqube
[root@k8s-master-01 helm]# helm fetch sonarqube/sonarqube-lts
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/cec448023f81431f95246965d14b9dea.jpg)
文章图片
没有办法,墙裂...手动下载ing,rz上次到服务器
解压缩tgz包并修改value.yaml文件
[root@k8s-master-01 helm]# tar zxvf sonarqube-lts-1.0.20+140.tgz
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/79153ec6a45a4ea083d3d9596617ac90.jpg)
文章图片
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/c4637b013f794fab99abcb17c7b3e496.jpg)
文章图片
value.yam就修改了存储storageclass:如下
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/0c36b885cfa64e929db7965d20ef21b2.jpg)
文章图片
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/d47341a56f7c454ca260c950b642a267.jpg)
文章图片
helm install安装sonarqube到kube-ops namespace
[root@k8s-master-01 sonarqube-lts]# helm install sonarqube -f values.yaml. -n kube-ops
【kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用】
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/d6c19c62bff34bc88daed4e96ca80f32.jpg)
文章图片
[root@k8s-master-01 anchore-engine1]# kubectl get svc -n kube-ops
[root@k8s-master-01 anchore-engine1]# kubectl get pods -n kube-ops
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/b784559a72fd43b795ee5a1955c813f4.jpg)
文章图片
ingress对外映射 ingress使用的traefik,详情参照:Kubernetes 1.20.5 安装traefik在腾讯云下的实践
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sonarqube-sonarqube-lts
namespace: kube-ops
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: sonarqube.xxxx.com
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name:sonarqube-sonarqube-lts
port:
number: 9000
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/db86b593b813441597719bff29f94451.jpg)
文章图片
web登陆sonarqube验证 默认用户名密码admin admin(我蒙的),进去修改了密码
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/47c9b4c57c8f4392b97c656f3363ed4f.jpg)
文章图片
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/3aa8011285d442a5a8dc4f6d06e490de.jpg)
文章图片
更改中文语言包(觉得换成中文真心不好,非必要的还是英文吧我觉得!)
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/5211a8548817464bac76af28feefef3a.jpg)
文章图片
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/81ba7cb9a1324e239b95c19e303f2018.jpg)
文章图片
可能会无法从gitlab下载插件 pod log 日志报错如下
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/0d165e7679d5428a850000a29c99d978.jpg)
文章图片
可以手动下载插件kubectl cp插件到pod /opt/sonarqube/extensions/plugins目录中,然后重启服务,重启服务可以在web操作
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/14e280904bd947d5a1f8b52c98ee38d1.jpg)
文章图片
默认语言的扫描插件应该新版本貌似都安装了:
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/2a2260af619a4e5d8037de0f9192bd46.jpg)
文章图片
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/14ab60325f9143ba8f3b092487f0a1f4.jpg)
文章图片
当然了 我的还是试了几次在线安装成功了 直接有了restart server的提示,然后重启server!
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/3b74a2d700424b56ae9c004a703d415f.jpg)
文章图片
重新登陆,成功切换语言为中文
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/1250aca913ad4eaf934586ed41a6c0a4.jpg)
文章图片
jenkins集成sonar 参照:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-jenkins/
创建SonaQube的账户token
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/ee828cb042b14f78a3b83c057b7c71eb.jpg)
文章图片
将token保存到Jenkins凭据中
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/96b5a39b59864a10be94148004c32d0a.jpg)
文章图片
?
在Jenkins中安装插件sonarqube scanner。
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/e2a008be3ac54968af597f7ad1257bd1.jpg)
文章图片
jenkins配置sonarqube服务器 转到"管理Jenkins>系统配置",向下滚动到SonarQube配置部分,单击Add SonarQube,添加服务器,选择凭据。
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/31cf3b711c2944028057bfa16edbedec.jpg)
文章图片
[root@k8s-master-01 anchore-engine1]# kubectl cp sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar sonarqube-sonarqube-lts-0:/opt/sonarqube/lib/extensions/sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar -n kube-ops
Defaulted container "sonarqube-lts" out of: sonarqube-lts, wait-for-db (init), init-sysctl (init), inject-prometheus-exporter (init)
[root@k8s-master-01 anchore-engine1]# kubectl exec -it sonarqube-sonarqube-lts-0 bash -n kube-ops
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Defaulted container "sonarqube-lts" out of: sonarqube-lts, wait-for-db (init), init-sysctl (init), inject-prometheus-exporter (init)
bash-5.0$ cd /opt/sonarqube/lib/extensions/
bash-5.0$ ls
sonar-csharp-plugin-8.22.0.31243.jarsonar-go-plugin-1.8.3.2219.jarsonar-javascript-plugin-7.4.4.15624.jarsonar-ruby-plugin-1.8.3.2219.jar
sonar-css-plugin-1.4.2.2002.jarsonar-html-plugin-3.4.0.2754.jarsonar-kotlin-plugin-1.8.3.2219.jarsonar-scala-plugin-1.8.3.2219.jar
sonar-flex-plugin-2.6.1.2564.jarsonar-jacoco-plugin-1.1.1.1157.jarsonar-php-plugin-3.17.0.7439.jarsonar-vbnet-plugin-8.22.0.31243.jar
sonar-gitlab-plugin-4.1.0-SNAPSHOT.jarsonar-java-plugin-6.15.1.26025.jarsonar-python-plugin-3.4.1.8066.jarsonar-xml-plugin-2.2.0.2973.jar
我的jenkins build节点 我的jenkins是部署在kubernetes集群中的,嗯集群的cri用了containerd....故构建我用了一台单独的服务器安装了docker做build节点使用了jnlp的方式启动一个jar程序包!,嗯主机节点命名是build01。
个人习惯 build(嗯算是soft软件吧)的包都扔到/data/ci/buildtools目录下了,改名也是个人习惯忽略......
[root@k8s-node-06 buildtools]# pwd
/data/ci/buildtools
[root@k8s-node-06 buildtools]# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip
[root@k8s-node-06 buildtools]# unzip sonar-scanner-cli-4.6.2.2472-linux.zip
[root@k8s-node-06 buildtools]#mv sonar-scanner-cli-4.6.2.2472-linux.zip sonar-scanner
修改/etc/profile加入环境
vim /etc/profileexport SONAR_SCANNER_HOME=/data/ci/buildtools/sonar-scanner
export PATH=$SONAR_SCANNER_HOME/bin:$PATHsource /etc/profile
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/1cdf48c862c147a7a5d86d02a6bcd95c.jpg)
文章图片
关于sonar-scanner默认的jdk是11,代码都是java8....有必要修改一下.......
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/f1aa0e79fd114f269721e2caa3bf7e18.jpg)
文章图片
use_embedded_jre=true修改为false
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/6d6fdb8498ab48f889ad9e54c5adf8b0.jpg)
文章图片
注:当然了前提我的服务器server早安装了java8,毕竟jenkins跑起来了早......,参加/etc/profile中java配置
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/58ad9f97046346db8a1dd774190fa312.jpg)
文章图片
sonar pipeline demo 搞一个java的demo gitlab中仓库以及测试代码
登陆https://start.spring.io/ 生成一个jar包:
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/712060a44ff7475998531c5e95ad91ac.jpg)
文章图片
下载到本地上传到自己的gitlab仓库:https://gitlab.xxxx.com/devop...:
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/663dbcd59e984c329ce09c0a579d546b.jpg)
文章图片
额外扔了一个jenkinsfile,当然了 也可以直接jenkins中Pipeline script
def buildTools = ["maven": "/usr/local/maven/",
"sonar" : "/data/ci/buildtools/sonar-scanner/"]pipeline {
agent { label"build01" }
options {
skipDefaultCheckout true
}stages {
stage("GetCode"){
steps{
script{
println("下载代码 --> 分支: ${env.branchName}")
checkout([$class: 'GitSCM', branches: [[name: "${env.branchName}"]],
extensions: [],
userRemoteConfigs: [[credentialsId: 'gitlab-admin-user',
url: "${env.gitHttpURL}"]]])
}
}}stage("Build"){
steps {
script {//sh "/usr/local/maven/bin/mvn clean package"
sh "${buildTools["maven"]}/bin/mvn clean package"
}
}
}
stage("SonarScanForPlugin"){
steps{
script{
withSonarQubeEnv("sonarqube-1"){
def sonarDate = shreturnStdout: true, script: 'date+%Y%m%d%H%M%S'
sonarDate = sonarDate - "\n"sh """
${buildTools["sonar"]}/bin/sonar-scanner \
-Dsonar.projectKey=${JOB_NAME} \
-Dsonar.projectName=${JOB_NAME} \
-Dsonar.projectVersion=${sonarDate} \
-Dsonar.ws.timeout=30 \
-Dsonar.projectDescription="my test project" \
-Dsonar.links.homepage=http://www.baidu.com \
-Dsonar.sources=src \
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.java.binaries=target/classes \
-Dsonar.java.test.binaries=target/test-classes \
-Dsonar.java.surefire.report=target/surefire-reports\#echo \$PATH
"""
}
}
}
}stage("UnitTest"){
steps{
script{
sh "${buildTools["maven"]}/bin/mvn test"}
}
post {
success {
script{
junit 'target/surefire-reports/*.xml'
}
}
}
}}post {
always {
script{
echo "always......"}
}success {
script {
echo "success....."
}
}
}}
关于jenkins job
jenkinsfile中用了参数化构建,先把这两个参数搞上了,另外新点的gitlab中分支都叫main了,不再是master了。也注意一下:
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/56bfd0634a8b41588c1fc9fa7de2c78e.jpg)
文章图片
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/d7ac6cf114e14f13ba27cc46709feb45.jpg)
文章图片
构建任务
构建完成发现一个问题:jenkins配置sonarqube服务器的过程中我写的集群内的内网地址。然后这样sonar的连接点开都无法跳转,所以我将sonarqube的服务器配置最后设置为了公网地址:
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/a98c96ded2f8442cb0dc8d399fd75b1e.jpg)
文章图片
?
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/93096be9c7674c70adfa1c1bda973159.jpg)
文章图片
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/d05ae888c88043cfb1993f8dee12d451.jpg)
文章图片
空白demo没有什么太大看的就先跑通一下。后续再整合看看怎么优化,因为自己的项目也都是聚合项目要看一下怎么去玩一下!
php项目 我其他的项目大部分是php了也扫描一下试试吧!这个仓库比较坑下面有7-8个子项目,我平时做的是参数化构建的。这里就摘出来一个做测试
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/1f919d5e2ee34eabb536fb5b3fc1c490.jpg)
文章图片
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/db56a2f2c6e64773ade7450c46585cf3.jpg)
文章图片
def buildTools = ["maven": "/usr/local/maven/",
"sonar" : "/data/ci/buildtools/sonar-scanner/"]
pipeline {agent { label"build01" }
stages {
stage("GetCode"){
agent { label"build01" }
steps{
script{
println("下载代码 --> 分支: ${env.branchName}")
checkout([$class: 'GitSCM', branches: [[name: "${env.branchName}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'xxxxx',
url: "${env.gitHttpURL}"]]])
}
}
}
stage("SonarScanForPlugin"){
agent { label"build01" }
when {
environment name: 'xxxx', value: 'true'
}
steps{
script{
withSonarQubeEnv("sonarqube-1"){
def sonarDate = shreturnStdout: true, script: 'date+%Y%m%d%H%M%S'
sonarDate = sonarDate - "\n"sh """cd xxxx/html
${buildTools["sonar"]}/bin/sonar-scanner \
-Dsonar.projectKey=${JOB_NAME}-xxxxx \
-Dsonar.projectName=${JOB_NAME}-xxxx \
-Dsonar.projectVersion=${sonarDate} \
-Dsonar.ws.timeout=30 \
-Dsonar.language=php \
-Dsonar.projectDescription="my php project" \
-Dsonar.sources=. \
-Dsonar.sourceEncoding=UTF-8 \#echo \$PATH
"""
}
}
}
}
stage('docker build laya-maker') {
agent { label"build01" }
when {
environment name: 'xxxx', value: 'true'
}
steps {
sh " cd laya-maker&&docker build -t ccr.ccs.tencentyun.com/xxxxx/xxxx:$data ."
withCredentials([usernamePassword(credentialsId: 'xxxxx', passwordVariable: 'dockerPassword', usernameVariable: 'dockerUser')]) {
sh "docker login -u ${dockerUser} -p ${dockerPassword} ccr.ccs.tencentyun.com"
sh "docker push ccr.ccs.tencentyun.com/xxxxx/xxxx:$data"
}
}
}}
}
运行基本就是下面这个样子:
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/6f2124f3b6dd47adba001488a55ad8a4.jpg)
文章图片
有点懵逼哈哈哈。
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/5a53ff2b93f64e12b0622c22d6234f29.jpg)
文章图片
看了一眼漏洞这样的基本都可以忽略。有时间研究一下怎么深入使用!
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/061acf282b9b4cec827e04983fbd38c5.jpg)
文章图片
讲一下比较刺激的 扫了一下线上java仓库的代码,小伙伴都不加method = {RequestMethod.GET, RequestMethod.POST})这样的?,前段时间无聊看别人写的java代码 安全性来说 这不是规范吗......请原谅一下我们这些野生的.....看不下去了.......
![kubernetes|kubernetes 基于jenkins spinnaker的ci/cd实践二-sonarqube安装与简单使用](https://img.it610.com/image/info9/d42e22502ed549cfb9d1ce81a2ef6ee4.jpg)
文章图片
总结: 本文着重于安装以及配置。实战要深入研究一下,也希望小伙伴能分享一下更多实战的例子让我学习一下......
?
推荐阅读
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 基于|基于 antd 风格的 element-table + pagination 的二次封装
- 基于爱,才会有“愿望”当“要求”。2017.8.12
- federation--kubernetes集群联邦的实现
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- 韵达基于云原生的业务中台建设 | 实战派
- EasyOA|EasyOA 基于SSM的实现 未完成总结与自我批判
- 基于stm32智能风扇|基于stm32智能风扇_一款基于STM32的智能灭火机器人设计
- stm32|基于STM32和freeRTOS智能门锁设计方案