之前有写过一篇如何在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. Nginx的基本理论

    Nginx是什么? 1).Nginx 就是一台反向代理服务器,代理服务器一般是指局域网内部的机器通过代理服务发送请求到互联网上的服务器,代理服务器一般作用于客户端.比如GoAgent,FQ神器. 一个 ...

  2. php 获取指定月份的开始结束时间

    /** * * 获取指定年月的开始和结束时间戳 * * @param int $y 年份 * @param int $m 月份 * @return array(开始时间,结束时间) */ functi ...

  3. CodeForces 734F Anton and School

    位运算. 两个数的和:$A+B=(AandB)+(AorB)$,那么$b[i]+c[i]=n*a[i]+suma$.可以解出一组解,然后再按位统计贡献验证一下. #pragma comment(lin ...

  4. 【SQL】ORACLE在sqlplus中使用spool方式生成建表语句

    在实际生产中有时我们需要将一张表的数据导入到另外一张表,如果有PLSQL,我们可以通过PLSQL工具将数据导出为sql脚本,然后再在另外一个数据库中执行这个脚本.但有时在实际生产中我们没有PLSQL这 ...

  5. 0818JavaWeb基础

    Java Web基础 JSP JSP --- Java Server Page        在服务器上运行的页面 动态网页(JSP网页)        与后台有数据交换的网页             ...

  6. 【C语言期末实训】学生学籍管理系统

    目录: 一,设计要求 ,总体要求: ,具体功能: 二,设计框架 三,程序代码 ,声明函数和头文件 ,声明结构体 ,声明全局变量 ,主体启动函数 ,主菜单函数 ,创建学生档案函数 ,编辑学生档案函数 , ...

  7. SGU167 I-country

    嗯以前在某个DP专题了发过这道题,但是当时没码代码,现在重发一篇题解 思考阶段如何划分:由已经处理的行数向下扩展,但是仅有行数我们无法描述状态空间那我们再加入已经选过的格子数,这样我们似乎可以确定我们 ...

  8. Flask实战第61天:帖子板块过滤显示

    先在显示的帖子是所有版块的帖子,这节我们来完成点击某个版块,则显示此版块的帖子 要完成这个功能,我们需要在前端传递板块的id到后台, 编辑front_index.html 编辑首页视图 编辑板块选中样 ...

  9. Java中的对象池技术

    java中的对象池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复重复创建相等变量时节省了很多时间.对象池其实也就是一个内存 ...

  10. [BZOJ4033][HAOI2015]树上染色(树形DP)

    4033: [HAOI2015]树上染色 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2437  Solved: 1034[Submit][Stat ...