gpt4 book ai didi

github - 如何使用 Saltslack 通过 Docker 设置 SonarQube,以及如何从 CI 中使用它

转载 作者:行者123 更新时间:2023-12-03 06:06:59 25 4
gpt4 key购买 nike

这篇文章继续介绍我们如何使用 Docker 和 Saltslack 作为 Docker 容器配置管理将 SonarQube 集成到我们的工作流程中。

它还包含在 Travis-CI 中与 Gradle 一起使用的设置,以便在 Github 上执行代码分析和拉取请求分析。

此外,如果您发现此设置有任何改进,请发表评论!

(如果使用 Docker Compose,请参阅 https://github.com/SonarSource/docker-sonarqube。请随时在此处维护此答案或将其复制到 SCM。)

需要 Docker 引擎 1.9

最佳答案

使用 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 状态文件。

(它要求您在名为 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

使用普通 salt 来启动容器。

启动此 SonarQube 服务器后,您应该能够访问 SonarQube 的 Web gui。

执行自动化分析(使用 Travis CI 中的 Gradle)

这些大牛将一一介绍
  • 启用 Gradle 插件
  • 在 SonarQube 和 Github
  • 创建用户
  • 编写执行分析的 bash 脚本
  • 从 Travis CI 调用 bash 脚本。

  • 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然后为该用户创建访问 token ,访问 token 必须授予“对私有(private)存储库的完全控制权”。

    Sonar 需要具有全局权限下“执行分析”和“创建项目”权限的用户。它还需要项目权限下的“浏览”、“查看源代码”和“执行分析”的权限。为此用户生成访问 token 。

    3) 编写bash脚本

    此脚本将在合并到 git 分支 master 时进行全面分析并在 SonarQube Web GUI 上发布结果.这可以跟踪代码随时间的演变。它还将分析 github 中的拉取请求并将其发现直接写为审查意见。

    需要设置这些环境变量:
    TRAVIS_* - 由 Travis 设置:见 https://docs.travis-ci.com/user/environment-variables/
    SONAR_TOKEN是 Sonar 服务器的访问 token
    GITHUB_SONAR_TOKEN是 Github 上 sonar alaysis 用户的访问 token

    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

    关于github - 如何使用 Saltslack 通过 Docker 设置 SonarQube,以及如何从 CI 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38050783/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com