我想为我们的OSS测试Github版本。我遇到的第一个问题是,travis似乎无法合并同一构建的不同构建配置中的Github版本(例如,创建OSX和linux版本并在构建过程结束时上载两者),请参阅{{ 3}}
目前对此有什么解决方案吗?如前所述,使用某些单独的空间(例如AWS S3)是不可接受的,因为这会产生成本。
第二个:是否(现在)有一个每晚构建的解决方案?在这种情况下,我希望有相同的工件,但每次都需要提交到develop分支。因此,它不必是“每晚”,而只需是“最新开发者”。我不是很喜欢为每个标签创建标签,但是似乎没有其他解决方案了,是吗?
最后:如何同步这些构建?例如。有些在appveyor(windows)上运行,有些在travis(linux,OSX)上运行,但是所有的发布都应使用相同的发布/标签,而无需手动进行(例如创建标签)。我担心即使在使用例如日期(构建仅在午夜之前开始,但在此之前完成,有些在之后)
该项目是一个C / C ++项目,用于创建特定于操作系统的二进制文件。
答案 0 :(得分:0)
不知道是否为时已晚(可能),但我有相同的需求并设法使其工作。
此后,“多个作业的合并发行版”必须已修复,因为我有一个运行3个作业(Linux,OSX,Windows)的构建,并且每个版本都为同一发行版贡献了不同的文件。
我发现的“每晚”或“最新”发布的解决方案如下:
on tags: true
git tag -f
将“最新”标签移动到当前提交,并使用git push --tags -f
进行推送,但是不要t设置TRAVIS_TAG;这将阻止部署当前版本(由于on tags: true
)请注意,要能够从Travis构建中推送,您将需要传递身份验证令牌。许多地方都对此进行了描述,例如there。
因为每个作业都执行相同的标记操作,所以同步有效。第一个要推送的实际上是在Github存储库上移动“最新”标签,第二个则得到“最新信息”。您只需要对所有作业使用相同的标签即可。
这是我用来处理此问题的脚本:
#!/usr/bin/env bash
set -ev
# If we don't have a tag, use the Maven project version to set/update a tag and push.
# Don't set TRAVIS_TAG so that this build will not be deployed.
# The new build that will be triggered by the push will be tagged and deployed as usual.
if [ -z "$TRAVIS_TAG" ] ; then
VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
git config --local user.name "Olivier"
git config --local user.email "ogerardin@yahoo.com"
git tag -f "$VERSION"
git push --tags -f https://${GH_TOKEN}@github.com/ogerardin/xpman.git
fi
请注意,我不使用固定标签,但是我提取了Maven项目版本,但是您可以对VERSION使用任何东西,只要它对所有作业(平台)都相同即可。
也:您不应该从before_deploy
调用此脚本,因为before_deploy
仅在部署适用于当前版本时才执行,并且如果您有on tags: true
则意味着它不会被称为无标记的版本。我使用after_success
。