travis-ci

在本文中,我们将学习如何将Travis CI用于SpringBoot应用程序的持续集成和持续部署(CI / CD)。 我们将学习如何运行Maven构建目标,使用JaCoCo插件,使用SonarCloud代码质量检查,建立泊坞窗图像进行测试覆盖率验证并推DockerHub并最终将其部署到Heroku的

本文的源代码位于https://github.com/sivaprasadreddy/freelancer-kit

上周,我和我的朋友谈论了使用SpringBoot构建Java应用程序并对其进行部署变得多么容易。 在讨论中,有一点关于构建Java应用程序并将其部署到某个地方(云)需要花费多少。 因此,我想探索更多有关免费服务的信息,我们可以使用这些免费服务以最小的成本或根本没有成本使所有项目开发活动自动化。

几年前,我使用CloudBeesCloudFoundry构建和部署了提供免费托管服务的宠物项目,但它们不再提供免费服务。

过去,我将Travis CI用于我的Java项目只是为了进行初步测试,但查看它们的文档后,我意识到它们提供了很多功能。

因此,我想检查一下是否可以将Travis CI用于我的项目,以执行所有常规任务,例如:

  • 签出最新代码
  • 编译并运行单元和集成测试
  • 运行JaCoCo代码覆盖率,如果未达到所需的百分比,则构建失败
  • 运行SonarQube代码质量检查
  • (可选)构建Docker映像并将其发布到Docker Hub
  • 在一些免费的云托管服务(如HerokuOpenShift)上部署应用程序

在阅读了他们的文档之后,我意识到我们可以通过使用一些免费的在线服务以及与Travis-CI的集成来完成所有这些任务。

  • GitHub代码存储库
  • SonarCloud免费的SonarQube服务
  • 用于发布Docker映像的Docker Hub
  • Heroku用于部署应用程序

让我们看看如何使用Travis-CISpringBoot项目执行上述所有任务。

步骤1:创建SpringBoot项目

使用http://start.spring.io或从您的IDE创建一个SpringBoot项目。 我正在使用Maven构建工具,也可以根据需要使用Gradle。 现在将项目提交到您的github存储库中。

步骤2:建立.travis.yml档案

为了启用Travis-CI集成,我们需要在项目根文件夹中创建.travis.yml文件。
在创建基于Maven的Java项目时,请创建具有以下内容的.travis.yml文件:

.travis.yml

language: java
jdk: oraclejdk8

这种最小的配置足以使Travis-CI识别并构建基于Maven的Java项目。 如果项目的根文件夹中有一个build.gradle文件,Travis会将其视为Gradle项目,或者如果存在pom.xml则将其视为Maven项目。 如果同时存在build.gradle和pom.xml,则Gradle构建脚本将具有优先权。

默认情况下,Travis将运行mvn test -B来构建项目。 如果Travis找到了mvnw包装器,则它将像./mvnw test -B一样使用。
但是,如果您要运行其他命令或要运行多个命令,则可以使用脚本块对其进行自定义。

现在,提交.travis.yml文件并将其推送到GitHub。

步骤3:为GitHub储存库启用Travis-CI

转到https://travis-ci.org/并使用GitHub登录
现在单击添加新存储库 (+符号)。
为存储库启用Travis。 启用Travis后,单击该存储库,然后可以通过选择More Options-> Trigger build来触发构建

现在,您可以看到构建正在运行并且测试已执行,并且有关构建状态的电子邮件通知将发送到您的电子邮件中。

步骤4:添加JaCoCo代码覆盖率检查

将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><!-- implementation is needed only for Maven 2 --><rule implementation="org.jacoco.maven.RuleConfiguration"><element>BUNDLE</element><limits><!-- implementation is needed only for Maven 2 --><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>

步骤5:运行单元和集成测试

如前所述,默认情况下,Travis运行mvn test -B ,它将仅运行Unit tests

我们希望使用maven-failsafe-plugin分别运行单元测试和集成测试。 我们将遵循惯例,将单元测试命名为* Test.java / * Tests.java将集成测试命名为* IT.java

