how-to-use-travis-ci

程序名称:how-to-use-travis-ci

授权协议: Apache

操作系统: 跨平台

开发语言: Java

how-to-use-travis-ci 介绍


如何简单入门使用Travis-CI持续集成

不知道你们有没有看过

Build
Status

这样一个标识,
只看文字就可以看出这个项目是否已经构建成功(让大家知道项目没有问题),如果不成功则会显示 Build failing。
如果你的项目还没有使用,那么赶快跟我一起来装13吧。233333

Travis-CI 是什么?

Travis-CI是一个开源的持续构建项目,能够测试和部署;Travis-CI会同步你在GitHub上托管的项目,每当你Commit
Push之后,就会在几分钟内开始按照你的要求测试部署你的项目。

目前Travis-CI分http://travis-ci.org/(GitHub公开项目进这个)和http://travis- ci.com/(私有付费项目)

官方文档:https://docs.travis-ci.com/

开始使用 Travis-CI

1:用你的GitHub账号登录Travis-CI,确认接受访问GitHub的权限。

2:登录之后,Travis-CI就会同步你GitHub账号的仓库。然后打开个人页面并给你想要构建的项目启用Travis-CI。

就像这样:

3:添加 .travis.yml 文件到你项目根目录下,Travis-CI会按照.travis.yml里的内容进行构建。

如下是一个Android项目配置例子:

language: android
android:
  components:
    # Uncomment the lines below if you want to
    # use the latest revision of Android SDK Tools
    # - platform-tools
    # - tools

    # The BuildTools version used by your project
    - build-tools-19.1.0

    # The SDK version used to compile your project
    - android-19

    # Additional components
    - extra-google-google_play_services
    - extra-google-m2repository
    - extra-android-m2repository
    - addon-google_apis-google-19

    # Specify at least one system image,
    # if you need to run emulator(s) during your tests
    - sys-img-armeabi-v7a-android-19
    - sys-img-x86-android-17

4:把 .travis.yml push到你的GitHub上以触发Travis-CI进行构建。

5:最后你就可以到构建状态页面来查看你的项目是否构建成功。

配置构建脚本

由于我也是刚入门不久,所以我只能讲解一些基础用法,如果有其他需求,大家可以自己慢慢探索。

先来看看下面这个我使用过的配置:

language: android   # 声明构建语言环境

notifications:      # 每次构建的时候是否通知,如果不想收到通知邮箱(个人感觉邮件贼烦),那就设置false吧
  email: false

sudo: false         # 开启基于容器的Travis CI任务,让编译效率更高。

android:            # 配置信息
  components:
    - tools
    - build-tools-23.0.2              
    - android-23                     
    - extra-android-m2repository     # Android Support Repository
    - extra-android-support          # Support Library

before_install:     
 - chmod +x gradlew  # 改变gradlew的访问权限

script:              # 执行:下面的命令
  - ./gradlew assembleRelease

before_deploy:       # 部署之前
  # 使用 mv 命令进行修改apk文件的名字
  - mv app/build/outputs/apk/app-release.apk app/build/outputs/apk/buff.apk

deploy:              # 部署
  provider: releases # 部署到GitHub Release,除此之外,Travis CI还支持发布到fir.im、AWS、Google App Engine等
  api_key:           # 填写GitHub的token (Settings -> Personal access tokens -> Generate new token)
    secure: 7f4dc45a19f742dce39cbe4d1e5852xxxxxxxxx 
  file: app/build/outputs/apk/buff.apk   # 部署文件路径
  skip_cleanup: true     # 设置为true以跳过清理,不然apk文件就会被清理
  on:     # 发布时机           
    tags: true       # tags设置为true表示只有在有tag的情况下才部署

除了上面这些命令外,还有很多,比如:branches: (指定持续集成的分支), install:(安装软件包)等待,
如果想进一步了解请到Customizing Your Build

自动发布到GitHub Release:

密码和证书安全

对于密码等敏感信息,Travis CI提供了2种解决方案:

  • 对密码等敏感信息进行加密,然后再构建环境时解密。

  • 在Travis CI控制台设置环境变量,然后使用System.getenv()获取值。

考虑到安全问题,我们的签名设置可能是这样的:

release {
    try {
        storeFile file(nukc.jks)
        storePassword KEYSTORE_PASSWORD
        keyAlias C
        keyPassword KEY_PASSWORD
    } catch (ex) {
        throw new Exception(You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.)
    }
}

KEYSTORE_PASSWORD和KEY_PASSWORD环境变量放在了gradle.properties文件,可以直接在build.gradle中使用
如果不知道是否能获取到gradle.properties里的环境变量,那就加个判断吧。(设置了会获取不到?比如.gitignore设置了忽略没有上传,判断一下也好)
然后最终就变成这样:

release {
    try {
        storeFile file(nukc.jks)
        storePassword project.hasProperty(KEYSTORE_PASSWORD) ? KEYSTORE_PASSWORD : System.getenv(KEYSTORE_PASSWORD)
        keyAlias C
        keyPassword project.hasProperty(KEY_PASSWORD) ? KEY_PASSWORD : System.getenv(KEY_PASSWORD)
    } catch (ex) {
        throw new Exception(You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.)
    }
}

对于文件加密,Travis CI提供了一个基于ruby的CLI命令行工具,可以直接使用gem安装:

gem install travis

安装后进入安卓项目根目录,尝试对证书文件加密:

travis encrypt-file nukc.jks --add

如果首次运行,travis会提示需要登录,运行travis login –org并输入Github用户名密码即可。(付费版则为travis login
–pro)

