在本系列由 Montana Mendy 撰写的科技博客文章中,我们将学习如何运行 Maven 构建目标,执行测试覆盖率验证(无论是 Coveralls、SonarCloud 还是 Docker)。你准备好了吗?我准备好了。让我们开始吧。
有很多选择。在本例中,我将使用 Maven,但你也可以使用 Gradle。接下来,你需要创建一个 SpringBoot 项目,可以使用 http://start.spring.io 或 IDE。
.travis.yml
文件我们需要启用你的 .travis.yml
文件,可以通过以下步骤完成:
language: java
jdk: oraclejdk8
这将调用 Travis 到你的项目中,这对 Travis 来说已经足够了,它可以识别需要触发的构建。Travis 的架构方式是运行 mvn test -B
来构建项目。如果 Travis 找到 mvnw wrapper
,它将使用 ./mvnw test -B.
,正如你所见,它有点递归。你可以指示 Travis 在你的 .travis.yml
中的 script:
钩子中运行不同的命令。
将 Maven 特定的 JaCoCo 插件添加到 pom.xml
中,并使用定义所需代码覆盖率百分比、类等的标志
<Plugin>
<GroupId>org.jacoco</GroupId>
<ArtifactId>jacoco-maven-plugin</ArtifactId>
<Version>0.7.9</Version>
<Configuration>
<Excludes>
<Exclude>in/sivalabs/freelancerkit/entities/*</Exclude>
<Exclude>in/sivalabs/freelancerkit/*Application</Exclude>
</Excludes>
</Configuration>
<Executions>
<Execution>
<Id>default-prepare-agent</Id>
<Goals>
<Goal>prepare-agent</Goal>
</Goals>
</Execution>
<Execution>
<Id>default-prepare-agent-integration</Id>
<Goals>
<Goal>prepare-agent-integration</Goal>
</Goals>
</Execution>
<Execution>
<Id>default-report</Id>
<Phase>verify</Phase>
<Goals>
<Goal>report</Goal>
</Goals>
</Execution>
<Execution>
<Id>default-report-integration</Id>
<Goals>
<Goal>report-integration</Goal>
</Goals>
</Execution>
<Execution>
<Id>default-check</Id>
<Goals>
<Goal>check</Goal>
</Goals>
<Configuration>
<Rules>
<Rule Implementation="Org.Jacoco.Maven.RuleConfiguration">
<Element>BUNDLE</Element>
<Limits>
<Limit Implementation="Org.Jacoco.Report.Check.Limit">
<Counter>COMPLEXITY</Counter>
<Value>COVEREDRATIO</Value>
<Minimum>0.60</Minimum>
</Limit>
</Limits>
</Rule>
</Rules>
</Configuration>
</Execution>
</Executions>
</Plugin>
为了解决分类器问题,解决方法是将分类器配置添加到 spring-boot-maven-plugin
中,如下所示
<Plugin>
<GroupId>org.springframework.boot</GroupId>
<ArtifactId>spring-boot-maven-plugin</ArtifactId>
<Configuration>
<Classifier>exec</Classifier>
</Configuration>
</Plugin>
现在让我们看看我们的 travis.yml
文件,并注意 script:
钩子
language: java
jdk: oraclejdk8
script:
- ./mvnw clean install -B
你可以在我们的 script:
钩子中看到我们添加了 ./mvnw vlean install -B
,这将是关键。现在让我们获取一个包含 SonarCloud 的 .travis.yml
。请记住,设置从 SonarCloud 获取的 环境变量
,并将其添加到 Travis 中,以下是一个演示此过程的 .travis.yml
language: java
jdk: oraclejdk8
env:
global:
- secure: (ENV_VARS_HERE)
addons:
sonarcloud:
organization: "montanamendy-from-travis"
token:
secure: $SONAR_TOKEN
script:
- ./mvnw clean install -B
- ./mvnw clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar
现在让我们构建一个 Dockerfile,它基本上反映了该 .travis.yml
ROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD target/freelancer-kit-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS="-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8787,suspend=n"
EXPOSE 8080 8787
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=docker -jar /app.jar" ]
该 Dockerfile 将获取 alpine-oraclejdk8:slim
,slim
标志确保它获取的是精简版本。
现在假设你使用 Heroku 进行部署,你需要获取所有这些凭据并将其添加到你的 deploy:
钩子中。我们可以在 CLI 中运行以下命令来添加你的 Heroku 密钥和机密:
travis encrypt HEROKU_API_KEY=”HEROKU_KEY"
现在你需要将以下内容添加到你的 .travis.yml
中:
deploy:
provider: heroku
api_key: $HEROKU_API_KEY
app: montana
现在你已经添加了你的 Heroku 机密,现在是查看最终 .travis.yml
的时候了:
sudo: required
language: java
jdk: oraclejdk8
services:
- docker
env:
global:
- secure: "encrypted-sonar-token"
- secure: "encrypted-dockerhub-username"
- secure: "encrypted-dockerhub-password"
- secure: "encrypted-heroku-api-key"
- COMMIT=${TRAVIS_COMMIT::7}
addons:
sonarcloud:
organization: "montanamendy-travis"
token:
secure: $SONAR_TOKEN
script:
- ./mvnw clean install -B
- ./mvnw clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar
after_success:
- docker login -u $DOCKER_USER -p $DOCKER_PASS
- export TAG=`if [ "$TRAVIS_BRANCH" == "master" ]; then echo "latest"; else echo $TRAVIS_BRANCH&amp;amp;amp;amp;amp;lt;span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;/span&amp;amp;amp;amp;amp;gt;; fi`
- export IMAGE_NAME=sivaprasadreddy/freelancer-kit
- docker build -t $IMAGE_NAME:$COMMIT .
- docker tag $IMAGE_NAME:$COMMIT $IMAGE_NAME:$TAG
- docker push $IMAGE_NAME
deploy:
provider: heroku
api_key: $HEROKU_API_KEY
app: montanamendy-from-travis
如果一切顺利,你应该在 Travis 构建日志中看到以下内容:
好了,我们刚刚将单元测试、Spring Boot 和 Travis CI 应用到了我们的项目中。集成起来相当容易,不是吗?
和往常一样,如果您有任何问题,任何问题,请通过电子邮件联系我 [email protected].
祝您构建愉快!