利用travis-ci在线编译并发布二进制文件

前言

simple-obfs最新版支持obfs-uri功能,simple-obfs-android也有人及时跟进了这个特性。无奈作者没发布安装文件,我又懒得下载Android环境本地编译。但是因为这个作者使用travis-ci做了集成测试(这是个好习惯啊),所以我们可以通过travis-ci实现在线编译并下载安装包文件。
但是因为travis-ci不支持文件下载,所以我们只能先生成二进制然后发布到相应的平台上再下载,通过官网以看到travis-ci支持很多发布平台,本文以GitHub releases为例。

操作步骤

  1. 先安装ruby环境,再安装travis

    1
    2
    apt install ruby ruby-dev
    gem install travis
  2. 创建私钥并加密
    先去https://github.com/settings/tokens/new 创建一个token,仅勾选repo。

    然后用下面的命令加密

    1
    travis encrypt <key> -r <owner>/<repo>
  3. 再修改fork后项目里的.travis.yml文件,再文件末尾加入以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    before_deploy:
    - git config --local user.name "用户名"
    - git config --local user.email "邮箱"
    - git tag "$(date +'%Y%m%d%H%M%S')-$(git log --format=%h -1)"
    - find $HOME/ -name "二进制文件名" -exec mv {} $HOME/
    deploy:
    provider: releases
    api_key:
    secure: "第2步在cli中生成的密文"
    file: "$HOME/二进制文件名"
    skip_cleanup: true

踩坑经验

  1. github会自动删除在其平台明文出现的token,所以官方文档是错误的,必须要对api_key加密;
  2. 必须要指明要发布的文件的完整路径,最便捷的方法就是在before_deploy用find找到文件并移动到home目录下;

    效果


来源

https://docs.travis-ci.com/user/deployment/releases/
https://github.com/travis-ci/travis-ci/issues/2457
https://docs.travis-ci.com/user/encryption-keys/#Encryption-scheme