kubernetes 部署SonarQube 7.1 关联LDAP
之前有写过一篇如何在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替换成你新制作出来的镜像查看效果。