如何使用Travis CI递增版本号?

15
我正在开发一个jQuery插件。我已经成功地使用Gulp/NodeJS让Travis CI构建了一个测试项目。现在我正试图找出应该使用哪种工作流来升级版本号。
在TeamCity和MyGet中,CI服务器有一个设置,可以形成一个版本号模式,每次构建时自动递增,这可以用于构建脚本中更新部署文件的版本并为Git仓库打上标签。然而,在Travis CI的免费版本中,似乎没有任何关于版本控制的选项。
我阅读了几篇关于Travis CI持续部署的文章,在这里在这里在这里,但它们都没有涉及版本控制的话题。显然,版本需要在发布时更改。那么我错过了什么?
当我查看文档时发现另一个问题是,文档提到Travis CI不能更新GitHub仓库。这不基本上意味着它将无法创建Git标签吗?
如果没有办法从Travis CI进行版本控制,那么这样的插件发布过程的典型工作流是什么?版本控制始终是手动完成的吗?如果是,那么如何实现“持续部署”?

你最终找到解决方案了吗?我也想实现同样的功能,在部署时自动增加版本号。 - sorin
我最终选择了简单的 MyGet。由于我不是仓库的所有者,因此无法启用TravisCI,而所有者也没有这样做。对于版本升级,我使用了 gulp-bump。这是我的 Gulp脚本,用于更新版本。请注意,gulp-bump支持手动升级工作流和自动化工作流,但仅支持对 .json 文件进行版本控制。但您始终可以使用正则表达式来升级其他任何内容(请参见我的脚本)。 - NightOwl888
我在查阅文档时注意到的另一个问题是,文档提到Travis CI无法更新GitHub存储库。虽然你可以手动在构建中完成更新,但由于更新文件意味着新提交,你最终会得到一个新的构建。 - rolebi
@rolebi - 我的观点是CI服务器无法使用版本号标记构建, 但在这种特殊情况下,我最终创建了脚本以更新多个源文件,以将版本号在整个项目/文档中进行同步。 - NightOwl888
4个回答

7
在运行您的.travis.yml文件中的指令之前,Travis会在构建您的项目的VM中设置一堆环境变量,其中包含有关您的构建的各种信息,例如正在构建哪个分支等等。
您可能需要其中之一:
  • TRAVIS_BUILD_NUMBER:当前构建的编号(例如“4”)。
  • TRAVIS_JOB_NUMBER:当前工作的编号(例如“4.1”)。
但是,如果您没有对存储库进行控制,那么要做任何明智的事情都将非常困难,因为您需要将.travis.yml文件上传到源代码文件夹的根目录中,否则Travis将不知道该怎么办。

谢谢。我确实控制着代码库——也就是说,我是协作者,可以对其进行提交。但我没有权限打开TravisCI。我确实有权限启用MyGet,所以我选择了它。我不确定为什么TravisCI没有找到解决方法,但MyGet做到了。 - NightOwl888

7

使用 bumped 进行版本发布。当您满意 master 分支上的更改后,运行以下命令:

bumped release <major|minor|patch>

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


5
如果您认为每个公关必须最终到达您的最终用户,而不考虑此类更改的影响,则您的版本号没有意义。您不提供让用户知道它是破坏兼容性的重大更改还是错误修复的方式。您不允许他更新而不担心向后兼容性。目前,提交ID是您的版本号。如果您想赋予版本号意义,则必须考虑拉取请求对最终用户的影响(http://semver.org/)。您必须为特定PR或一组PR选择版本号。因此,基本上,由于您必须“思考”要交付的特定版本的某个版本号,因此无法自动化此过程。发布/标记创建是正确的方法:)

我确实使用标签创建,但我希望CI服务器成为版本号的官方来源,而不是每次构建都手动运行脚本来增加版本并标记存储库。这种手动工作既不必要又容易出错,从我的角度来看,这真的破坏了使用CI的整个目的。MyGet可以满足我所有的需求,而且即使我不是GitHub存储库的所有者,也可以设置它,而Travis CI则不能。 - NightOwl888
你经常做出很多不成立的假设。在给定分支上的最新版本通常是你希望用户使用的版本。 - user239558

1
你可以通过设置一个脚本来创建一个 ~/.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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接