这取决于您对自动化的定义。 TeamCity 中没有构建功能来更新使用 Teamcity 9 吞咽/凉亭等的各种 .json 文件。
和你一样,我正在使用 gulp-bump 设置版本号,但我找到了一种使用 teamcity 版本号在 package.json 文件中设置版本号的方法。
仅供参考,我正在使用 var $ = require('gulp-load-plugins')({ lazy: true });因此,如果您看到 $ 符号,这就是原因
我也在使用 yargs 从命令行读取
这是我正在使用的 gulp 任务,我已将其设置为我的邮件构建任务的依赖项。
var args = require('yargs').argv;
var fs = require('fs');
gulp.task('setVersion', function () {
var msg = 'Setting version';
var version = args.version;
var options = {};
if (version) {
options.version = version;
msg += ' to ' + version;
}
log(msg);
return gulp
.src(config.packages)
.pipe($.print())
.pipe(version ? $.bump(options) : $.util.noop())
.pipe(gulp.dest(config.dest.root));
});
这是我的配置。它被缩写为只显示需要的东西
module.exports = function () {
var root = './';
var config = {
dest: {
root: root,
},
packages: [
'./package.json'
]
};
return config;
};
我检查以确保版本通过,因为当 gulpfile 在开发机器上执行时,不需要设置版本号,因为我只关心 TeamCity 上的内部版本号。
所以如果你从节点命令行调用它会是
gulp build --version=2.3.4
有一个问题。如果您通过 require 语句使用 package.json,则该值将被缓存,并且您在使用该文件时可能无法获得正确的版本。使用 require 语句给我带来了问题,因为我最初很难确定为什么它使用以前的内部版本号而不是新的内部版本号。
因此,我创建了一个新函数来在需要读取内容时加载文件
function getPackageJson() {
return JSON.parse(fs.readFileSync('./package.json'));
}
在我的 TeamCity 构建中,我有一个使用 Gulp 运行器类型的构建步骤。对于我只有“构建”的命令
我有以下附加命令行参数
--version=%build.number%
这对我来说是在 package.json 中设置版本。如果您使用的是 bower 等,则只需将其他 json 文件添加到 config.packages