SonarQube-指定sonar.properties的位置

时间:2018-07-06 09:51:01

标签: sonarqube

我正在尝试使用configMaps在Kubernetes上部署SonarQube。

我使用的最新的7.1 image$SONARQUBE_HOME/conf/中嵌入的sonar.properties中有一个配置。该目录不为空,并且还包含wrapper.conf文件。

我想将configMap挂载到容器中的/ opt / sonar / conf /之外的其他位置,并指定sonarQube新路径以读取属性。

有没有办法做到这一点? (环境变量?JVM参数?...)

2 个答案:

答案 0 :(得分:1)

不建议以任何方式修改此标准配置。但是我们可以看一下SonarQube源代码。在this文件中,您可以找到以下代码以读取配置文件:

private static Properties loadPropertiesFile(File homeDir) {
    Properties p = new Properties();
    File propsFile = new File(homeDir, "conf/sonar.properties");
    if (propsFile.exists()) {
      ...
    } else {
      LoggerFactory.getLogger(AppSettingsLoaderImpl.class).warn("Configuration file not found: {}", propsFile);
    }
    return p;
}

因此,conf-path和文件名是硬编码的,如果文件不存在,则会收到警告。可以通过以下方式找到主目录:

private static File detectHomeDir() {
  try {
    File appJar = new File(Class.forName("org.sonar.application.App").getProtectionDomain().getCodeSource().getLocation().toURI());
    return appJar.getParentFile().getParentFile();
  } catch (...) {
     ...
}

因此,这也不能更改。上面的代码在这里使用:

@Override
public AppSettings load() {
    Properties p = loadPropertiesFile(homeDir);
    p.putAll(CommandLineParser.parseArguments(cliArguments));
    p.setProperty(PATH_HOME.getKey(), homeDir.getAbsolutePath());
    p = ConfigurationUtils.interpolateVariables(p, System.getenv());
    ....
}

这建议您可以使用命令行参数或环境变量来更改设置。

答案 1 :(得分:0)

对于我的问题,我定义了环境变量以在Kubernetes部署中配置数据库设置:

      env:
      - name: SONARQUBE_JDBC_URL
        value: jdbc:sqlserver://mydb:1433;databaseName=sonarqube
      - name: SONARQUBE_JDBC_USERNAME
        value: sonarqube
      - name: SONARQUBE_JDBC_PASSWORD
        valueFrom:
          secretKeyRef:
            name: sonarsecret
            key: dbpassword

我还需要使用ldap插件,但是在这种情况下无法配置环境变量。由于/opt/sonarqube/conf/不为空,因此无法使用configMap将配置与图像内容分离。因此,我在sonar.properties中添加ldap jar插件和ldap设置来构建自己的声纳图像:

# General Configuration
sonar.security.realm=LDAP
ldap.url=ldap://myldap:389
ldap.bindDn=CN=mysa=_ServicesAccounts,OU=Users,OU=SVC,DC=net
ldap.bindPassword=****

# User Configuration
ldap.user.baseDn=OU=Users,OU=SVC,DC=net
ldap.user.request=(&(sAMAccountName={0})(objectclass=user))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

# Group Configuration
ldap.group.baseDn=OU=Users,OU=SVC,DC=net
ldap.group.request=(&(objectClass=group)(member={dn}))