Я создал решение, которое я сделал, и написал то, что написал, потому что была проблема, которую я пытался решить в рамках набора требований/«границ», скажем,.
Использование этого решения требует использования Sonarqube «режим анализа», который является Установилось со времен Sonarqube 6.6 Анкет Как только это решение будет реализовано, вы не можете легко обновить, не нарушая анализ запросов на притяжение.
Пожалуйста, используйте это решение по своему усмотрению 🔥
Я начну с того, что решение было намного проще, чем я ожидал … Я думал, что мне придется запустить контейнер Docker с каким -то микросервисом, написанным на Java, Node. JS или Golang и запустите Sonar Scanner, когда был создан или обновлен запрос на тягу в зависимости от Web -Hook от BitBucket.
Но … как всегда, в конечном итоге решение было намного проще, но каково весело в написании блога, когда вы не пишете о том, как вы с треском провалились, прежде чем добиться успеха?
Где все это началось, долго … давным -давно С того же момента, когда я встретил ее, Сонаркубе, я знал, что влюблен. Зная, что у него был крошечный, маленький, милый контейнер, который вы могли бы легко запустить с одним нажавшим нажатием в командной строке, с встроенной базой данных H2 для удобства и даже встроенным экземпляром Elasticsearch, я не мог быть более заинтересованным 😍
Я изучил несколько различных инструментов статического анализа, таких как Код климат , Sonarcloud и Exakat В Но они были либо оценены на основе размера вашей организации (кодовой климат), либо ваших проектов (ценообразование на основе LOC для SonarCloud), что могло бы вызвать проблемы масштабирования в будущем. Или они были не так легко интегрироваться с существующими инструментами, такими как Bitbucket Cloud, или на самом деле не было дружеского пользовательского интерфейса для разработчика, использующего его в случае Exakat.
Интеграция Sonarqube с Bitbucket Cloud ☁ Mibex Software Есть замечательный плагин Sonarqube, Сонар Bitbucket Cloud Plugin , который анализирует и комментирует ваши запросы на привлечение.
Я решил попробовать, я клонировал репозиторий, построил его с Maven, чтобы у меня была красивая банка для Rsync для моей капли на Digitalocean и установил ее на свой экземпляр Sonarqube.
Я установил Сонар для Bitbucket Cloud Плагин через рынок Bitbucket, и ожидал, что у него будет встроенный веб-крюк, чтобы информировать плагин Sonarqube всякий раз, когда был создан или обновлен запрос на тягу, запустил анализ и прокомментирует запрос на привлечение с его выводами.
Но это было не так просто. Оказывается, что если бы я прочитал документацию полностью, сверху вниз, это документирует тот факт, что мне пришлось управлять сонаром, используя Maven, или, как я позже узнал сканер Sonar, чтобы вызвать анализ на Sonarqube.
На данный момент было весело, но … Мы останемся друзьями! ❤ Сонар для Bitbucket Cloud Казалось, действительно только добавил статистику на странице обзора вашего репозитория Bitbucket, он, похоже, не способствовал комментированию с найденными проблемами по вашим запросам на привлечение.
Так… Прежде чем запустить его в автоматизации, давайте попробуем вручную? 🔧 🔨 Оказывается, что плагин Sonar Bitbucket Cloud, который я установил на инсталляции Sonarqube, также работает, когда я просто запускаю сканер Sonar с несколькими большим количеством аргументов, чем я обычно перешел к нему.
Я слышал, что вы думаете: «Эм … но … разве это не так очевидно?!», И я знаю это сейчас. Но в тот момент я хотел натянуть волосы, которые у меня все еще есть в этом возрасте, из головы из -за разочарования.
Первоначально я читал Эта статья (украсить запрос Bitbucket Cloud Prest с комментариями сервера Sonarqube) Чтобы познакомиться, я был смущен тем фактом, что автор использовал цель Maven, чтобы запустить сканер.
Когда я запустил сканер Sonar вручную, запрос на притяжение была проанализирована, и плагин Sonar Bitbucket Cloud успешно прокомментировал его с проблемами, которые были найдены, в данном случае ни одного.
sonar-scanner -Dsonar.projectBaseDir=$(pwd) -Dproject.settings=sonar.properties -Dsonar.analysis.mode=issues -Dsonar.bitbucket.repoSlug=-Dsonar.bitbucket.accountName= -Dsonar.bitbucket.branchName= -Dsonar.bitbucket.oauthClientKey= -Dsonar.bitbucket.oauthClientSecret= -Dsonar.login= -Dsonar.bitbucket.pullRequestId=
Должны ли мы интегрировать это с нашим CI/CD? Конечно! 🌹 Когда я знал, что сканер Sonar работал, я хотел интегрировать его с нашим CI/CD для автоматизации анализа как нашего филиала интеграции, так и запросов.
В статье, которую я упоминал ранее, наш любимый Дженкинс упоминался, а также какой -то микросервис, написанный на Java, который должен был вызвать анализ на Sonarqube всякий раз, когда был создан или обновлен запрос на тягу, основанный на Bitbucket WebHook.
Итак … Я сам попытался написать микросервис с помощью узла. JS и Express.js, чтобы вызвать анализ, основанный на создании или обновлении, но я быстро обнаружил, что BitBucket имеет поддержку так называемого «Трубопроводы по запросу» Анкет
Я не люблю чрезмерную инженеров, но … Иногда это мой первый инстинкт, и я боюсь, что это проклятие … 💀👀
Использование благословения, которые являются «трубопроводами по запросу» 🙈💘 Когда я выяснил, как работали трубопроводы запроса на тягу, я был (все еще я) влюблен. Что я закончил, так это конфигурация трубопровода ниже 😍
pipelines: pull-requests: '**': - step: name: SonarQube Analysis image: newtmitch/sonar-scanner:4.0.0-alpine script: - sonar-scanner -Dsonar.projectBaseDir=$(pwd) -Dproject.settings=sonar.properties -Dsonar.analysis.mode=issues -Dsonar.bitbucket.repoSlug=$BITBUCKET_REPO_SLUG -Dsonar.bitbucket.accountName=$BITBUCKET_REPO_OWNER -Dsonar.bitbucket.branchName=$BITBUCKET_BRANCH -Dsonar.bitbucket.oauthClientKey=$OAUTH_CLIENT_KEY -Dsonar.bitbucket.oauthClientSecret=$OAUTH_CLIENT_SECRET -Dsonar.login=$SONAR_LOGIN -Dsonar.bitbucket.pullRequestId=$BITBUCKET_PR_ID branches: master: - step: name: SonarQube Analysis image: newtmitch/sonar-scanner:4.0.0-alpine script: - sonar-scanner -Dsonar.projectBaseDir=$(pwd) -Dproject.settings=sonar.properties -Dsonar.login=$SONAR_LOGIN
Bitbucket имеет кучу Предварительно определенные переменные среды что вы можете использовать в таких ситуациях. Переменные среды, которые вам нужны, чтобы определить себя:
Sonar_login
который является Сонаркубе Токен пользователяOauth_client_key
иOauth client_secret
требуется OAuth Consumer Чтобы быть настроенным с доступом к чтению к учетной записи и записи доступа к запросам.
По какой -то причине требуется «URL -адрес обратного вызова», в противном случае вы не можете создать потребителя OAuth.
Рассказывая Sonarqube, для какого проекта репозиторий! 📃📌 Как вы могли заметить в команде, которую я использовал для запуска сканера сонара, у него есть аргумент.
Dproject.settings = sonar.properties
это аргумент, о котором я говорю. Он говорит сканеру, где найти свойства для этого конкретного проекта, в данном случае это Sonar.properties
Файл в корне репозитория.
sonar.host.url=https://sonarqube.dev sonar.projectKey=sonarqube-experimentation sonar.projectName=SonarQube Experimentation
Какими будут мои следующие шаги в этом путешествии? 🐒 То, что я заметил, когда я исследовал, пробовал что -то и тщательно терпит неудачу, так это то, что у меня было много отдельных ресурсов, но нет способа последовательно воспроизводить их.
Что произойдет, если что -то пошло не так. Я испортил одну из моих капель Digitalocean, которые работали, например, Docker с Sonarqube? Я не мог легко раскрутить другого и быть уверенным, что это будет точно таким же, я действительно не документировал шаги, которые я сделал через путь исследования
Из -за этого я решил более знакомы с идеей «Инфраструктура как код» , или сокращено аббревиатурой «IAC» !
Terraform как -то упал мне на колени в этот момент 👀💯
Terraform является одним из инструментов в Hashistack от Hashicorp . Это позволяет вам написать вашу инфраструктуру в декларативной конфигурации, таким образом, «инфраструктура как код».
Я планирую написать другой блог об этом, где я размышляю о том, что я узнал, ошибки, которые я сделал, и времена, когда я впал лицом в лицо в неразрешимые проблемы!
Как всегда, я надеюсь, что вы что -то узнали из моих неудач (💩), а если нет, я молюсь, чтобы вы, по крайней мере, весело прочитали о них 🔥
Оригинал: «https://dev.to/serializator/sonarqube-pull-requests-in-bitbucket-cloud-188b»