2016-03-09 2 views
0

Мы используем TeamCity для наших сборок и развертываний, и в рамках этого мы хотим, чтобы TeamCity определял номер версии в файле package.json. Мы исторически использовали gulp-bump, который бы повредил номер версии, однако TeamCity не основывал свой номер сборки на деталях в файле package.json.версии package.json и teamcity

Итак, есть простой способ получить TC для обновления package.json с определенным номером версии? Я знаю, что я мог бы передать var, чтобы проглотить каким-то образом, и заставить его установить версию package.json таким образом, но я надеялся, что есть более «автоматизированный» способ сделать это.

ответ

1

Это зависит от вашего определения автоматики. В TeamCity нет функции Build Feature, чтобы обновлять различные файлы .json, которые gulp/bower и т. Д. Используют Teamcity 9.

Как и я, я использую gulp-bump для установки номера версии, но я нашел способ установить номер версии внутри пакета.json файл, используя номер версии teamcity.

FYI, я использую var $ = require ('gulp-load-plugins') ({lazy: true}); так что если вы видите знак $, это почему

Я также использую yargs для чтения из командной строки

То есть задача глотка, что я использую, и я поставил его в качестве зависимости моей почте сборки задача.

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 

Существует Гоча. Если вы используете package.json через инструкцию require, тогда значение будет кэшироваться, и вы можете не получить правильную версию при использовании файла. Использование оператора require вызвало у меня проблемы, поскольку я изначально изо всех сил пытался определить, почему он использовал предыдущий номер сборки, а не новый номер сборки.

Из-за этого я создал новую функцию для загрузки файла, когда мне нужно прочитать содержимое

function getPackageJson() { 
    return JSON.parse(fs.readFileSync('./package.json')); 
} 

В моей TeamCity сборки, у меня есть шаг сборки, используя тип Глотка бегуна. Для команд у меня есть только «строить»

И у меня есть следующие за дополнительные параметры командной строки

--version=%build.number% 

Это для меня устанавливает версию в package.json. Если вы используете bower и т. Д., Просто добавьте дополнительные файлы json в config.packages

Смежные вопросы