gpt4 book ai didi

docker - 使用 gitlab ci 运行 sonarqube 扫描仪

转载 作者:IT老高 更新时间:2023-10-28 21:41:32 25 4
gpt4 key购买 nike

我正在尝试使用以下堆栈(仅相关堆栈)为 .NET 应用程序构建 CI 环境:

  • Debian + 单声道
  • docker
  • Gitlab CI
  • Gitlab-multi-runner(作为 docker 容器)
  • Sonarqube + Postgre

我使用 docker-compose 为 sonarqube 和 postgre 创建容器,它们都在运行和工作。遗憾的是,我一直坚持为 gitlab 运行程序执行的构建执行 sonarqube 分析,我发现的所有示例都是使用 Maven。我也尝试过使用 Sonar 扫描仪,到目前为止没有运气。

这是我的 gitlab-ci.yml 的内容:

image: mono:latest

cache:
paths:
- ./src/T_GitLabCi/packages/

stages:
- build

.shared: &restriction
only:
- master
tags:
- docker

build:
<<: *restriction
stage: build
script:
- nuget restore ./src/T_GitLabCi
- MONO_IOMAP=case xbuild /t:Build /p:Configuration="Release" /p:Platform="Any CPU" ./src/T_GitLabCi/T_GitLabCi.sln
- mono ./tools/NUnitConsoleRunner/nunit3-console.exe ./src/T_GitLabCi/T_GitLabCi.sln --work=./src/T_GitLabCi/test --config=Release
- << EXECUTE SONAR ANALYSIS >>

我肯定在这里遗漏了一些东西。有人能指出正确的方向吗?

最佳答案

我有用 PHP 编写的项目,但这没关系。这就是我所做的。

  1. 我启用了托管在我的 GitLab 安装上的私有(private)注册表
  2. 在这个注册表中,我有一个从这个 Dockerfile 构建的“Sonar 扫描仪”图像(它基于 Docker hub 上可用的图像之一):

    FROM java:alpine  
    ENV SONAR_SCANNER_VERSION 2.8

    RUN apk add --no-cache wget && \
    wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-${SONAR_SCANNER_VERSION}.zip && \
    unzip sonar-scanner-${SONAR_SCANNER_VERSION} && \
    cd /usr/bin && ln -s /sonar-scanner-${SONAR_SCANNER_VERSION}/bin/sonar-scanner sonar-scanner && \
    apk del wget

    COPY files/sonar-scanner-run.sh /usr/bin

这是 files/sonar-scanner-run.sh 文件:

#!/bin/sh

URL="<YOUR SONARQUBE URL>"
USER="<SONARQUBE USER THAT CAN ACCESS THE PROJECTS>"
PASSWORD="<USER PASSWORD>"

if [ -z "$SONAR_PROJECT_KEY" ]; then
echo "Undefined \"projectKey\"" && exit 1
else
COMMAND="sonar-scanner -Dsonar.host.url=\"$URL\" -Dsonar.login=\"$USER\" -Dsonar.password=\"$PASSWORD\" -Dsonar.projectKey=\"$SONAR_PROJECT_KEY\""

if [ ! -z "$SONAR_PROJECT_VERSION" ]; then
COMMAND="$COMMAND -Dsonar.projectVersion=\"$SONAR_PROJECT_VERSION\""
fi

if [ ! -z "$SONAR_PROJECT_NAME" ]; then
COMMAND="$COMMAND -Dsonar.projectName=\"$SONAR_PROJECT_NAME\""
fi
if [ ! -z $CI_BUILD_REF ]; then
COMMAND="$COMMAND -Dsonar.gitlab.commit_sha=\"$CI_BUILD_REF\""
fi
if [ ! -z $CI_BUILD_REF_NAME ]; then
COMMAND="$COMMAND -Dsonar.gitlab.ref_name=\"$CI_BUILD_REF_NAME\""
fi
if [ ! -z $SONAR_BRANCH ]; then
COMMAND="$COMMAND -Dsonar.branch=\"$SONAR_BRANCH\""
fi
if [ ! -z $SONAR_ANALYSIS_MODE ]; then
COMMAND="$COMMAND -Dsonar.analysis.mode=\"$SONAR_ANALYSIS_MODE\""
if [ $SONAR_ANALYSIS_MODE="preview" ]; then
COMMAND="$COMMAND -Dsonar.issuesReport.console.enable=true"
fi
fi

eval $COMMAND
fi
  1. 现在在我的项目中 .gitlab-ci.yml 我有这样的东西:

    SonarQube:  
    image: <PATH TO YOUR IMAGE ON YOUR REGISTRY>
    variables:
    SONAR_PROJECT_KEY: "<YOUR PROJECT KEY>"
    SONAR_PROJECT_NAME: "$CI_PROJECT_NAME"
    SONAR_PROJECT_VERSION: "$CI_BUILD_ID"
    script:
    - /usr/bin/sonar-scanner-run.sh

这还不是全部。上面的 .gitlab-ci.yml 示例被简化了,因为我为 master 和其他分支(如 when:manual)使用了不同的构建,并且我使用这个插件来在 GitLab 中获得反馈:https://gitlab.talanlabs.com/gabriel-allaigre/sonar-gitlab-plugin

如果您有任何问题,请随时提出。我花了一些时间才按照我想要的方式把这一切放在一起:) 实际上我还在微调它。

关于docker - 使用 gitlab ci 运行 sonarqube 扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39875287/

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