package.json versions and teamcity



我们正在使用TeamCity进行构建和部署,作为其中的一部分,我们希望让TeamCity在package.json文件中定义版本号。我们以前使用的是gulp-bump,这会增加版本号,但TeamCity的内部版本号并不是基于package.json文件中的详细信息。

那么,有没有一种简单的方法可以让TC用特定的版本号更新package.json?我知道我可以通过某种方式传递一个var来吞咽,并让它以这种方式设置package.json版本,但我希望有一种更"自动化"的方式来实现。

您可以使用以下命令在构建步骤package.json中轻松更改此命令

npm version "1.0.%build.number%" --allow-same-version

--allow-same-version这是针对重复版本

我刚刚向teamcity添加了一个命令行构建步骤,如下所示:

call npm install -g json
call json -I -f package.json -e "this.version='1.0.%build.number%'"

这将调整您的补丁号,使其与团队城市构建号一致

这取决于您对自动化的定义。TeamCity中没有构建功能来更新使用TeamCity 9的各种.json文件。

和你一样,我使用gulp-bump来设置版本号,但我已经找到了一种方法,可以使用teamcity版本号在package.json文件中设置版本号。

仅供参考,我使用的是var$=require('ulp-load-plugins'(({lazy:true}(;所以如果你看到$sign,这就是的原因

我也在使用码从命令行读取

这就是我正在使用的gump任务,我已经将其设置为邮件构建任务的依赖项。

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 runner类型的构建步骤。对于命令,我只有"构建">

我有以下附加命令行参数

--version=%build.number%

这对我来说是在package.json中设置版本的。如果你使用的是bower等,那么只需将额外的json文件添加到config.packages

在TeamCity中,我发现(在尝试了各种技术之后(使用Powershell在package.json上进行查找和替换要容易得多。

添加Powershell构建步骤:

$packageFile = "D:PathToPackageFilepackage.json"
(Get-Content $packageFile).replace('"version": "0.0.0"', '"version": "%build.number%"') 
| Set-Content $packageFile

最新更新