之前有寫過一篇如何在kubernetes上部署SonarQube的文檔,
然后由於客戶的需求,需要SonarQube關聯LDAP的用戶,
於是今天花了半天時間研究了以下如何在原有的基礎上安裝LDAP插件。
首先如果不知道如何在kubernetes上部署SonarQube的童鞋可以先看一下這篇文檔:
SonarQube install on Kubernetes
看看傳統的方式怎么做:
- 首先安裝LDAP
參照:...暫無參照,日后會出一篇關於LDAP的安裝微博
安裝完成后賬號信息如下:
服務器IP:192.168.1.147:389
DN: cn=admin,dc=daocloud,dc=io
Password: password
- SonarQube
SonarQube需要安裝LDAP插件:

LDAP插件官方手冊:https://docs.sonarqube.org/display/PLUG/LDAP+Plugin
- SonarQube配置
配置文件 sonarqube/conf/sonar.properties
# LDAP configuration
# General Configuration
sonar.security.realm=LDAP
ldap.url=ldap://192.168.1.147:389
ldap.bindDn=cn=admin,dc=daocloud,dc=io
ldap.bindPassword=password
# User Configuration
ldap.user.baseDn=ou=People,dc=daocloud,dc=io
ldap.user.request=(&(objectClass=posixAccount)(uid={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
# Group Configuration
ldap.group.baseDn=ou=Group,dc=daocloud,dc=io
ldap.group.request=(&(objectClass=posixGroup)(memberUid={uid}))
- 重啟服務
sonarqube/bin/[OS]/sonar.sh restart
- 查看啟用插件輸出日志
日志文件:sonarqube/logs/sonar.log
2018.07.05 07:12:22 INFO web[][org.sonar.INFO] Security realm: LDAP
2018.07.05 07:12:22 INFO web[][o.s.p.l.LdapSettingsManager] User mapping: LdapUserMapping{baseDn=ou=People,dc=daocloud,dc=io, request=(&(objectClass=posixAccount)(uid={0})), realNameAttribute=cn, emailAttribute=mail}
2018.07.05 07:12:22 INFO web[][o.s.p.l.LdapSettingsManager] Group mapping: LdapGroupMapping{baseDn=ou=Group,dc=daocloud,dc=io, idAttribute=cn, requiredUserAttributes=[uid], request=(&(objectClass=posixGroup)(memberUid={0}))}
2018.07.05 07:12:22 INFO web[][o.s.p.l.LdapContextFactory] Test LDAP connection on ldap://192.168.1.147:389: OK
容器化部署
現來看看難點:
- 插件安裝容器重啟后會丟失;
- 配置文件修改同樣會遇到這樣的問題;
當然接下來的做法只是我個人的解決思路,僅供參考。
如果后續有更好的辦法會更新這篇微博,如果大家有更好的辦法也可以在博客下留言。
- Dockerfile
mkdir /opt/sonarqube cd /opt/sonarqube vim Dockerfile
首先基於openjdk:8-alpine的鏡像,制作屬於我們自己的SonarQube7.1的docker鏡像:
FROM openjdk:8-alpine
ENV SONAR_VERSION=7.1 \
SONARQUBE_HOME=/opt/sonarqube \
# Database configuration
# Defaults to using H2
SONARQUBE_JDBC_USERNAME=sonar \
SONARQUBE_JDBC_PASSWORD=sonar \
SONARQUBE_JDBC_URL=
# Http port
EXPOSE 9000
RUN addgroup -S sonarqube && adduser -S -G sonarqube sonarqube
RUN set -x \
&& apk add --no-cache gnupg unzip \
&& apk add --no-cache libressl wget \
&& apk add --no-cache su-exec \
&& apk add --no-cache bash \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys F1182E81C792928921DBCAB4CFCA4A29D26468DE \
&& mkdir /opt \
&& cd /opt \
&& wget -O sonarqube.zip --no-verbose https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-$SONAR_VERSION.zip \
&& wget -O sonarqube.zip.asc --no-verbose https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-$SONAR_VERSION.zip.asc \
&& gpg --batch --verify sonarqube.zip.asc sonarqube.zip \
&& unzip sonarqube.zip \
&& mv sonarqube-$SONAR_VERSION sonarqube \
&& rm sonarqube.zip* \
&& rm -rf $SONARQUBE_HOME/extensions/plugins/* \
&& rm -rf $SONARQUBE_HOME/bin/*
ADD plugins/ $SONARQUBE_HOME/extensions/plugins/
ADD sonar.properties $SONARQUBE_HOME/conf/
RUN chown -R sonarqube:sonarqube $SONARQUBE_HOME
VOLUME "$SONARQUBE_HOME/data"
WORKDIR $SONARQUBE_HOME
COPY run.sh $SONARQUBE_HOME/bin/
RUN chmod +x $SONARQUBE_HOME/bin/run.sh
ENTRYPOINT ["./bin/run.sh"]
- run.sh
vim run.sh
#!/bin/bash
set -e
if [ "${1:0:1}" != '-' ]; then
exec "$@"
fi
chown -R sonarqube:sonarqube $SONARQUBE_HOME
exec su-exec sonarqube \
java -jar lib/sonar-application-$SONAR_VERSION.jar \
-Dsonar.log.console=true \
-Dsonar.jdbc.username="$SONARQUBE_JDBC_USERNAME" \
-Dsonar.jdbc.password="$SONARQUBE_JDBC_PASSWORD" \
-Dsonar.jdbc.url="$SONARQUBE_JDBC_URL" \
-Dsonar.web.javaAdditionalOpts="$SONARQUBE_WEB_JVM_OPTS -Djava.security.egd=file:/dev/./urandom" \
"$@"
- sonar.properties
創建一個sonar.properties的配置文件,這里只貼出LDAP配置這一段
# LDAP configuration
# General Configuration
sonar.security.realm=LDAP
ldap.url=ldap://192.168.1.147:389
ldap.bindDn=cn=admin,dc=daocloud,dc=io
ldap.bindPassword=password
# User Configuration
ldap.user.baseDn=ou=People,dc=daocloud,dc=io
ldap.user.request=(&(objectClass=posixAccount)(uid={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
# Group Configuration
ldap.group.baseDn=ou=Group,dc=daocloud,dc=io
ldap.group.request=(&(objectClass=posixGroup)(memberUid={uid}))
- plugins
創建一個plugins的目錄將所有需要的插件都放在這個目錄下
mkdir plugins
在這里列出我所安裝的插件列表:

ok!最后是docker build的過程,最后把鏡像push到你的鏡像倉庫。
結合這篇blog:SonarQube install on Kubernetes
把里面的sonarqube的image替換成你新制作出來的鏡像查看效果。
