travis ci_Travis CI教程Java项目

travis ci

作为顾问,我在不同的“企业”环境中完成了许多Java项目。 通常,持续集成堆栈(如果有的话)包括:

  • Github Enterprise或Atlassian Stash用于源代码版本控制
  • Jenkins作为CI服务器,有时但很少使用Atlassian Bamboo
  • Maven构建工具
  • JaCoCo进行代码覆盖
  • Artifactory作为工件存储库-一旦我拥有Nexus

最近,我开始开发Koadlin DSL Kaadin ,以设计Vaadin应用程序。 我自然地将它托管在Github上,并希望具有与上述现实生活项目相同的功能。 这篇文章描述了如何使用全新的堆栈来实现所有所需的功能,而这可能是企业Java开发人员可能不熟悉的。

Github是绝配。 然后我继续寻找Jenkins云提供商来运行我的构建...无济于事。 这并不令人惊讶,因为我去年已经在搜索“持续集成”课程时没有取得任何成功。 我绝对可以在任何IaaS平台上安装我自己的实例,但是惯用它总是值得的。 Github上托管了许多Java项目。 他们大多使用Travis CI ,所以我走了这条路。

Travis CI注册

注册就像使用Github凭据登录,接受所有条件并设置需要构建的项目一样容易。

Travis CI项目选择

基本

.travis.yml文件的根目录中读取项目配置。 从历史上讲,该平台是针对Ruby的,但如今可以构建使用不同语言的不同类型的项目。 最重要的配置部分是定义语言。 因为我的是Java项目,所以第二重要的是使用哪个JDK:

language:java
jdk:oraclejdk8

从那时起,对Github存储库的每次推送都将触发构建- 包括分支。

汇编

如果项目的根目录中存在POM,则会自动检测到该POM,在这种情况下,Maven(或Maven包装器)将用作构建工具。 使用包装器设置Maven版本是一个好主意。 除此之外,没有使用任何版本的提示。

如上所述,Travis CI最初是为Ruby项目设计的。 在Ruby中,依赖项是在系统范围内安装的,而不是像Maven那样按项目安装的。 因此,生命周期包括:

  1. 安装依赖项阶段,默认情况下转换为./mvnw install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
  2. 每个项目明确定义的构建阶段

这种两阶段映射与Maven项目无关,因为Maven使用了一种惰性方法:如果依赖项不在本地存储库中,则将在需要时下载它们。 对于更惯用的管理,可以绕过第一个阶段,而只需要设置第二个阶段:

install:true
script:./mvnw clean install

提高构建速度

为了加快将来的构建,最好在不同的运行之间保留Maven本地存储库,就像Jenkins或本地计算机上的情况一样。 通过以下配置即可实现:

cache:
  directories:
  -$HOME/.m2

测试和构建失败

至于标准的Maven构建,阶段是按顺序运行的,因此调用install将首先使用compile然后进行test 。 单个失败的测试,构建将失败。 报告通过电子邮件发送。

Travis CI中的构建失败

大多数开源项目在其主页上显示其构建状态标志,以建立与用户的信任。 该徽章由Travis CI提供,只需进行热链接即可,如下所示:

Kaadin构建状态

代码覆盖率

Travis CI不使用在Maven构建期间生成的JaCoCo报告。 一个人必须使用另一种工具。 有几种可用的方法:我之所以选择https://codecov.io/ ,除了Mockito也使用它之外,没有其他原因。 演练是相同的,使用Github注册,接受条件,这是可行的。

Codecov乐于使用JaCoCo覆盖率报告,但选择仅显示行覆盖率- 不太有意义的指标 IMHO。 但是,它已经足够广泛了,所以让我们通过一个可以热链接的漂亮徽章向用户显示它:

Codecov

构建配置文件需要更新:

script:
  -./mvnw clean install
  -bash <(curl -s https://codecov.io/bash)

在每次构建时,Travis CI都会调用在线Codecov Shell脚本,该脚本将以某种方式基于上一个构建命令期间生成的JaCoCo报告来更新代码覆盖率值。

部署到Bintray

公司通常在内部存储库上部署构建的工件。 开源项目应部署在公共存储库上,以供用户下载-这意味着Bintray和JCenter。 幸运的是,Travis CI提供了许多不同的远程要部署到其中,包括Bintray。

通常,只有专用分支应该部署到远程release 例如 release 。 该参数在配置文件中可用:

deploy:
  -
    on:
      branch:release
    provider:bintray
    skip_cleanup:true
    file:target/bin/bintray.json
    user:nfrankel
    key:$BINTRAY_API_KEY

请注意上面的$BINTRAY_API_KEY变量。 Travis CI提供了环境变量以提供一定的灵活性。 可以将它们中的每一个定义为不显示在日志中。 请注意,在这种情况下,它被视为机密 ,并且无法在用户界面中再次显示。

Travis CI环境变量

对于Bintray,这意味着要掌握Bintray上的API密钥,使用相关名称创建变量并设置其值。 当然,可以根据需要创建其他变量。

大多数部署配置都委派给Bintray专用的JSON文件。 除其他信息外,它还包含来自Maven POM的artifactIdversion值。 Maven筛选配置为自动从POM获取内容并将其来源配置文件以供使用:请注意,路径引用在生成的target文件夹下。

结论

在Github上进行开源开发需要与内部企业开发不同的方法。 特别是,标准构建管道基于完全不同的堆栈。 由于使用不同的默认值和所有需要阅读的文档,因此使用此堆栈非常耗时,但这绝非不可能。

翻译自: https://blog.frankel.ch/travis-ci-tutorial-for-java-projects/

travis ci

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值