您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页从Travis回GitHub

从Travis回GitHub

来源:二三娱乐
图片来源于GitHub Help

Deployment

本文主要介绍如何用Travis,把自动编译后的某些文件,自动deploy到GitHub的Releases里。(以下均以“发布”来代称deploy与deployment。)

自动发布配置

示例如下:

language: groovy

jdk:
  - oraclejdk8
  - openjdk7

script: "./gradlew build"

before_deploy:
  cp $TRAVIS_BUILD_DIR/build/libs/ARTIFACT_ID*.jar ARTIFACT_ID.jar

deploy:
  provider: releases
  skip_cleanup: true
  file: "ARTIFACT_ID.jar"
  api_key:
    secure: "KmMdcwTWGubXVRu93/lY1NtyHxrjHK4TzCfemgwjsYzPcZuPmEA+pz+umQBN\n1ZhzUHZwDNsDd2VnBgYq27ZdcS2cRvtyI/IFuM/xJoRi0jpdTn/KsXR47zeE\nr2bFxRqrdY0fERVHSMkBiBrN/KV5T70js4Y6FydsWaQgXCg+WEU="
  on:
    tags: true
    jdk: oraclejdk8

# vim: set shiftwidth=2 tabstop=2 softtabstop=-1 expandtab:

script以前的内容,上篇已经介绍了。下面介绍之后的配置:

  • before_deploy
    在发布前,把编译好的jar改名,放在容易伸手的地方。(我不确定下面的file字段是否支持通配符。)
  • deploy
    发布配置的主体。
    • provider
      指定发布到哪里,这里releases就是指GitHub Releases。
      目前(2016年),Travis支持、、、、、等,约30种发布方式。
    • skip_cleanup
      由于Travis很可能执行到这一步时,会清理掉之前编译的部分过程文件,其中就有可能包含要上传的那些。所以这一条通常设置为true
      不过,在本例中,在before_deploy中就已准备好要上传的jar文件,这一条其实未起作用。
    • file
      指定要上传到GitHub Releases的文件。可以指定多个文件。
    • api_key
      GitHub特有的认证字段,可用账户密码代替,必须要加密。下面几个小节会介绍如何加密。
      实际上,整个配置的难点就在这里,其它字段都没有什么理解、配置上的难度。
    • on
      条件发布()的指定。显然,发布这种事情,不是每次提交、每个分支都应该做的。
      除了下面两类外,还可以指定repo(不影响fork出去的库)、branch(默认为master)、以及condition(自定义条件)。
      • tags
        每次有新的git tag被提交时,GitHub都会自动生成一个release,默认带上源码的压缩包,这是本身就有的机制。
        所以,对Travis来说,在每次打tag时触发一次deployment,是比较合适的时机。
      • jdk
        这个项目虽然在两个JDK下分别进行编译、测试,但其实只需要在一个JDK下发布。
        同类的条件还有python、node等。

私有信息加密

由于Travis的运作,依赖于纯文本的.travis.yml配置文件,所以对public或有可能某一天变成public的项目来说,任何私密信息都不应该放在其中。

这是所有利用第三方CI时,都需要注意的信息安全问题。开源,分享的是文档、代码和创意,而不是银行账户。

Travis显然早已留意了这个问题,给出了加密方案。加密后,大致形式如下:

secure: "KmMdcwTWGubXVRu93/lY1NtyHxrjHK4TzCfemgwjsYzPcZuPmEA+pz+umQBN\n1ZhzUHZwDNsDd2VnBgYq27ZdcS2cRvtyI/IFuM/xJoRi0jpdTn/KsXR47zeE\nr2bFxRqrdY0fERVHSMkBiBrN/KV5T70js4Y6FydsWaQgXCg+WEU="

(注:这个secure拷贝于Travis某介绍文档。我实际使用的加密文本更长些。)

也就是把明文字段,加密成上面的模样,再放到配置文件.travis.yml中。

安装travis.rb

通常,使用gem install travis即可安装。

在中国,由于rubygems.org不够给力(也许可以换种说法),有时根本没法用,所以我们需要更给力的镜像。

gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/

替换后,再执行前述安装命令,即可快速成功安装。

travis命令简介

任何一个网络服务的客户端,完整功能都需要先登录再使用,哪怕它是一个shell命令也一样。

最简单的上手是,执行travis login,根据提示输入GitHub账户、密码登录后,就可以正式开始使用了。但这有个权限过大的问题,它可以对GitHub进行完全控制,所以官方推荐另一种更好的登录方式:指定token。

不过,这个token其实也是GitHub生成的,专门提供给第三方来调用。可以去GitHub上自己生成(见下一小节),然后用travis login --github "TOKEN",可直接登录。

正式使用时,当前目录最好就是项目的根目录,这样travis可以自动识别需要处理的项目,省去很多麻烦。

登录后,在项目的根目录,开始加密:

travis encrypt "TOKEN" --add deploy.api_key

--add可以自动把加密好的内容放到.travis.yml文件的指定字段。也可省略这个参数,拿到secure密文后自行配置。

(注:这个token可以是和登录时的那个相同,也可以不同。)

另外,source ~/.travis/travis.sh后,travis命令就支持补全了。可以把这一行加到.bashrc或之类的shell配置文件中。

熟练使用后,基本可以不登录网站了。

生成GitHub的token

作为第三方CI,无论是发布到GitHub、还是其它地方,都需要足够识别身份的私密信息,或是账户密码,或是某种key。

在这个页面可以生成一个token,并可修改相关权限。对公开项目Travis需要的权限如下:

  • user:email (read-only)
  • read:org (read-only)
  • repo_deployment
  • repo:status
  • write:repo_hook

验证

配置完毕后,打上tag,然后git push --tags就可触发。

由于.travis.yml的配置开始复杂起来,所以大改后,为避免语法错误,最好先做验证,再提交。可以选择:

  • 在线验证:
  • 本地验证:travis lint .travis.yml

参考

  • 上一篇:《》
  • 下一篇:《》

后记

匿:为什么不直接去发布,搞这么麻烦的配置文件?
蟒:我懒嘛!而且,据说优秀的程序员都懒,什么都要尽量自动化。
匿:有折腾这些的时间,你那小项目早就发布了,而且够手动发布一百回。这项目,你打算发布几百次?
蟒:……

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务