如下所述添加maven-failsafe-plugin

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-failsafe-plugin</artifactId><configuration><includes><include>**/*IT.java</include></includes></configuration><executions><execution><id>failsafe-integration-tests</id><phase>integration-test</phase><goals><goal>integration-test</goal></goals></execution></executions>
</plugin>

在为SpringBoot项目配置maven-failsafe-plugin时,我遇到了这个问题https://github.com/spring-projects/spring-boot/issues/6254 。
为了解决这个问题,我将分类器配置添加到spring-boot-maven-plugin,如下所示:

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><classifier>exec</classifier></configuration>
</plugin>

现在,我们将使用脚本块来指定要运行的自定义Maven目标,而不是默认目标。

.travis.yml

language: java
jdk: oraclejdk8script:
- ./mvnw clean install -B

步骤6:使用SonarCloud进行SonarQube代码质量检查

基于SonarQube构建的SonarCloud ,可为开源项目提供免费的代码质量检查。
使用GitHub登录并转到“ 我的帐户”->“安全性”,并为您的项目生成一个新令牌并将其保存在某处。 现在,单击“ 组织”选项卡,并使用一些唯一的密钥创建组织。

Travis-CI提供了对敏感数据进行加密的功能( https://docs.travis-ci.com/user/encryption-keys/ ),以便我们可以加密任何密钥,密码并在.travis.yml文件中进行配置。

> sudo gem安装travis

在项目根文件夹中,运行以下命令来加密数据:

travis加密SOMEVAR =“ secretvalue”

这将生成类似

安全:“…。 加密的数据……。”

我们可以将所有机密添加为全局环境变量,如下所示:

env:global:- secure: "....encrypted data....."

现在,让我们如下加密SonarCloud令牌:

travis加密SONAR_TOKEN =“我的声纳令牌在这里”

最后,让我们将SonarCloud支持添加为插件( https://docs.travis-ci.com/user/sonarcloud/ ),如下所示:

language: java
jdk: oraclejdk8env:global:- secure: "....encrypted sonar token here....."addons:sonarcloud:organization: "sivaprasadreddy-github"token:secure: $SONAR_TOKENscript:
- ./mvnw clean install -B
- ./mvnw clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar

请注意,我们使用$ SONAR_TOKEN引用加密的令牌变量,并添加了另一个命令在脚本块中运行以运行sonar:sonar目标。

步骤7:构建Docker映像并发布到DockerHub

Travis CI构建可以运行和构建Docker映像,也可以将映像推送到Docker存储库。 有关更多信息,请阅读https://docs.travis-ci.com/user/docker/

在项目根文件夹中为我们的SpringBoot应用程序创建Dockerfile ,如下所示:

FROM 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" ]

要使用Docker,请将以下设置添加到.travis.yml:

sudo: requiredservices:- docker

现在我们可以在构建中运行Docker命令。

构建成功后,我们可能要构建Docker映像并将其推送到Docker Hub。 我们可以利用after_success部分来执行此操作。

在推送映像之前,我们需要登录DockerHub ,我们将通过对其进行加密来配置DockerHub凭据。

travis加密DOCKER_USER =” dockerhub-username”
travis加密DOCKER_PASS =“ dockerhub-password”

将这两个秘密添加到.travis.yml的env.global部分。

现在,我们可以在after_success部分中添加docker命令来构建映像并发布到dockerhub,如下所示:

after_success:
- docker login -u $DOCKER_USER -p $DOCKER_PASS
- export TAG=`if [ "$TRAVIS_BRANCH" == "master" ]; then echo "latest"; else echo $TRAVIS_BRANCH; fi`
- export IMAGE_NAME=sivaprasadreddy/freelancerkit
- docker build -t $IMAGE_NAME:$COMMIT .
- docker tag $IMAGE_NAME:$COMMIT $IMAGE_NAME:$TAG
- docker push $IMAGE_NAME

步骤8:部署到Heroku

Travis CI提供了在广泛的平台上进行部署的选项,包括Heroku,OpenShift,AWS,Azure等。TravisCI可以在成功构建后自动部署您的Heroku应用程序。

我们将使用Travis https://docs.travis-ci.com/user/deployment/heroku/在Heroku上部署SpringBoot应用程序。 在将我们的应用程序部署到Heroku之前,我们需要登录到https://www.heroku.com/并从Dashboard创建一个应用程序。

现在,在项目的根文件夹中创建Procfile ,如下所示:

web java -Dserver.port=$PORT -Dspring.profiles.active=heroku $JAVA_OPTS -jar target/freelancer-kit-0.0.1-SNAPSHOT-exec.jar

首先,我们需要获取Heroku API密钥并将其添加为加密密钥。

travis加密HEROKU_API_KEY =“此处为您的Heroku-api-key-”

我们可以通过添加以下部署部分来从Travis部署到Heroku:

deploy:provider: herokuapi_key: $HEROKU_API_KEYapp: freelancerkit

现在,完整的.travis.yml文件将如下所示:

sudo: required
language: java
jdk: oraclejdk8services:
- dockerenv: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: "sivaprasadreddy-github"token:secure: $SONAR_TOKENscript:
- ./mvnw clean install -B
- ./mvnw clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonarafter_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_NAMEdeploy:provider: herokuapi_key: $HEROKU_API_KEYapp: freelancer-kit

一旦构建成功并将其部署在Heroku上,您应该可以通过https:// <app> .herokuapp.com /访问该应用程序。

我仅介绍了Java应用程序中最常执行的任务,但是Travis-CI可以执行更多任务。 在https://docs.travis-ci.com/上查看TravisCI文档。

翻译自: https://www.javacodegeeks.com/2018/01/ci-cd-springboot-applications-using-travis-ci.html

travis-ci

travis-ci_使用Travis-CI的SpringBoot应用程序的CI / CD相关推荐

  1. 使用Travis-CI的SpringBoot应用程序的CI / CD

    在本文中,我们将学习如何将Travis CI用于SpringBoot应用程序的持续集成和持续部署(CI / CD). 我们将学习如何运行Maven构建目标,使用JaCoCo插件,使用SonarClou ...

  2. SpringBoot简介、SpringBoot 入门程序搭建、与JDBC、Druid、Mybatis和SpringData JPA的整合

    一.SpringBoot 简介: spring boot并不是一个全新的框架,它不是spring解决方案的一个替代品,而是spring的一个封装.所以,你以前可以用spring做的事情,现在用spri ...

  3. linux停止jar程序,Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法

    废话不多说了,先给大家上代码,具体代码如下所示: #!/bin/bash cd `dirname $0` CUR_SHELL_DIR=`pwd` CUR_SHELL_NAME=`basename ${ ...

  4. springboot配置连接rds_java – 在AWS-EC2上运行的SpringBoot应用程序无法连接到MySQL AWS-RDS数据库...

    我在运行我在EC2实例中开发的应用程序时遇到问题.当我执行.jar(java -jar app.jar)时,SpringBoot应用程序启动但尝试连接到我的MySQL RDS数据库时失败.问题是当我在 ...

  5. 使用spring-session外部化Spring-boot应用程序的会话状态

    Spring-session是一个非常酷的新项目,旨在提供一种更简单的方法来管理基于Java的Web应用程序中的会话. 我最近在spring-session中探索的功能之一是它支持外部化会话状态的方式 ...

  6. 如何优雅地关闭SpringBoot应用程序?听我给你讲

    前言 Hi,大家好,我是麦洛,今天来聊聊如何优雅地关闭SpringBoot应用程序,有需要交流的朋友,可以私信我或者加我微信:miloleex都可以哈 在我们日常开发中,我们如何启停服务?可能下面的命 ...

  7. springboot小程序商城毕业设计毕设作品开题报告开题答辩PPT

    springboot小程序商城毕业设计毕设作品开题报告开题答辩PPT

  8. springboot 小程序微信支付

    参考文章:SpringBoot + 小程序 整合微信支付和退款 V2版 - 码农教程 本文仅作记录 参考文章: UniApp + SpringBoot 实现微信支付和退款 - 奔跑的砖头 - 博客园 ...

  9. (附源码)Springboot小程序交通违法举报系统 毕业设计 242045

    Springboot小程序交通违法举报系统 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,交 ...

最新文章

  1. java基础知识回顾之javaIO类总结
  2. 以太坊搭建,不能使用puppeth 创建初始块,报错Fatal: Failed to write genesis block: unsupported fork ordering: eip15
  3. chrome for mac html5,javascript – Mac上的Chrome浏览器问题
  4. tcp序列号为什么是随机的_译文:每个开发人员应了解的 TCP 知识
  5. apkrenamer_实用软件ApkRenamer:一键重命名apk包
  6. WCF的追踪分析工具——SvcPerf
  7. Quadtrees UVA - 297
  8. Bailian2884 Problem III【入门】
  9. DPDK-UIO 驱动认识
  10. 真正实现再wine上安装VC6.0,并编译调试程序
  11. 基桩测试软件,智博联ZBL-U5700/5600机内软件测桩模块更新软件
  12. php自动填表单,网页自动填表基础教程从简单开始
  13. CS游戏控制台命令大全(来自网络)
  14. Luogu_P4556 雨天的尾巴【题解】树上差分 线段树合并
  15. 彼得林奇的成功投资一——作为消费者来选股
  16. 学生机房虚拟化(十二)搭建Clonezilla SE
  17. python sep参数_Python中带有print()函数的sep参数
  18. 处理行内元素行内块元素中间空隙
  19. linux之lsv—NAT配置
  20. 避雷器的测试项目及方法

热门文章

  1. 【每日一题】4月27日题目精讲 Removal
  2. 【学习笔记】左偏树的可持久化(【模板】k短路 / [SDOI2010]魔法猪学院)
  3. CF1037H Security(SAM)
  4. 题解: 区间合并(opj 2-4-7620)
  5. P4640-[BJWC2008]王之财宝【OGF,Lucas定理】
  6. 【倍增】【线段树】雨林跳跃(luogu 7599[APIO 2021 T2])
  7. 【并查集】【图论】旅行(ssl 1312)
  8. 【最小环】【Floyed】观光旅游(ssl 1763)
  9. 【动态规划】石子合并
  10. Java AIO 编程