代码之家  ›  专栏  ›  技术社区  ›  Flamefire

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

  •  1
  • Flamefire  · 技术社区  · 6 年前

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

    现在有什么解决办法吗?如前所述,使用AWS S3这样的独立空间是不可接受的,因为它会产生成本。

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

    最后:如何同步这些构建?E、 g.有些在appveyor(windows)上运行,有些在travis(linux,OSX)上运行,但都应该使用相同的release/tag发布,而不需要手动执行(例如创建标记)。我担心那里的比赛条件,即使使用例如日期(建造在午夜前开始,但有些在午夜前完成,有些在午夜后完成)

    0 回复  |  直到 6 年前
        1
  •  0
  •   Olivier Gérardin    4 年前

    我为“nightly”或“latest”版本找到的解决方案如下:

    • 将部署设置为 on tags: true
    • 当建立一个 提交(TRAVIS_TAG not set),将最新标记移动到当前提交 git tag -f 用手推它 git push --tags -f ,但不要设置TRAVIS\u标签;这将阻止部署当前构建(因为 标记上:真 )
    • 标记应触发新的 已标记

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

    同步之所以有效,是因为每个作业都执行相同的标记操作。第一个推送的实际上是移动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项目版本,但是您可以对版本使用任何东西,只要对所有作业(平台)都是相同的。

    before_deploy ,因为 部署前 这意味着它不会被调用为未标记的构建。我用 after_success