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

容器化部署

现来看看难点:

  1. 插件安装容器重启后会丢失;
  2. 配置文件修改同样会遇到这样的问题;

当然接下来的做法只是我个人的解决思路,仅供参考。

如果后续有更好的办法会更新这篇微博,如果大家有更好的办法也可以在博客下留言。

  • 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替换成你新制作出来的镜像查看效果。

posted @ 2018-07-05 20:56  Bourbon.Tian  阅读(1281)  评论(0编辑  收藏