2016-03-09 122 views
0

我們正在使用TeamCity來進行構建和部署,作爲其中的一部分,我們希望TeamCity在package.json文件中定義版本號。我們歷史上使用的是gulp-bump,它會影響版本號,但是TeamCity沒有根據package.json文件中的詳細信息建立它的內部版本號。package.json版本和團隊城市

那麼有沒有一種簡單的方法讓TC用特定的版本號更新package.json?我知道我可以通過一個var以某種方式吞嚥,並獲得它設置package.json版本的方式,但我希望有一個更「自動」的方式來做到這一點。

回答

1

這取決於您對自動化的定義。 TeamCity中沒有任何構建功能來更新使用TeamCity 9的各種.json文件,它們吞噬/緩衝等等。

和你一樣我使用gulp-bump來設置版本號,但是我找到了一種方法來設置版本號使用teamcity版本號在package.json文件中。我使用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 

有一個疑難雜症。如果通過require語句使用package.json,則該值將被緩存,並且在使用該文件時可能無法獲得正確的版本。使用require語句導致了我的問題,因爲我最初努力確定爲什麼它使用以前的內部版本號而不是新的內部版本號。

因此我創建了一個新的功能加載文件時我需要閱讀的內容,

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

在我的TeamCity的構建,我必須使用咕嘟咕嘟亞軍類型生成步驟。對於命令我只有「建立」

而且我有額外的命令行下面的參數

--version=%build.number% 

這對我將在的package.json版本。如果您使用的是鮑爾等,那麼只需將其他json文件添加到config.packages