基于Drone来做CI/CD,个人感觉真的很棒,相对于业界老大哥jekins,我更喜欢drone,相比较而言,我觉得它主要有以下优势
对于我们后端的java项目而言,我们CI要做什么呢?
一般提交代码流程如下
从上图中可以看到当我们提交代码时,会执行整个CI流程,需要注意的有以下2点
先看下SonarQube回写到github中的的检查结果是怎样的
当sonar qube检测完成之后,会将检查结果通过oauth的方式发送给github,所以你需要在github中创建Personal access token(这个要记下来)
当你激活你的代码仓库时,Drone会自动将Webhooks添加到版本控制系统中,例如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 复制代码
上面drone的配置就是整个CI的基本流程了,需要注意的有以下几点
<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> 复制代码
答: drone提供了关于 邮件 和 微信的插件
答: 没有p3c的插件,但是可以通过PMD来进行集成
集成p3c: www.jianshu.com/p/a3a58ac36… 自定义checkstyle: www.jianshu.com/p/a3a58ac36…
答: drone提供了webhooke的plugin,你只需要编写自己统计的程序就可以了,可以根据模板设置需要发送的信息
答: 可以自己写一个插件,官网有bash/go的示例,用你熟悉的语言也是可以的