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

kubernetes 部署SonarQube 7.1 关联LDAP的更多相关文章

  1. 在k8s集群部署SonarQube

    目录 1.2.存储环境 1.3.sonarqube版本 2.部署sonarqube 2.1.部署PostgreSQL 2.2.部署SonarQube 2.3.访问检查 SonarQube 是一款用于代 ...

  2. [系统集成] 基于Kubernetes 部署 jenkins 并动态分配资源

    基于kubernetes 部署 jenkins master 比较简单,难点是为 jenkins 动态分配资源.基于kubernetes 为 jenkins 动态分配资源需要实现下述功能: 资源分配: ...

  3. kubernetes 部署

    kubernetes 部署(Centos 7) 一个或者多个兼容 deb 或者 rpm 软件包的操作系统,比如 Ubuntu 或者 CentOS 每台机器 2 GB 以上的内存,内存不足时应用会受限制 ...

  4. nuclio kubernetes 部署

    一张参考架构图: 从图中可以看到nuclio可以运行到docker 以及kubernetes中 提供了kubernetes 部署的脚本 安装 创建命名空间 kubectl create namespa ...

  5. Kubernetes 部署失败的 10 个最普遍原因

    [原文].后面我们可能还会看到一个 OOMKilled 错误. 我们的应用正在挂掉?为什么? 首先我们查看应用日志.假定你发送应用日志到 stdout(事实上你也应该这么做),你可以使用 kubect ...

  6. jenkins+svn+pipeline+kubernetes部署java应用(三)

    将jar包.Dockerfile.kubernetes部署yaml文件上传至svn自定义目录 一.生成流水线脚本 二.配置jenkins pipeline构建语句 三.点击构建java工程

  7. kubernetes部署高可用Harbor

    前言 本文Harbor高可用依照Harbor官网部署,主要思路如下,大家可以根据具体情况选择搭建. 部署Postgresql高可用集群.(本文选用Stolon进行管理,请查看文章<kuberne ...

  8. kubernetes部署jenkins(Docker in Docker)及认证

    引言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. 本文将Jenkins的master与slave置于Pod中,部署在namespace:jenk ...

  9. Kubernetes 部署Web UI (Dashboard)

    Kubernetes 部署Web UI (Dashboard) 项目下载地址:https://github.com/kubernetes/kubernetes/tree/master/cluster/ ...

随机推荐

  1. cocos-js Http方式网络请求

    (转http://blog.csdn.net/sinat_28338727/article/details/52804167) 网络结构 网络结构是网络的构建方式,目前流行的有客户端服务器结构网络和点 ...

  2. Codeforces 1131 B. Draw!-暴力 (Codeforces Round #541 (Div. 2))

    B. Draw! time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  3. python基础day4

    1.列表生成式,迭代器&生成器 列表生成式 将列表[0,1,2,3,4,5,6,7,8]中的每个值加1,如何实现?常用的几种方法 方法一: a=[0,1,2,3,4,5,6,7,8] for ...

  4. Java浮点类型的格式化

    概述 基于Java,介绍将浮点类型小数进行格式化的方案. 正文 在Java中,用于格式化小数的类是java.text.DecimalFormat,比如你可以这样使用: double data = 33 ...

  5. 【tomcat】tomcat远程调试

    修改tomcat bin目录下的catalina.sh,增加下面这行: CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=9 ...

  6. apache配置httpd.conf相关

    1.apache开启压缩AddOutputFilterByType 找到并打开apache/conf目录中的httpd.conf文件 在httpd.conf中打开deflate_Module,head ...

  7. bzoj 3540: [Usaco2014 Open]Fair Photography

    3540: [Usaco2014 Open]Fair Photography Description FJ's N cows (2 <= N <= 100,000) are standin ...

  8. 一个简单的Spring程序

    首先,要用Eclipse开发Spring程序,需要安装Spring插件并重启Eclipse 具体操作: 新建java Project后,导入需要使用的包(提前下好Spring),Spring包包含6个 ...

  9. redis源码解析之内存管理

    zmalloc.h的内容如下: void *zmalloc(size_t size); void *zcalloc(size_t size); void *zrealloc(void *ptr, si ...

  10. 测试 markdown

    PHP 标量类型与返回值类型声明 标量类型声明 默认情况下,所有的PHP文件都处于弱类型校验模式. PHP 7 增加了标量类型声明的特性,标量类型声明有两种模式: 强制模式 (默认) 严格模式 标量类 ...