使用Travis调用GitHub API来构建Tag

Mei*_*ign 8 continuous-integration github travis-ci

我在GitHub存储库中创建了一个TravisCI Hook,它在推送到repo后自动运行构建.我想补充的是,如果构建成功,则会自动创建标记.

我发现有一种方法可以使用GitHub API创建标签http://developer.github.com/v3/git/tags/#create-a-tag-object

但是如何控制对我的存储库的访问?我无法在travis.yml中公开我的登录github凭据,因为每个人都可以读取它,因为它是在存储库中组合的.

我是自动部署的新手,所以如果有任何其他解决方案,没有travis,请让我也知道.我想要实现的是在成功构建之后为用户创建可下载的版本.

好的,我终于找到了正确的travis.yaml配置.

它是如何工作的:推送到存储库后,travis将运行我的应用程序的测试.如果测试成功,travis将构建当前版本的预编译版本并将其上传到我在GitHub Repo上创建的特殊版本.

    language: scala
    env:
      global:
        - PLAY_VERSION=2.2.1
        - secure: "HD1x0S9ad/3+G9YUkyT/uTw9lEr+tUQEV4QO+M2Ro1JFSVOzLNZiNoh6FrNb06a0TbencTkftyHYmYjp1/CCyTpF9CMCQ4ddB7TVF9hibH1y9ONVrPJIm5BCEpjGDa4fND8bkcChrpcZDQKIO0ZwArEsl2+IRocnbBT+oYqIFNo="
    before_script:
      - wget http://downloads.typesafe.com/play/${PLAY_VERSION}/play-${PLAY_VERSION}.zip
      - unzip -q play-${PLAY_VERSION}.zip
      - sudo apt-get install jq
    script: play-${PLAY_VERSION}/play test
    notifications:
      email: false
    after_success: 
      - play-${PLAY_VERSION}/play dist
      - cd target/universal/
      - 'ASSETID=$(curl -s -H "Authorization: token ${BUILD_KEY}" "https://api.github.com/repos/meisign/fillable/releases/204198/assets" | jq ".[0].id")'
      - 'curl -XDELETE -s -H "Authorization: token ${BUILD_KEY}" "https://api.github.com/repos/meisign/fillable/releases/assets/$ASSETID"'
      - 'curl -XPOST -s -H "Authorization: token ${BUILD_KEY}" -H "Content-Type: application/zip" --data-binary @./Fillable-1.0-SNAPSHOT.zip "https://uploads.github.com/repos/meisign/fillable/releases/204198/assets?name=Fillable.zip"'
Run Code Online (Sandbox Code Playgroud)

RyP*_*eck 7

您可以创建一个GitHub Personal API令牌,该令牌将授予对您的存储库的访问权限.该public_repo范围应该是所有你需要一个公共仓库.

使用此令牌对GitHub API进行身份验证.要将令牌与API一起使用,请将其包含在Authorization标头中.

curl -H "Authorization: token <YOUR_TOKEN>" https://api.github.com/user
Run Code Online (Sandbox Code Playgroud)

您还可以使用此令牌推送到您的存储库.

git push -q https://<token>@github.com/<user>/<repo>
Run Code Online (Sandbox Code Playgroud)

现在,对于有趣的部分,您需要保持该令牌的秘密.将其公开相当于公开您的用户名和密码.


您需要确保阅读所引用的文档并密切关注您的Travis-CI日志.命令在bash中运行,并且根据您的编写方式或者如果有任何错误,您可能会意外地泄露您的令牌.

为了保证该令牌的秘密,Travis-CI有一个用于生成公钥和私钥的系统.该加密密钥是特定于您的存储库.

链接包含所有相关文档; 您需要安装Travis命令行界面工具,它可以作为Ruby Gem使用.

gem install travis
Run Code Online (Sandbox Code Playgroud)

要加密变量(例如您的个人令牌) -

travis encrypt SOMEVAR=secretvalue --add
Run Code Online (Sandbox Code Playgroud)

Travis假定该命令正在项目目录中运行,并将根据您的存储库提供唯一的公钥来加密您的数据.该--add标志将自动将安全数据放入您的.travis.yml文件中.

这就是你如何保守秘密.使用Git或GitHub API创建标签的实现取决于您.一旦弄清楚,请分享.

  • 非常感谢,我认为这就是我需要知道的.当我弄清楚时,我会在这里发布我的解决方案. (2认同)
  • 我在答案中添加了我的工作代码.如果需要,您可以编辑此答案并将其粘贴到其中.:)感谢加密建议. (2认同)