我想在我的开源项目中使用Travis CI。Travis没有提供任何方法来发布生成的工件(尽管,他们在未来的计划中有这一点)。
在某处发布/上传工件有哪些解决方法?我可以在CI机器上执行任何脚本。
简单的上传可以工作,但是有一个安全问题:任何人都可以以同样的方式上传东西,因为所有的资源都是公开的。
GitHub逐步发布
该方法在 https://stackoverflow.com/a/24100779/895245 中提到过,并且在以下位置记录得很差: https://docs.travis-ci.com/user/deployment/releases/ ,因此这里将进行更详细的逐步介绍。
它将工件上传到GitHub版本https://github.com/
>
获取个人访问令牌https://github.com/settings/tokens
仅对公共存储库启用“public_repo”访问,对私有存储库启用“repo”访问。
将令牌保存在某个地方,因为您只能看到它一次。
安装< code>travis宝石:
gem install travis
# See: https://stackoverflow.com/a/33119804/895245
gem update --system
然后< code>cd到您的存储库中,并:
travis encrypt <api-token>
但最近有人报告说,需要travis encrypt-r githubusername/repositoryname--org
,请参见:https://github.com/travis-ci/travis-ci/issues/8128
这将产生如下输出:
secure: "<encrypted-token>"
记下大型加密令牌。
使用 .travis.yml
,如下所示:
script:
# This command generates a release.zip file.
- make dist
deploy:
provider: releases
api_key:
secure: "<encrypted-token>"
file: 'release.zip'
skip_cleanup: true
on:
tags
发生的情况是Travis替换了每个< code >东西:
这是安全的,因为只有您授权的push可以解密字符串,所以如果恶意用户试图发出pull请求来获取您的字符串,它应该只显示加密的字符串。
现在,每当您推送带有标签的提交时,Travis 都会将发布.zip
上传到发布:
git commit -m 1.0
git tag -m 1.0 1.0
git push --tags
如果您已经提交了commit和tag,那么您可能需要单击Travis UI上的“Restart build”按钮来上传它。
https://stackoverflow.com/a/38037626/895245有一些流程的屏幕截图。
替代方法:环境变量
>
除了加密的字符串,我们还可以使用隐藏的环境变量。
关于存储库的Travis设置< code>https://travis-ci.org/
GITHUB_API_KEY=<token>
确保将“在构建日志中显示值”标记为“关”,并使用:
api_key: '$GITHUB_API_KEY'
虽然这不会显示在拉请求的日志中,但这种方法风险更大,因为您可能会错误地列出构建的环境。
好处是这种方法更容易理解。
我的一个简单示例,将从Gnuplop生成的图像上传到GitHub版本:
关于 GitHub 页面部署的问题:如何从 Travis CI 发布到 Github 页面?
“github发布上传”功能最近宣布。它正式支持所需的一切。请参阅 http://docs.travis-ci.com/user/deployment/releases/
如果你的项目是基于GitHub的——很可能是Travis——那么最简单的方法就是在< code>gh-pages分支下检入生成的工件。在GitHub上查看更多信息。
如何做到这一点在很大程度上取决于使用的构建系统。使用Maven,您可以使用Maven-scm插件
-您可以在这里找到一个示例。
编辑:你可以在这里找到一个完整的例子:https://github.com/tonnymadsen/ui-bindings/blob/master/com.rcpcompany.updatesite/pom.xml