travis encrypt-file指令会做几件事情:

  1. 在Travis CI控制台自动生成一对密钥: encrypted_e6c55137b621_key和encrypted_e6c55137b621_iv

  2. 基于密钥通过openssl对文件进行加密,上例中会项目根目录生成xx.jks.enc文件

  3. 在.travis.yml中自动生成Travis CI环境下解密文件的配置,上例运行后可以看到.travis.yml中多了几行:

    before_install:
        - gem install fir-cli
        - openssl aes-256-cbc -K $encrypted_e6c55137b621_key -iv $encrypted_e6c55137b621_iv
          -in nukc.jks.enc -out nukc.jks -d

最后在.gitignore中忽略xx.jks以及gradle.properties

项目使用了Bintray配置文件

目前我的开源项目用不到证书签名,我还是比较关心Bintray apikey的安全,上传到JCenter还是比较实用的。
本来我把bintray.apikey和bintray.user设置在了local.properties中,但由于local.properties不会被上传,
Travis CI无法获取到,那肯定是会build failing的。

之前:(报错,没有local.properties这样的文件)

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty(bintray.user)
    key = properties.getProperty(bintray.apikey)
    configurations = ['archives']
    pkg {
        repo = maven
        name = Buff    
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = [MIT]
        publish = true
    }
}

然后我把这2个变量添加到了Travis CI控制台,最后改一下。

Properties properties = new Properties()
boolean isHasFile = false
if (project.rootProject.findProject('local.properties') != null){
    isHasFile = true
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
}
bintray {
    user = isHasFile ? properties.getProperty(bintray.user) : System.getenv(bintray.user)
    key = isHasFile ? properties.getProperty(bintray.apikey) : System.getenv(bintray.apikey)
    configurations = ['archives']
    pkg {
        repo = maven
        name = Buff    
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = [MIT]
        publish = true
    }
}

如何在自己的项目中显示Status Image

Build
Status

爬过的坑

如果你遇到了其他的问题,可以尝试到travis-ci/issues里找找,或者Google / StackOverflow


/home/travis/build.sh: line 45: ./gradlew: Permission denied

gradlew的权限问题,修改gradlew的权限,在.travis.yml里加上:

before_install:
 - chmod +x gradlew

failed to find Build Tools revision 23.0.2

我是加上 - tools 解决的:

android:
  components:
    - tools

failed to deploy

设置一下这个token的权限就好了

最后,希望大家都能顺顺利利的build passing。

how-to-use-travis-ci 官网

http://travis-ci.org/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


提到 EclEmma 首先就要说到著名的 Java 覆盖测试工具Emma。从某种程度上说,EclEmma 可以看作是 Emma 的一个图形界面。
Solex是一个WEB应用测试用的Eclipse插件。Solex可以简化对WEB应用的测试操作。它发布在Apache Software
Apache为我们提供了一个强大的工具 Cactus!它是一套简单,易于使用的服务器端测试框架,可以使开发人员很轻松的测试服务器端的程序,他们会说:”哦,就是这么简单”。Cactus是
Google C Testing Framework是Google公司用来在各种不同平台上编写C测试代码的框架。
JdbcProxy 是 SourceForge 上一个开源的 Java 项目,用 Java 语言编写,遵循 LGPL 和 MPL1.1 协议,由 Frans
Ripplet是一款负载测试工具,特征如下: 1)基于Apache License 2.0许可证; 2)软件程序性能和负载测试工具;
Memtest86+ 是一款免费开源的内存测试软件,测试准确度比较高,内存的隐性问题也能检查出来!也是一款基于Linux核心的测试程序.
Winpdb是一款非常受python开发者欢迎的高级debugger工具。支持只能断点、多线程、名称空间修改、加密通讯等高级特性。
Selenium (SeleniumHQ) 是 thoughtworks公司的一个集成测试的强大工具。 一、Selenium 的版本
Flexcover是一个针对Flex、AIR和AS3的开源代码覆盖率工具套件。 Flexcover的设计主要出于以下目的:
Architecture Rules是一个开源java库,通过它断言你的架构。Architecture Rules通 过一个xml配置文件和一个可选的程序配置文件通过集成测试(unit
Tsung 是一个压力测试工具,可以测试包括HTTP, WebDAV,PostgreSQL,MySQL, LDAP, and XMPP/Jabber等服务器。针对 HTTP
JDebugTool 是一个独立的图形化的Java调试器,基于 JPDA (Java Platform Debugger Architecture)
Sahi 是一个用于Web应用程序的自动测试工具。 Sahi 运行为一个代理服务器,必须把浏览器的代理设置为 Sahi 服务器。然后Sahi 注入javascript来访问Web页面中的元素。
UnitTH is a simple, easy to use Open Source software application for generating historical test reports from JUnit test reports.
TestLink用于进行测试过程中的管理,通过使用TestLink提供的功能,可以将测试过程从测试需求、测试设计、到测试执行完整的管理起来,同时,它还提供了好多种测试结果的统计和分析,使我们能够简单的开始测试工作和
Metasploit Framework是一个编写,测试和使用exploit代码的完善环境。这个环境为渗透测试,shellcode编写和漏洞研究
JSystem 是一个开源的系统自动测试框架,包含以下的组件: 1. Services Java API - exposes JSystem services
Jester 是一个 JUnit 测试的测试器,擅长发现测试套件的问题,并提供对代码基本结构的深入观察。
PolePosition 是一个开源的数据库性能测试工具。 下图是该工具测试完成后生成的报表