【问题标题】:How you increment the version number using Travis CI?如何使用 Travis CI 增加版本号?
【发布时间】:2015-04-19 15:08:38
【问题描述】:

我正在做的项目是一个 jQuery 插件。我已经成功地让 Travis CI 使用 Gulp/NodeJS 构建了一个测试项目。现在我正在尝试找出使用什么工作流程来提高版本号。

在 TeamCity 和 MyGet 中,CI 服务器中有一个设置,用于形成在每次构建时自动递增的版本号模式,构建脚本可以使用它来更新部署文件中的版本并标记 Git 存储库。但是,在 Travis CI 的免费版本中,似乎根本没有版本控制选项。

我已经阅读了几篇关于使用 Travis CI 进行持续部署的文章,hereherehere,但没有一篇文章甚至提到版本控制的主题。显然,版本需要更改才能发布。那么我在这里错过了什么?

我在阅读文档时注意到的另一个问题是它提到 Travis CI 无法更新 GitHub 存储库。这不是基本上意味着它无法创建Git标签吗?

如果无法从 Travis CI 进行版本化,那么此类插件发布过程的典型工作流程是什么?版本控制是否总是手动完成?如果是这样,怎么会有“持续部署”?

【问题讨论】:

  • 你最后找到解决办法了吗?我希望在部署时实现相同的自动增加版本号。
  • 我最终只是保持简单并使用MyGet。我无法启用 TravisCI,因为我不是 repo 的所有者并且所有者没有这样做。对于版本提升,我使用了gulp-bump。这是我的Gulp script 更新版本。请注意,gulp-bump 支持手动凹凸工作流程以及自动化工作流程,但仅支持版本控制 .json 文件。但是你总是可以使用正则表达式来碰撞其他任何东西(参见我的脚本)。
  • "我在阅读文档时注意到的另一个问题是它提到 Travis CI 无法更新 GitHub 存储库"你可以在构建中做到这一点手动,但由于更新文件意味着新的提交,你最终会得到一个新的构建
  • @rolebi - 我的观点是 CI 服务器无法使用版本号标记构建,但在这种特殊情况下,我最终创建了更新多个源文件以同步项目/文档中的版本号也是如此。

标签: github travis-ci


【解决方案1】:

在开始运行 .travis.yml 文件中的指令之前,Travis 将设置一堆 environment variables(在构建项目的 VM 中),其中包含有关您构建的各种信息,例如正在创建的分支构建等等。

您可能想要其中之一:

  • TRAVIS_BUILD_NUMBER:当前构建的编号(例如,“4”)。
  • TRAVIS_JOB_NUMBER:当前作业的编号(例如“4.1”)。

但是,如果您无法控制存储库,任何事情都将非常困难,因为您需要将.travis.yml 文件上传到源的根目录code 文件夹,否则 Travis 将不知道该怎么做。

【讨论】:

  • 谢谢。我确实可以控制存储库——也就是说,我是一个协作者并且可以对其进行提交。但我无权打开 TravisCI。我确实有权启用 MyGet,所以我改为使用它。我不确定为什么 TravisCI 没有找到解决方法,但 MyGet 找到了。
【解决方案2】:

使用bumped 进行发布版本控制。当您对 master 中的更改感到满意时,运行:

bumped release <major|minor|patch>

在您直接或通过发布 PR 推送更改后,您可以检查 Travis CI 中是否存在新标签并将包自动发布到注册表。

【讨论】:

    【解决方案3】:

    如果您认为每个 PR 都必须最终提交给您的最终用户,而不考虑此类更改的影响,那么您的版本号就没有任何意义。

    您无法让用户知道这是破坏兼容性的重大更改还是错误修复。您不允许他在不担心向后兼容性的情况下获得更新。

    目前,提交 id 是您的版本号。

    如果您想为您的版本号赋予意义,那么您必须考虑您的拉取请求对最终用户 (http://semver.org/) 的影响。您必须为特定 PR 或一组 PR 选择版本号。

    因此,基本上,由于您必须为要交付的特定版本“考虑”某个版本号,因此您无法自动化此过程。

    发布/标签创建是要走的路:)

    【讨论】:

    • 我确实使用标签创建,但我希望 CI 服务器成为版本号的官方来源,而不是必须手动运行脚本来增加版本并在每次构建时标记 repo。就我而言,这项手动工作既不必要又容易出错,并且确实违背了使用 CI 的全部目的。 MyGet 可以轻松完成我想做的所有事情,并允许我进行设置,即使我不是 GitHub 存储库的所有者,而 Travis CI 却没有。
    • 你做了很多通常不成立的假设。给定分支上的最新版本通常根据定义您希望用户使用。
    【解决方案4】:

    您可以通过设置一个脚本来完成此操作,该脚本将创建一个 ~/.netrc 文件来访问存储库。在此文件中,您可以指定如下内容:

    machine https://github.com/xxx/yyy.git
    login <blah>
    

    您可以传递一个 github 访问令牌,而不是输入您的凭据。您可以使用travis encrypt 在 .travis.yml 文件中注册它,并导出变量以供脚本使用。在您的脚本中,您可以发出常规的 git 命令,例如:

    git add <some file>
    git commit -m "This is $TRAVIS_BUILD_NUMBER"
    git push origin <branch>
    

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      相关资源
      最近更新 更多