使用 Travis 调用 GitHub API 构建 Tag

Posted

技术标签:

【中文标题】使用 Travis 调用 GitHub API 构建 Tag【英文标题】:Call GitHub API with Travis to build Tag 【发布时间】:2014-02-07 13:09:32 【问题描述】:

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

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

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

我对自动部署很陌生,所以如果有任何其他解决方案可以在没有 travis 的情况下执行此操作,请告诉我。我想要实现的是在成功构建后为用户创建一个可下载的版本。

解决方案

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

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

    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"'

【问题讨论】:

【参考方案1】:

您可以创建一个GitHub Personal API Token 来授予对您的存储库的访问权限。 public_repo 范围应该是公共存储库所需的全部。

使用此令牌对 GitHub API 进行身份验证。将令牌与API include it in the Authorization header 一起使用。

curl -H "Authorization: token <YOUR_TOKEN>" https://api.github.com/user

您也可以使用此令牌推送到您的存储库。

git push -q https://<token>@github.com/<user>/<repo>

现在有趣的部分是,您需要将该令牌保密。公开就等于公开您的用户名和密码。


您需要确保通读所引用的文档,并密切关注您的 Travis-CI 日志。这些命令在 bash 中运行,根据您的编写方式或是否有任何错误,您可能意外泄露您的令牌

为了将该令牌保密,Travis-CI 有一个生成公钥和私钥的系统。 encryption keys 特定于您的存储库。

link 拥有所有相关文档;您需要安装 Travis 命令行界面工具,它可以作为 Ruby Gem 使用。

gem install travis

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

travis encrypt SOMEVAR=secretvalue --add

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

这就是你保守秘密的方式。使用 Git 或 GitHub API 创建标签的实现取决于您。想清楚后请分享。

【讨论】:

非常感谢,我想这就是我需要知道的全部内容。当我弄清楚时,我会在这里发布我的解决方案。 我已在答案中添加了我的工作代码。如果需要,您可以编辑此答案并将其粘贴到其中。 :) 感谢您的加密建议。 不能用部署密钥来降低风险吗? docs.travis-ci.com/user/deployment/custom

以上是关于使用 Travis 调用 GitHub API 构建 Tag的主要内容,如果未能解决你的问题,请参考以下文章

github travis-ci持续部署hexo博客

如何在 Travis CI 中为 C++ 项目并行运行多个构建,每个构建都有单独的脚本?

GitHub项目加入Travis-CI的自动集成

在 travis-ci 上使用秘密 api 密钥

Firebase Github Deploy无法解析travis.yml

使用Travis-CI自动化部署Hexo博客