这篇文章概述了我们如何使用Docker和Saltslack作为Docker容器配置管理将SonarQube集成到我们的工作流程中。
它还包含与Travis-CI中的Gradle一起使用的设置,以便在Github上执行代码分析和Pull请求分析。
此外,如果您发现此设置有任何改进,请发表评论!
(如果使用Docker Compose,请参阅https://github.com/SonarSource/docker-sonarqube。请随时在此处维护此答案或将其复制到SCM。)
需要Docker Engine 1.9
答案 0 :(得分:0)
使用Salt设置SonarQube服务器
创建适用于SonarQube服务器的此支柱文件:
sonar-qube:
name: sonar-qube
port: 9000
version: <ENTER SOME VERSION>
version_postgresql: <ENTER SOME VERSION>
# Using a shared disk allows you to move the SonarQube container between different servers and still keep the data.
host_storage_path: /some/shared/disk
将此sonarqube.sls
创建为Docker State文件。
(它要求您在名为sonarnet-config的配置中配置名为sonarnet的网络)
{% set name = salt['pillar.get']('sonar-qube:name') %}
{% set port = salt['pillar.get']('sonar-qube:port') %}
{% set tag = salt['pillar.get']('sonar-qube:version') %}
{% set pg_tag = salt['pillar.get']('sonar-qube:version_postgresql') %}
{% set host_storage_path = salt['pillar.get']('sonar-qube:host_storage_path') %}
include:
- <state file of the sonarnet-config network definition>
sonar-qube-image:
dockerng.image_present:
- name: sonarqube:{{tag}}
sonar-qube:
dockerng.running:
- name: {{name}}
- image: sonarqube:{{tag}}
- network_mode: sonarnet
- port_bindings:
- {{port}}:{{port}}
- environment:
- SONARQUBE_JDBC_URL: jdbc:postgresql://sonar-db:5432/sonar
- binds:
- {{host_storage_path}}/sonarqube/conf:/opt/sonarqube/conf
- {{host_storage_path}}/sonarqube/data:/opt/sonarqube/data
- {{host_storage_path}}/sonarqube/extensions:/opt/sonarqube/extensions
- {{host_storage_path}}/sonarqube/lib/bundled-plugins:/opt/sonarqube/lib/bundled-plugins
- require:
- dockerng: sonarnet-config
sonar-db:
dockerng.running:
- image: postgres:{{pg_tag}}
- network_mode: sonarnet
- port_bindings:
- 5432:5432
- environment:
- POSTGRES_USER: sonar
- POSTGRES_PASSWORD: sonar
- binds:
- {{host_storage_path}}/postgresql:/var/lib/postgresql
# This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52
- {{host_storage_path}}/postgresql/data:/var/lib/postgresql/data
- require:
- dockerng: sonarnet-config
使用常规盐来启动容器。
启动SonarQube服务器后,您应该可以访问SonarQube的网页gui。
执行自动分析(使用Travis CI中的Gradle)
这些bullests将逐一描述
1)启用Gradle插件
根据https://plugins.gradle.org/plugin/org.sonarqube
上的文档启用该插件plugins {
id "org.sonarqube" version "2.0.1"
}
2)在Github和Sonar中设置用户
Github要求用户具有写访问权限(很快只能读取访问权限?)到repo。为团队创建一个sonar-ci用户,并为团队的repo提供写入权限。请参阅此帖子:https://github.com/janinko/ghprb/issues/232#issuecomment-149649126然后为该用户创建访问令牌,访问令牌必须授予“完全控制私有存储库”。
Sonar要求拥有“全局权限”下“执行分析”和“创建项目”权限的用户。它还需要“项目权限”下的“浏览”,“查看源代码”和“执行分析”权限。为该用户生成访问令牌。
3)编写bash脚本
此脚本将进行完整分析,并在合并到git分支master
时在SonarQube Web GUI上发布结果。这可以跟踪代码随时间的变化。它还将分析github
中的拉取请求,并将其结果直接写为评论评论。
需要设置这些env变量:
TRAVIS_*
- 由特拉维斯设定:见https://docs.travis-ci.com/user/environment-variables/
SONAR_TOKEN
是声纳服务器的访问令牌
GITHUB_SONAR_TOKEN
是Github上声纳alaysis用户的访问令牌
sonarqube.sh:
SONAR_URL="https://sonar.example.com"
if [ -z "$SONAR_TOKEN" ] || [ -z "$GITHUB_SONAR_TOKEN" ]; then
echo "Missing environemnt variable(s) for SonarQube. Make sure all environment variables are set."
exit 1
fi
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
echo "Running SonarQube analysis for pull request nr $TRAVIS_PULL_REQUEST..."
./gradlew sonarqube \
-Dsonar.host.url=$SONAR_URL \
-Dsonar.login=$SONAR_TOKEN \
-Dsonar.github.pullRequest=$TRAVIS_PULL_REQUEST \
-Dsonar.github.repository=$TRAVIS_REPO_SLUG \
-Dsonar.github.oauth=$GITHUB_SONAR_TOKEN \
-Dsonar.analysis.mode=issues
elif [ "$TRAVIS_BRANCH" == "master" ]; then
echo "Starting publish SonarQube analyzis results to $SONAR_URL"
./gradlew sonarqube \
-Dsonar.host.url=$SONAR_URL \
-Dsonar.login=$SONAR_TOKEN \
-Dsonar.analysis.mode=publish
fi
4)从Travis CI整合
在.travis.yml
添加:
after_success:
- ./sonarqube.sh
before_cache:
- rm -rf $HOME/.gradle/caches/*/gradle-sonarqube-plugin
cache:
directories:
- $HOME/.sonar