eig*_*ein 50 artifacts travis-ci
我想将Travis CI用于我的开源项目.特拉维斯没有提供任何方式来发布制作的文物(但是,他们在未来的计划中有这个问题).
在某处发布/上传工件有哪些变通方法?我被允许在CI机器上执行任何脚本.
简单上传将起作用,但存在安全问题:任何人都可以以与所有来源公开相同的方式上传内容.
Cir*_*四事件 40
GitHub逐步发布
该方法在/sf/answers/1687054561/中提到,并且记录在以下网址:https://docs.travis-ci.com/user/deployment/releases/,所以这里更详细一步步.
它将工件上传到GitHub版本https://github.com/<username>/<repo>/releases,这些版本存在于您推送的每个Git标记.
在https://github.com/settings/tokens下获取个人访问令牌
仅对公共存储库启用"public_repo"访问,对私有启用"repo".
将令牌保存在某处,因为您只能看到它一次.
安装travisgem:
gem install travis
# See: https://stackoverflow.com/a/33119804/895245
gem update --system
Run Code Online (Sandbox Code Playgroud)
然后cd进入您的存储库并:
travis encrypt <api-token>
Run Code Online (Sandbox Code Playgroud)
但最近人们报告说travis encrypt -r githubusername/repositoryname --org需要这样做,请参阅:https://github.com/travis-ci/travis-ci/issues/8128
这将产生如下输出:
secure: "<encrypted-token>"
Run Code Online (Sandbox Code Playgroud)
记下大型加密令牌.
使用.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
Run Code Online (Sandbox Code Playgroud)
发生的事情是特拉维斯取代每个人something: secure: <encrypted-string>,something: <decrypted-string>如下所述:http://docs.travis-ci.com/user/encryption-keys/
这是安全的,因为只有您的授权推送才能解密字符串,因此如果恶意用户尝试发出拉取请求来获取您的字符串,它应该只显示加密的字符串.
现在,无论何时推送带有标记的提交,Travis都会上传release.zip到该版本:
git commit -m 1.0
git tag -m 1.0 1.0
git push --tags
Run Code Online (Sandbox Code Playgroud)
如果您之后已经推送了提交和标记,则可能必须单击Travis UI上的"重新构建"按钮才能上载.
/sf/answers/2662633851/有一些流程的截图.
替代方法:环境变量
我们也可以使用隐藏的环境变量,而不是加密的字符串.
在存储库的Travis设置上https://travis-ci.org/<me>/<myrepo>/settings创建一个环境变量:
GITHUB_API_KEY=<token>
Run Code Online (Sandbox Code Playgroud)
并确保将"在构建日志中显示值"标记为"关闭",并使用:
api_key: '$GITHUB_API_KEY'
Run Code Online (Sandbox Code Playgroud)
虽然这不会在日志中显示拉取请求,但这种方法风险更大,因为我可能会错误地列出构建环境.
好处是这种方法更容易理解.
我的一个简单示例,将从Gnuplot生成的图像上传到GitHub版本:
关于GitHub页面部署的问题:如何从Travis CI发布到Github页面?
min*_*hua 28
最近宣布了"github发布上传"功能.它正式支持所需的一切.见http://docs.travis-ci.com/user/deployment/releases/
如果您的项目基于Github(可能是Travis),那么最简单的方法是检查gh-pages分支下生成的工件.在Github上查看更多信息.
如何做到这一点很大程度上取决于使用的构建系统.有了maven,你可以使用maven-scm-plugin- 你可以在这里找到一个例子.
编辑:你可以在这里找到一个完整的例子:https://github.com/tonnymadsen/ui-bindings/blob/master/com.rcpcompany.updatesite/pom.xml
首先,您必须确保尝试部署发布工件.所以在Github中首先制作标签.要手动完成:
然后在该.travis.yml文件中添加以下配置.对于gradle用户
language: java
jdk:
- oraclejdk7
sudo: required
before_install:
- chmod +x gradlew
script:
- ./gradlew clean build -i --continue
deploy:
provider: releases
api_key: ${api_key}
file: "build/libs/Project.jar"
skip_cleanup: true
on:
all_branches: true
tags: true
Run Code Online (Sandbox Code Playgroud)
这里api_key值是Travis Ci环境变量.哪个指向Github api_key.
file是构建生成的构建工件.我们希望将其部署到gitHub.
on:
all_branches: true
tags: true
Run Code Online (Sandbox Code Playgroud)
是要部署的标记的强制配置.
不,你必须从github获取api_key:
我意识到这是一个较旧的问题,但我想添加另一个我认为比目前讨论的更好的解决方案。
OP 有兴趣从 Travis-CI发布工件。我建议将https://bintray.com/与组织或您自己的个人帐户一起使用(两者都有效,但在 github 组织的情况下,拥有与其匹配的组织并发布工件可能更有意义从那个 github 组织转到它匹配的 bintray 组织)。
这样做的原因是因为 bintray 提供了什么以及它对开源项目的支持。我建议你看看他们的概述:http : //www.jfrog.com/bintray/
您还可以链接到 JCenter,这使您发布的内容更容易让其他人消费/下载/使用(通过 maven、gradle、SBT 等)。
一旦您设置了 bintray(您的帐户或组织),您就可以轻松地将其与 travis 集成。对于 java 和 maven 构建,您可以使用travis-ci 的加密变量选项来加密${BINTRAY_USER}和${BINTRAY_API_KEY}. 然后,您可以设置 maven deploy 以将版本推送到 bintray。在 mavensettings.xml文件中,您只需将使用 travis 加密的环境变量作为用户/密码引用,即:
<servers>
<server>
<id>my-bintray-id</id>
<username>${env.BINTRAY_USER}</username>
<password>${env.BINTRAY_API_KEY}</password>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud)
接下来,您将该distributionManagement部分添加到您的项目中pom.xml,如下所示:
<distributionManagement>
<repository>
<id>my-bintray-id</id>
<url>https://api.bintray.com/maven/myUserName/myRepoName/my_awesome_project;publish=1</url>
</repository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
然后,您将设置.travis.yml文件以在发布时“检测”。我已经使用了本地开发箱中的maven 发布插件的前半部分:(mvn release:prepare忽略后半部分 -- release:preform)。这将代表您制作一个标签,在 pom 中修改版本等。你最终得到的是github 中版本的标签(不是 -SNAPSHOT)。这个标记的提交在下游到达 travis,您.travis.yml将在那里配置 Travis 以构建和发布。
在你的.travis.yml,它配置来测试TRAVIS_TAG,TRAVIS_PULL_REQUEST以及任何其他检查你想之前调用mvn deploy。你会在after_success. 这样,travis一直在构建,但仅 mvn deploy在它是标签并满足您想要的其他条件时才运行(例如,JDK8 构建)。这是一个例子.travis.yml:
language: java
jdk:
- oraclejdk7
- oraclejdk8
after_success:
- mvn clean cobertura:cobertura coveralls:report javadoc:jar
- test "${TRAVIS_PULL_REQUEST}" == "false" && test "${TRAVIS_TAG}" != "" && mvn deploy --settings travis-settings.xml
branches:
only:
- master
# Build tags that match this regex in addition to building the master branch.
- /^my_awesome_project-[0-9]+\.[0-9]+\.[0-9]+/
env:
global:
- secure: cfHTvABEszX79Dhj+u8/3EahMKKpAA2cqh7s3JACtVt5HMEXkkPbeAFlnywO+g4p2kVENcQGbZCiuz2FYBtN3KrIwFQabJE8FtpF57nswPRrmpRL+tWcYtipVC2Mnb4D7o6UR2PiC7g20/9EEWV7OeddXU3fzNBBW+LXkKAL20Ishg/jTDj+DIMFeVU8a6gd+6G2r8rf2jr2PMUeq1lO+eSkm3cjQLjRJN3CNY5GQToV/l1hef732y//6K9prP+H9vbkx+c7KF6W6OsQuXha9hy038J4ZXFWiNZdLUZLytrTcsOdbL2d8qEBv38ycs71kw0eHINMcPbNWYaxWHKeQRIievSPbTqOmm5BSh/keBRQe+aBzKrzw680QcRcnDMFePb1uu9VhpCabu0fBTer/7MENhR/QDoW8g4ydZNqXSWqiJBaYomENhjUF3v/4KzvX5P8bPlVBvgyAAcAzY8+MwLVeZKsJIUAHuS5v6kHSb0F17pvAb1XM+jet92PT/tRh75kVHtwtiPffhCd2/LzjmCLH31CC4WUZDG4OGw/8SbMiGX1Kww1Y9hSp09rQ9ytLaQa1kDa2Nv4syjJRVKWQf3/TS1VLqXBYVZXufY/XtyA0gDV0ZumwNo8ukT5Cnc7hC9oFkRvPkJxvNTzgDWkd6TVUDligxgLQHS/2fZpNo=
- secure: cfHTvABEszX79Dhj+u8/3EahMKKpAA2cqh7s3JACtVt5HMEXkkPbeAFlnywO+g4p2kVENcQGbZCiuz2FYBtN3KrIwFQabJE8FtpF57nswPRrmpRL+tWcYtipVC2Mnb4D7o6UR2PiC7g20/9EEWV7OeddXU3fzNBBW+LXkKAL20Ishg/jTDj+DIMFeVU8a6gd+6G2r8rf2jr2PMUeq1lO+eSkm3cjQLjRJN3CNY5GQToV/l1hef732y//6K9prP+H9vbkx+c7KF6W6OsQuXha9hy038J4ZXFWiNZdLUZLytrTcsOdbL2d8qEBv38ycs71kw0eHINMcPbNWYaxWHKeQRIievSPbTqOmm5BSh/keBRQe+aBzKrzw680QcRcnDMFePb1uu9VhpCabu0fBTer/7MENhR/QDoW8g4ydZNqXSWqiJBaYomENhjUF3v/4KzvX5P8bPlVBvgyAAcAzY8+MwLVeZKsJIUAHuS5v6kHSb0F17pvAb1XM+jet92PT/tRh75kVHtwtiPffhCd2/LzjmCLH31CC4WUZDG4OGw/8SbMiGX1Kww1Y9hSp09rQ9ytLaQa1kDa2Nv4syjJRVKWQf3/TS1VLqXBYVZXufY/XtyA0gDV0ZumwNo8ukT5Cnc7hC9oFkRvPkJxvNTzgDWkd6TVUDligxgLQHS/2fZpNo=
Run Code Online (Sandbox Code Playgroud)
(安全只是一个虚构的例子,在你用 travis加密你的 bintray 用户和bintray api 密钥后,你会在你的 yaml 中看到类似的东西)
这为您提供了一个完整的端到端系统,用于将工件“发布到野外”,然后任何人都可以消费和使用。您正在使用从头开始设计为工件存储库 (bintray) 的服务,并且您正在以一种智能的方式使用 Travis来检查 maven release:prepare 生成的标签。总之,您决定何时发布(mvn release:prepare从您的本地开发箱),travis 将它们放入 bintray。
请注意,github中有一个现有的travis-ci/dpl 拉取请求,以在 Travis 和 bintray 构建之间实现更紧密的集成(travis 提供程序)。这使得让 travis 将工件发送到 bintray 变得更加容易(发布;bintray 不打算保存快照,而是使用Artifactory)。尽管 github 对发布有一些支持,但在撰写本文时,我相信 bintray 在这个角色上更胜一筹,并且是使用的正确工具。
祝你好运!
更新:Github现在禁用了下载API,所以下面的答案是想法.
我的解决方案是使用travis-ci提供的"安全环境变量"和"Github repo Download API"及相关脚本
Github中的每个repo都有下载页面,它也是发布工件的好地方,它有相关的"Repo Download API" http://developer.github.com/v3/repos/downloads/
github-upload.rb从https://github.com/wereHamster/ghup管理GitHub的API.最后,.travis-ci.yml它看起来像下面
env:
global:
- secure: "qkE5/TVKQV/+xBEW5M7ayWMMtFwhu44rQb9zh3n0LH4CkVb+b748lOuW3htc\nXfnXU8aGzOsQBeCJZQstfzsHFPkll+xfhk38cFqNQp7tpMo/AOZIkqd2AIUL\n0bgaFD+1kFAxKTu02m11xzkDNw6FuHMVvoMEQu/fo115i2YmWHo="
after_script:
- ./github-upload.rb sdcamp.zh.pdf larrycai/sdcamp --description "generated by travis-ci, $TRAVIS_JOB_ID" --force --name sdcamp.zh.snapshot.pdf --skip-ssl-verification -t $GITHUB_TOKEN
Run Code Online (Sandbox Code Playgroud)
看我的详细博客:http://larrycaiyu.com/blog/2012/10/25/publish-the-artifacts-inside-travis-ci-to-github/