之前有写过一篇如何在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. oracle 11g安装教程

    oracle 11g安装教程 第1步 第2步 第3步 第4步 第5步 第6步 第7步 第8步 第9步 第10步 第11步 第12步 第13步 第14步 第15步 第16步 第17步 第18步 第19步 ...

  2. CodeForces 740A Alyona and copybooks

    完全背包. 直接做个背包容量为$100000$的完全背包,这样就可以避免繁琐的分类讨论了. #pragma comment(linker, "/STACK:1024000000,102400 ...

  3. ExtJs之列表常用CRUD

    前端代码: Ext.onReady(function(){ Ext.define('Person', { extend: 'Ext.data.Model', fields: [{name: 'id', ...

  4. Xamarin XAML语言教程模板视图TemplatedView(一)

    Xamarin XAML语言教程模板视图TemplatedView(一) 模板视图TemplatedView 与模板页面相对的是TemplatedView,它被称为模板视图,它的功能和模板页面类似,也 ...

  5. 【BZOJ 4513】【SDOI 2016】储能表

    http://www.lydsy.com/JudgeOnline/problem.php?id=4513 设\(f(i,0/1,0/1,0/1)\)和\(g(i,0/1,0/1,0/1)\)分别表示d ...

  6. BZOJ 3450 Tyvj1952 Easy(期望)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3450 [题目大意] 给出一个字符串,包含o,x和?,一个字符串的得分为 每段连续的o的 ...

  7. Problem H: 零起点学算法103——查找最大元素

    #include<stdio.h> #include<string.h> int main() { ]; while(gets(a)!=NULL) { ]; ;a[i]!='\ ...

  8. Tikhonov regularization和岭回归

    就实现过程来讲,两者是一样的,都是最小二乘法的改进,对于病态矩阵的正则化,只不过分析的角度不一样,前者是解决机器学习中过拟合问题,机器学习一般是监督学习,是从学习角度来说的,后者是数学家搞的,是为了解 ...

  9. 使用webclient上传下载实例

    转载:http://blog.csdn.net/kevonz/article/details/5078432 using System; using System.Collections.Generi ...

  10. TabControl控件和TabPage

    TabControl控件和TabPageTabControl控件可以支持在一个控件里面放置多个选项卡,每个选项卡又可以放置多个控件 由于在控件属性窗口添加选项卡相对比较容易,下面说一下动态创建选项卡 ...