通过travis在Github上创建包含多个工件的夜间发布

时间:2018-07-15 14:09:31

标签: github travis-ci github-release

我想为我们的OSS测试Github版本。我遇到的第一个问题是,travis似乎无法合并同一构建的不同构建配置中的Github版本(例如,创建OSX和linux版本并在构建过程结束时上载两者),请参阅{{ 3}}

目前对此有什么解决方案吗?如前所述,使用某些单独的空间(例如AWS S3)是不可接受的,因为这会产生成本。

第二个:是否(现在)有一个每晚构建的解决方案?在这种情况下,我希望有相同的工件,但每次都需要提交到develop分支。因此,它不必是“每晚”,而只需是“最新开发者”。我不是很喜欢为每个标签创建标签,但是似乎没有其他解决方案了,是吗?

最后:如何同步这些构建?例如。有些在appveyor(windows)上运行,有些在travis(linux,OSX)上运行,但是所有的发布都应使用相同的发布/标签,而无需手动进行(例如创建标签)。我担心即使在使用例如日期(构建仅在午夜之前开始,但在此之前完成,有些在之后)

该项目是一个C / C ++项目,用于创建特定于操作系统的二进制文件。

1 个答案:

答案 0 :(得分:0)

不知道是否为时已晚(可能),但我有相同的需求并设法使其工作。

此后,“多个作业的合并发行版”必须已修复,因为我有一个运行3个作业(Linux,OSX,Windows)的构建,并且每个版本都为同一发行版贡献了不同的文件。

我发现的“每晚”或“最新”发布的解决方案如下:

  • 将部署设置为on tags: true
  • 在构建未标记提交(未设置TRAVIS_TAG)时,请使用git tag -f将“最新”标签移动到当前提交,并使用git push --tags -f进行推送,但是不要t设置TRAVIS_TAG;这将阻止部署当前版本(由于on tags: true
  • 标记应触发新的已标记提交构建,该构建将把TRAVIS_TAG设置为“最新”,从而触发对名为“最新”的发行版的正常部署。如果该版本已经存在,将对其进行更新。

请注意,要能够从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