Подтвердить что ты не робот

Как получить Sonarcloud для запуска запросов на растяжение с вилок с помощью Travis, Maven & github

Изучая мой недавний вопрос сбой в Sonarcloud с Travis, Maven и github, я понял, что задал неправильный вопрос. Я пытался решить симптом, а не основную проблему.

Проект, над которым я работаю (eclipse/scanning) использует Github в качестве репозитория и Travis с Sonarcloud для непрерывной интеграции и анализа кода.

В то время как анализ Sonarcloud отлично работает с внутренними запросами на тяну (запросы на запросы от ветвей, наводимых непосредственно на eclipse/scan), он не работает, когда Travis запускается для внешних запросов на вытягивание (из разветвленных репозиториев).

Основная проблема заключается в том, что способ, которым мы запускаем sonarcloud, в настоящее время опирается на переменные среды, которые не заполняются для запросов внешнего натяжения по соображениям безопасности:

Encrypted environment variables have been removed for security reasons.
See https://docs.travis-ci.com/user/pull-requests/#Pull-Requests-and-Security-Restrictions

У нас есть наш репозиторий, который не заботится о том, запускается ли Sonarcloud, но это значит, что мы часто сливаемся с изменениями, которые нарушают правила сонарлаула, потому что мы не понимаем, что они были сломаны. Мы видим только, что эти правила были нарушены в следующий раз, когда они будут изменены кем-то, кто прямо нажимает на репозиторий. Это перекладывает бремя фиксации Sonarcloud на обнаруженные проблемы от коллаборационистов до коммиттеров.

Итак,

  • Можно ли включить анализ Sonarcloud запросов на pull из разветвленных репозиториев без возникновения проблем безопасности?

Обратите внимание, что этот вопрос кажется на один шаг выше В публичном репозитории Travis, как добавить переменную Secure, которая также работает с запросами Pull, еще есть ответ.

4b9b3361

Ответ 1

Это, вероятно, не простое решение, которое вы ищете, но я не думаю, что есть гораздо более простой способ получить доступ к секретам при создании запросов на растяжение, если Трэвис не добавит поддержку для него в той или иной форме. В конце концов, секретные переменные недоступны по уважительной причине, так как запросы тяги могут содержать произвольный код, который запускается во время сборки. Злоумышленник может использовать это для создания запроса на перенос, который изменяет процесс сборки, чтобы прочитать расшифрованные переменные среды и отправить их ему.

Основная проблема заключается в том, что код, который запускает сборку, и построенный код исходят от одного и того же (иногда ненадежного) источника. Чтобы иметь возможность использовать секреты в процессе сборки, необходимо, чтобы код, который строился, и код, который был построен, нужно было разделить, а код сборки должен был поступать из надежного источника. Никакой код из ненадежного источника не должен выполняться, если он не изолирован, поэтому он не может получить доступ к каким-либо из секретов.

Насколько мне известно, Тревис не предоставляет стандартного метода для достижения этого.

Следуя идее разделения кода сборки и строящего кода, должно быть возможным, тем не менее, выполнить анализ Sonarqube против запросов внешнего pull.

Первым шагом будет создание нового "кода сборки" репозитория в Github, который содержит только надежные скрипты сборки. Эти сценарии отвечают за проверку запроса на растяжение и выполнение анализа Sonarqube. Поскольку они не являются частью запроса внешнего pull, они могут получить доступ к секретным переменным. Однако будьте осторожны, чтобы не запускать модульные тесты в запросе на извлечение, так как они ненадежны.

Второй шаг - инициировать сборку репозитория "код сборки" всякий раз, когда запрос на перенос делается против реального репозитория исходного кода. Travis предоставляет API для запуска сборки. Однако это также требует тайны. Поэтому мы не можем просто создать сборку репозитория "build code" при построении запроса на pull. Однако мы можем установить webhook в репозиторий исходного кода в Github, который вызывает небольшую веб-службу, когда тянуть запрос сделан. Затем эта служба вызывает API Travis для запуска сборки надежного репозитория кода сборки.

Надеюсь, это имеет смысл. Пожалуйста, дайте мне знать, если что-то неясно.

Я еще не сделал этого сам. Поэтому я не могу предоставить какой-либо код. Но я думаю, что не должно быть слишком сложно настроить небольшую веб-службу, которая превращает webhook из запроса Github в запрос на сборку для Travis.

Ответ 2

Как вы прекрасно догадались, если вы не жестко кодируете свои токены GitHub и SonarCloud (что, очевидно, вы не хотите, чтобы их публично не раскрывать), в настоящее время нет возможности анализировать внешние запросы на растяжение. Это описано на официальной странице SonarCloud Travis Add-on.

В настоящее время мы активно работаем над тем, чтобы правильно поддерживать этот вариант использования - и я надеюсь, что мы придумаем что-то до конца года.