package.json版本和teamcity

时间:2016-03-09 09:02:24

标签: json node.js npm teamcity

我们正在使用TeamCity进行构建和部署,作为其中的一部分,我们希望让TeamCity在package.json文件中定义版本号。我们历史上使用gulp-bump会使版本号受到影响,但是TeamCity并没有根据package.json文件中的细节构建其编号。

有没有一种简单的方法让TC用特定的版本号更新package.json?我知道我可以以某种方式将var传递给gulp并让它以这种方式设置package.json版本,但我希望有一种更“自动化”的方式。

4 个答案:

答案 0 :(得分:2)

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

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

--allow-same-version这是重复的版本

答案 1 :(得分:1)

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

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

仅供参考,我使用var $ = require('gulp-load-plugins')({lazy:true});所以如果你看到$ sign就是为什么

我也在使用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;
};

我检查以确保传递版本,因为在dev机器上执行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

答案 2 :(得分:0)

我刚刚向 teamcity 添加了以下命令行构建步骤:

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

哪个会根据您所在城市的组号来调整您的补丁号

答案 3 :(得分:0)

在TeamCity中,我发现(使用各种技巧后)使用Powershell对package.json进行查找和替换要容易得多。

添加Powershell构建步骤:

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