安装postgres和sonarqube
创建postgres
docker pull postgres:11.4
mkdir -p /data/sonar/postgresql
postgres.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-sonar
labels:
app: postgres-sonar
spec:
replicas: 1
selector:
matchLabels:
app: postgres-sonar
template:
metadata:
labels:
app: postgres-sonar
spec:
nodeSelector:
kubernetes.io/hostname: 192.168.11.18
containers:
- name: postgres-sonar
image: postgres:11.4
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5432
env:
- name: POSTGRES_DB
value: sonardb
- name: POSTGRES_USER
value: sonar
- name: POSTGRES_PASSWORD
value: sonar
resources:
limits:
cpu: 1000m
memory: 1024Mi
requests:
cpu: 256m
memory: 512Mi
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumes:
- name: data
hostPath:
path: /data/sonar/postgresql
---
apiVersion: v1
kind: Service
metadata:
name: postgres-sonar
labels:
app: postgres-sonar
spec:
clusterIP: None
ports:
- port: 5432
protocol: TCP
targetPort: 5432
selector:
app: postgres-sonar
create
# kubectl create -f postgres.yml
# kubectl exec -it pod-name bash
root@****:/# psql --username=sonar --dbname=sonardb
创建sonarqube
docker pull sonarqube:lts
mkdir -p /data/sonar/sonarqube
# 重要到一下午都是因为 sonarqube的用户是sonarqube,uid=999
chmod -R 777 /data/sonar/sonarqube
sonar.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sonarqube
labels:
app: sonarqube
spec:
replicas: 1
selector:
matchLabels:
app: sonarqube
template:
metadata:
labels:
app: sonarqube
spec:
nodeSelector:
kubernetes.io/hostname: 192.168.11.18
initContainers:
- name: init-sysctl
image: busybox
imagePullPolicy: IfNotPresent
command: ["sysctl", "-w", "vm.max_map_count=262144"]
securityContext:
privileged: true
containers:
- name: sonarqube
image: sonarqube:lts
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
securityContext:
privileged: true
env:
- name: SONARQUBE_JDBC_USERNAME
value: "sonar"
- name: SONARQUBE_JDBC_PASSWORD
value: "sonar"
- name: SONARQUBE_JDBC_URL
value: "jdbc:postgresql://postgres-sonar:5432/sonardb"
volumeMounts:
- mountPath: /opt/sonarqube/data
name: data
subPath: data
- mountPath: /opt/sonarqube/extensions
name: data
subPath: extensions
- mountPath: /opt/sonarqube/logs
name: data
subPath: logs
volumes:
- name: data
hostPath:
path: /data/sonar/sonarqube
---
apiVersion: v1
kind: Service
metadata:
name: sonarqube
labels:
app: sonarqube
spec:
type: NodePort
ports:
- name: sonarqube
port: 9000
targetPort: 9000
nodePort: 30003
protocol: TCP
selector:
app: sonarqube
create
# kubectl create -f sonar.yml
# kubectl logs -f pod-name
登录
密码 admin/admin
安装jenkins
jenkinsci/blueocean latest d58c233718a1 5 months ago 562MB
docker run -u root \
-d \
-p 9999:8080 \
-p 50000:50000 \
-v /data/jenkins/jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/java/maven:/usr/java/maven \
-v /etc/localtime:/etc/localtime:ro \
--name jenkins jenkinsci/blueocean
# 密码在 /var/jenkins_home/secrets/initialAdminPassword
# 登录之后,把下载的插件放到/var/jenkins_home/plugins中,重启服务就可以了,但是不要把.hpi文件删除,好像如果删除了重启服务,并不会加载刚刚加入的插件。
使用
安装对应版本的插件
sonarqube插件 https://www.sonarplugins.com/java
安装好了sonarqube之后,其实里面啥都没有,需要安装插件
SonarQube™ technology is powered by SonarSource SA
Community Edition版本 7.9.5 (build 38598)LGPL v3社区文档获取支持插件Web接口关于
没有安装的话,也必须安装。否则会报错。没有安装语言会报错Language没安装,插件安装失败还会提示一大堆类不能加载。这个不能加载类的问题用了我好久时间,最后还是在英文网站看到的解决方案。于是感觉国内的网站除了少数的好,其他的都是垃圾吧。
插件版本不对报错信息如下:
[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:
3.7.0.1746:sonar (default-cli) on project shqhportal: Unable to load component c
lass org.sonar.scanner.scan.filesystem.ProjectFileIndexer: Unable to load compon
ent class org.sonar.scanner.scan.filesystem.FileIndexer: Unable to load componen
t class org.sonarsource.dotnet.shared.plugins.WrongEncodingFileFilter: org.sonar
source.dotnet.shared.plugins.WrongEncodingFileFilter has unsatisfied dependency
'class org.sonarsource.dotnet.shared.plugins.AbstractConfiguration' for construc
tor 'public org.sonarsource.dotnet.shared.plugins.WrongEncodingFileFilter(org.so
narsource.dotnet.shared.plugins.EncodingPerFile,org.sonarsource.dotnet.shared.pl
ugins.AbstractConfiguration)' from org.sonar.core.platform.ComponentContainer$Ex
tendedDefaultPicoContainer@6a0094c9:271<[Immutable]:org.sonar.core.platform.Comp
onentContainer$ExtendedDefaultPicoContainer@69909c14:45<| -> [Help 1]
下载后把插件放在extensions/plugins目录下,没有plugins目录就新建一下。
重启sonarqube就可以了。
检测
在自己的开发机器的maven的settings.xml文件中加入
<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>*****</username>
<password>*****</password>
<host>******</host>
<port>***</port>
<nonProxyHosts>192.168.***.***|192.168.11.18</nonProxyHosts>
</proxy>
</proxies>
<pluginGroups>
<pluginGroup>org.codehaus.cargo</pluginGroup>
<!--sonar配置-->
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- <sonar.jdbc.url>jdbc:postgresql://192.168.11.18:5432/sonardb</sonar.jdbc.url>
<sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>sonar</sonar.jdbc.password>
SERVER ON A REMOTE HOST -->
<sonar.login>admin</sonar.login>
<sonar.password>admin</sonar.password>
<sonar.host.url>http://192.168.11.18:30003</sonar.host.url>
</properties>
</profile>
......
sonar:sonar
/# mvn clean compile sonar:sonar -Dsonar.java.binaries=target/classes
....
[INFO] Analysis total time: 1:03.805 s
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:17 min
[INFO] Finished at: 2020-12-23T13:08:30+08:00
[INFO] Final Memory: 66M/769M
[INFO] ------------------------------------------------------------------------
采坑
- post的yml文件密码账户不用带有“”双引号
- sonar的hostPath目录权限开通 chmod -R 777
- sonarqube安装的插件版本要对应
mvn clean compile sonar:sonar -Dsonar.java.binaries=target/classes
都要有。多个calass目录怎么办?