В данном образе объединены:
- SonarQube Scanner Cli
- OWASP DependencyCheck
- Добавление проекта в SonarQube и синхронизация ветки по умолчанию
- Синхронизация прав SonarQube и Gitlab через guassp
- Запуск тестов для .Net
- Получение покрытия кода из SonarQube
Отдельное спасибо WoozyMasta за утилиту guassp.
Для сборки необходимо передать аргументы:
SONAR_SCANNER_VERSION
=5.0.1.3006
- версия сканера, взять можно в репозитории проекта sonar-scanner-cliDOTNET_SONARSCANNER_VERSION
=6.0
- версия dotnet-sonarscannerGRADLE_VERSION
=8.1.1
- версия gradlePOSTGRES_DRIVER_VERSION
=42.7.0
- версия драйвера postgresMYSQL_DRIVER_VERSION
=8.3.0
- версия драйвера mysqlDEPENDENCY_CHECK_VERSION
=9.0.7
- версия DependencyCheck
Для ускорения прохождения стадии можно в образ при сборке упаковать все необходимые плагины и базы SonarQube, для этого во время сборки передайте переменные:
SONARQUBE_TOKEN
=XXTOKENXX
- Токен SonarQube, должен иметь права на создание проектов и выполнение анализаSONARQUBE_URL
=https://sonarqube.com
- Адрес SonarQube
А в конец секции RUN
Dockerfile'a добавьте:
mkdir -p "$SRC_PATH" "$SONAR_USER_HOME" "$SONAR_USER_HOME/cache"; \
sonar-scanner \
-Dsonar.qualitygate.wait=false \
-Dsonar.projectKey=self-build \
-Dsonar.host.url="$SONARQUBE_URL" \
-Dsonar.login="$SONARQUBE_TOKEN" \
-Dsonar.dryRun=true \
-Dsonar.exclusions='**/dependency-check/bin/*'
В образ будет упакован текущий кеш плагинов в директорию
/opt/sonar-scanner/.sonar
sentoz/multi-sonarqube-scanner-cli:0.2.1
Данный образ позволяет сканировать проекты реализованные на языках:
- typescript|javascript
- python
- go
- ruby
- shell
- html
- css
sentoz/multi-sonarqube-scanner-cli:0.2.1-dotnet-3.1
sentoz/multi-sonarqube-scanner-cli:0.2.1-dotnet-5.0
sentoz/multi-sonarqube-scanner-cli:0.2.1-dotnet-6.0
sentoz/multi-sonarqube-scanner-cli:0.2.1-dotnet-7.0
sentoz/multi-sonarqube-scanner-cli:0.2.1-dotnet-8.0
Каждый образ собирается на последней стабильной версии .Net
, включает в себя
dotnet sonarscanner
и reportgenerator
.
sentoz/multi-sonarqube-scanner-cli:0.2.1-gradle-8.1.1
sentoz/multi-sonarqube-scanner-cli:0.2.1-gradle-7.3.3
В образ пакуются бинарные файлы gradle последней стабильной версии.
DEFAULT_BRANCH
=$GITHUB_BASE_REF
COMMIT_BRANCH
=$GITHUB_REF_NAME
COMMIT_TAG
=${GITHUB_REF#"refs/tags/"}
JOB_TOKEN
=$GITHUB_TOKEN
PROJECT_DIR
=$GITHUB_WORKSPACE
REF_NAME
=$GITHUB_REF_NAME
MERGE_REQUEST_ID
=$GITHUB_RUN_ID
COMMIT_REF_SLUG
=$GITHUB_REF_NAME
PROJECT_NAME
=${GITHUB_REPOSITORY#*/}
PROJECT_URL
=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY
DEFAULT_BRANCH
=$CI_DEFAULT_BRANCH
COMMIT_BRANCH
=$CI_COMMIT_BRANCH
COMMIT_TAG
=$CI_COMMIT_TAG
PROJECT
=$CI_PROJECT_ID
JOB_TOKEN
=$CI_JOB_TOKEN
PROJECT_DIR
=$CI_PROJECT_DIR
REF_NAME
=$CI_COMMIT_REF_NAME
MERGE_REQUEST_ID
=$CI_MERGE_REQUEST_IID
PROJECT_NAME
=$CI_PROJECT_NAME
COMMIT_REF_SLUG
=$CI_COMMIT_REF_SLUG
SONARQUBE_ALM_NAME
=GitLab
JOB_TOKEN
=$CI_JOB_TOKEN
PROJECT_URL
=$CI_PROJECT_URL
SONARQUBE_URL
- Адрес сервера SonarQubeSONARQUBE_TOKEN
- Токен для подключения к SonarQubeSONARQUBE_CUSTOM_ARGS
- Список вспомогательных ключей для SonarScaner разделенный запятой, к примеру:sonar.exclusions=/path, sonar.test.exclusions=/path2
SONARQUBE_GENERIC_REPORTS_FILE
=$PROJECT_DIR/issues.json
- Файл с generic репортамиSONARQUBE_QUALITYGATE_WAIT
=true
- ожидание получения состояния Quality GateSONARQUBE_QUALITYGATE_TIMEOUT
=300
- таймаут ожидания состояния Quality GateSONARQUBE_LOG_LEVEL
=INFO
- Уровень логирования SonarQube ScannerSONARQUBE_VERBOSE
=true
- больше информации в журнале анализаSONARQUBE_PYTHON_VERSION
=3
- Версия pythonSONARQUBE_ALOW_FAILURE
=false
- Критичность падения стадии SonarQube Scanner.
SONARQUBE_PROJECT_NAME
=$GITHUB_REPOSITORY
SONARQUBE_PROJECT_KEY
=${GITHUB_REPOSITORY#*/}
SONARQUBE_PROJECT_NAME
=$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME
SONARQUBE_PROJECT_KEY
=gitlab:$CI_PROJECT_ID
Для ускорения прохождения pipeline, dependency check может хранить базу уязвимостей в отдельной базе данных и при старте проверки брать данные из нее, а не выкачивать из интернета при каждом запуске.
OWASP_DEPENDENCY_CHECK_DB_DRIVER
=org.postgresql.Driver
- Используемый драйвер баз данных(org.postgresql.Driver или com.mysql.jdbc.Driver)OWASP_DEPENDENCY_CHECK_DB_STRING
- строка подключения к базе данныхOWASP_DEPENDENCY_CHECK_DB_PASSWORD
- пароль для подключения к базе данныхOWASP_DEPENDENCY_CHECK_DB_USER
- имя пользователя для подключения к базе данныхOWASP_DEPENDENCY_CHECK_NVD_VALID_HOURS
-24
- Кол-во часов через сколько будет выполняться проверка наличия обновления базы из NVD.
OWASP_DEPENDENCY_CHECK_SEVERITY_BLOCKER
-9.0
OWASP_DEPENDENCY_CHECK_SEVERITY_CRITICAL
-7.0
OWASP_DEPENDENCY_CHECK_SEVERITY_MAJOR
-4.0
OWASP_DEPENDENCY_CHECK_SEVERITY_MINOR
-0.0
OWASP_DEPENDENCY_CHECK_DISABLE_OSS_INDEX
-true
- Отключение OSS IndexOWASP_DEPENDENCY_CHECK_OSS_INDEX_USERNAME
- Имя пользователя для подключения к Sonatype's OSS Index(опционально)OWASP_DEPENDENCY_CHECK_OSS_INDEX_PASSWORD
- Пароль для подключения к Sonatype's OSS Index(опционально)
OWASP_DEPENDENCY_CHECK_SUPPRESSIONS_FILE_PATH
-$PROJECT_DIR/suppression.xml
- Используйте suppression файл для удаления ложных срабатываний если они есть.
Если вы хотите подключать источники при помощи nuget.config, то его необходимо расположить в том же каталоге, где и *.sln файл согласно официальной документации
NUGET_PRIVATE_REGISTRY_URL
- Адрес до приватного реестра пакетов(опционально)NUGET_PRIVATE_REGISTRY_USERNAME
- Имя пользователя для авторизации в приватном реестре пакетов(опционально)NUGET_PRIVATE_REGISTRY_TOKEN
- Токен для авторизации в приватном реестре пакетов(опционально)NUGET_REGISTRY_URL
- Адрес до публичного кэширующего реестра пакетов(опционально)
DOTNET_PROJECT_CONFIGURATION
=Debug
- Конфигурация сборкиDOTNET_VERBOSITY
=minimal
- Уровень логированияDOTNET_CUSTOM_BUILD_ARGUMENTS
- Кастомные аргументы сборки приложенияDOTNET_CUSTOM_TEST_ARGUMENTS
- Кастомные аргументы тестов приложенияDOTNET_WORK_DIR
=$PROJECT_DIR
- Каталог с sln файломDOTNET_CSPROJ_FILE_PATH
- Путь до csproj файла приложенияDOTNET_CSPROJ_FILE_TEST_PATH
- Путь до csproj файла тестовDOTNET_RESTORE_ATTEMPT_COUNT
- Кол-во попыток выполненияdotnet restore
в случае падения
SKIP_DOTNET_TEST
=false
- Пропуск тестов для .Net
SKIP_DEPENDENCY_CHECK_JOB
=false
- Пропустить сканирование DependencyCheckSKIP_SONARQUBE_PREPARE
=false
- Пропустить предварительную настройку проекта в SonarQubeSKIP_SONARQUBE_SCANNER_JOB
=false
- Пропустить сканирование SonarQube ScannerSKIP_SONARQUBE_PERMISSIONS_SYNC
=false
- Пропустить синхронизацию правSKIP_SONARQUBE_COVERAGE
=false
- Пропустить запрос покрытия кода
SUPPORT_CONTACTS
=https://github.com/sentoz/multi-sonarqube-scanner-cli/issues
- Контакты для обратной связи