Основываясь на Drone для выполнения CI / CD, я чувствую себя действительно хорошо. По сравнению со старшим братом в отрасли, jekins, я предпочитаю дрон. В сравнении я думаю, что в основном он имеет следующие преимущества.
- Плагины не требуют дополнительного управления
- Основан на файле yaml, прост в написании, конфигурация может управлять версиями
- Может быть построен в соответствии с различными условиями
- Более удобный интерфейс пользовательского интерфейса
Что нам делать с CI для наших серверных Java-проектов?
Общий процесс отправки кода выглядит следующим образом
- Клонируйте проект локально, создайте ветку для завершения разработки новых функций, git checkout -b feature/sync-status. Измените некоторый код в этой ветке
- git add ., напишите коммит, соответствующий спецификации, и отправьте код, git commit -m "статус синхронизации статьи"
- Вставьте код в соответствующую ветку базы кода, git push origin feature/sync-status
- Если функция была разработана, вы можете инициировать запрос на включение в ветку Develop (или Master) и попросить руководителя проекта провести проверку кода.
- После прохождения проверки руководитель проекта объединяет ветку с основной веткой.
Как видно из рисунка выше, когда мы отправим код, будет выполнен весь процесс CI.На следующие 2 момента необходимо обратить внимание.
- При выполнении сборки или юнит-теста в случае сбоя будет отправлено сообщение в Slack.В это время разработчики могут заметить проблему.Конечно, они также могут использовать метод отправки электронной почты или WeChat.
- При выполнении проверки SonarQube, в случае возникновения проблемы, результат будет записан обратно на github, и разработчик посмотрит на проблему
Давайте посмотрим на результат проверки, которую SonarQube отписал на github.
Когда тест sonar qube будет завершен, результат теста будет отправлен на github через oauth, поэтому вам необходимо создать токен личного доступа в github (обратите внимание на это)
Когда вы активируете свой репозиторий кода, Drone автоматически добавит веб-хуки в системы контроля версий, такие как GitHub, без ручной настройки.
kind: pipeline
name: default
steps:
# build for push and pull_request
- name: build-pr
image: maven:latest
pull: if-not-exists
commands:
- mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.skip=true -s settings.xml
when:
branch:
- feature/*
- issue/*
- develop
event:
- push
- pull_request
- name: unittest
image: maven:latest
pull: if-not-exists
commands:
- mvn test -s settings.xml
when:
branch:
- develop
event:
include:
- pull_request
- push
# 这里我们使用命令来深度定制我们的扫描,而不是使用drone sonar plugin
- name: sonar-scan
image: newtmitch/sonar-scanner:4.0.0-alpine
environment:
SONAR_TOKEN:
from_secret: sonar_token
GITHUB_ACCESS_TOKEN_FOR_SONARQUBE:
from_secret: github_access_token_for_sonarqube
commands:
- >
sonar-scanner
-Dsonar.host.url=https://sonarqube.company-beta.com/
-Dsonar.login=?SONAR_TOKEN
-Dsonar.projectKey=smcp-service-BE
-Dsonar.projectName=smcp-service-BE
-Dsonar.projectVersion=${DRONE_BUILD_NUMBER}
-Dsonar.sources=src/main/java
-Dsonar.tests=src/test/java
-Dsonar.language=java
-Dsonar.java.coveragePlugin=jacoco
-Dsonar.modules=smcp-api,smcp-web
-Dsonar.java.binaries=target
-Dsonar.projectBaseDir=.
-Dsonar.analysis.mode=preview
-Dsonar.github.repository=Today_Group/SMCP-Service
-Dsonar.github.oauth=?GITHUB_ACCESS_TOKEN_FOR_SONARQUBE
-Dsonar.github.pullRequest=${DRONE_PULL_REQUEST}
-Dsonar.github.disableInlineComments=false
when:
event:
- pull_request
branch:
- develop
# post sonarscan result back to git PR (not in preview mode)
- name: sonar-scan-feedback
image: newtmitch/sonar-scanner:4.0.0-alpine
environment:
SONAR_TOKEN:
from_secret: sonar_token
GITHUB_ACCESS_TOKEN_FOR_SONARQUBE:
from_secret: github_access_token_for_sonarqube
commands:
- >
sonar-scanner
-Dsonar.host.url=https://sonarqube.company-beta.com/
-Dsonar.login=?SONAR_TOKEN
-Dsonar.projectKey=smcp-service-BE
-Dsonar.projectName=smcp-service-BE
-Dsonar.projectVersion=${DRONE_BUILD_NUMBER}
-Dsonar.sources=src/main/java
-Dsonar.tests=src/test/java
-Dsonar.language=java
-Dsonar.java.coveragePlugin=jacoco
-Dsonar.modules=smcp-api,smcp-web
-Dsonar.java.binaries=target
-Dsonar.projectBaseDir=.
-Dsonar.analysis.gitRepo=Today_Group/SMCP-Service
-Dsonar.analysis.pullRequest=${DRONE_PULL_REQUEST}
when:
event:
- pull_request
branch:
- develop
Вышеупомянутая конфигурация дрона является основным процессом всего CI. Необходимо обратить внимание на следующие моменты.
- Вышеупомянутые шаги выполнения будут запущены только тогда, когда имя ветки начинается с feature/, issue/и develop.Для модульного тестирования будет действовать только ветка разработки (вы можете настроить ее в соответствии со своими потребностями)
- Sonar.projectKey и sonar.projectName в конфигурации сонара должны совпадать с именем, которое вы создали для проекта на сервере сонара (адрес, указанный в sonar.host.url)
- Значение sonar_token создается на сервере сонара, а затем значение устанавливается в секретах дрона (нажмите на склад в дроне и войдите в Настройки, чтобы установить его)
- Токен github и sonar_token одинаковы, оба должны быть предварительно установлены в дроне (преимущество в том, что вы не будете раскрывать свой пароль в файле, что более безопасно)
- Поскольку используемый проект Java является многомодульным проектом, в sonar.modules можно указать несколько имен модулей.
- В содержимом отзыва о сканировании сонара для pr не указан режим предварительного просмотра.
- При сборке используется jacoco (анализ покрытия модульными тестами), поэтому этот плагин необходимо ввести в pom.xml в java-проекте.
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>target/jacoco.exec</dataFile>
<outputDirectory>target/jacoco</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Другие возможные проблемы:
- Как отправить электронное письмо или сообщение в группу WeChat после выполнения ci
A: дрон предоставляет информацию оПочтаа такжеПлагин WeChat
- Может ли сонаркуб интегрировать p3c Alibaba или пользовательский контрольный стиль
A: Плагина p3c нет, но его можно интегрировать через PMD
Интегрировать p3c:у-у-у. Краткое описание.com/afraid/ah3ah58AC36…Пользовательский контрольный стиль:у-у-у. Краткое описание.com/afraid/ah3ah58AC36…
- Я хочу сам вести статистику на основе информации о сборке (была ли она успешной, время и т.д.)?
Ответ: Drone предоставляет плагин для вебхука, вам нужно только написать собственную статистическую программу, вы можете настроить отправку информации в соответствии с шаблоном
- У меня нет нужного плагина, что мне делать?
Ответ: Вы можете написать плагин самостоятельно, на официальном сайте есть примеры bash/go, а также есть возможность использовать знакомый вам язык
Рекомендуемое чтение в прошлом
И интервьюер взрывает набор реплик MongoDB вот так
Знание этих навыков проектирования MongoDB может повысить эффективность на 50%
Я провел неделю, читая исходный код Kafka Producer.
Интервьюер: Как реализовать LRU с LinkedHashMap