2

我想为我们的 OSS 测试 Github 版本。我遇到的第一个问题是,travis 似乎无法合并来自同一构建的不同构建配置的 Github 版本(例如,创建 OSX 和 linux 版本并在构建过程结束时上传两者),请参阅https: //github.com/travis-ci/travis-ci/issues/8053

目前有什么解决方案吗?如前所述,使用 AWS S3 之类的单独空间是不可接受的,因为它会产生成本。

其次:(现在)是否有夜间构建的解决方案?在这种情况下,我想要相同的人工制品,但每次提交到开发分支。所以它不需要是“每晚”,只是“最新的开发”。我不太喜欢为每个标签创建标签,但似乎没有其他解决方案,是吗?

最后:如何同步这些构建?例如,一些在appveyor(windows)上运行,一些在travis(linux,OSX)上运行,但都应该使用相同的发布/标签发布,而无需手动执行(例如创建标签)。即使使用日期,我也担心那里会出现竞争条件(构建在午夜之前开始,但有些在之前完成,有些在之后)

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

4

1 回答 1

0

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

从那时起,“多个作业的合并版本”必须得到修复,因为我有一个运行 3 个作业(Linux、OSX、Windows)的构建,并且每个作业都为同一个版本贡献不同的文件。

我为“夜间”或“最新”版本找到的解决方案如下:

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

请注意,为了能够从 Travis 构建推送,您需要传递一个身份验证令牌。这在很多地方都有描述,例如那里

同步有效,因为每个作业都执行相同的标记操作。第一个推送实际上移动了 Github repo 上的“最新”标签,下一个得到“一切都是最新的”。您只需对所有作业使用相同的标签。

这是我的脚本来处理这个:

#!/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.

于 2020-06-20T01:33:24.623 回答