不知道是否为时已晚(可能),但我有同样的需求并设法使其发挥作用。
从那时起,“多个作业的合并版本”必须得到修复,因为我有一个运行 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
.