Travis 和 Spring Boot

分享此内容
分享此内容

在本系列由 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: 钩子中运行不同的命令。

为 Travis 添加覆盖率检查

将 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:slimslim 标志确保它获取的是精简版本。

部署

现在假设你使用 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;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;amp;gt;&amp;amp;amp;amp;amp;amp;lt;/span&amp;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].

祝您构建愉快!

© Copyright 2024, 保留所有权利
© Copyright 2024, 保留所有权利
© Copyright 2024, 保留所有权利