2016-04-11 11 views
0

gulpプロセスでローカルに設定して設定しましたが、今はTeamcityで動作させようとしています。私はすでにノード、および一気プラグをインストールしているTeamcityがgulpを実行して引数を渡す

。私は%ビルド番号%変数を使用して設定するためにそれを使用することができるように

私が使用してい一気パッケージの一つは、飲み込む、バンプであります私のpackage.jsonファイルのバージョン。私は、コマンドラインから引数を読み取ることができるように、私はこれは私が私が

gulp build --version=2.3.4 
を呼び出すコマンドラインから、この作業を取得するには

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)); 
}); 

を使用していますゴクゴクタスクです

をyargsを使用しています

ビルドは実行したいgulpタスクです。--versionはコマンドラインから読みたい値です。

タスクsetVersionは、ビルドタスクの依存関係です。 package.jsonファイルを使用して出力されるすべての.cssファイルとjsファイルのopにインクルードされる他のgulpタスクがありますが、これらはパッケージ 'run-sequence'を使用してビルドタスクの一部として呼び出されます

これをコマンドラインから実行すると、すべて正常に動作します。

私のチームシティビルドでは、2つのステップが定義されています。

ステップ1は、Node.js NPMランナーです。これは、すべての関連パッケージを正しくプルダウンしていることがわかります。

ステップ2はGulpランナーを使用しています。 このタスクでは、gulpタスクを「ビルド」として設定し、追加のコマンドラインパラメータを--version =%build.number%

として設定しましたが、バージョン番号が正しく設定されていないようですビルドで、私がビルドした後、CSSやJSファイルを確認するとき、彼らは使用していないとして、それは正しくバージョンを設定していない

「2.3.4へのバージョンを設定する」

を言っているログにもかかわらず、正しいバージョン。

しかし、NuGet Packを使用してNugetファイルを生成するのがチームビルディングで、%build.number%が正しく使用されていることがわかりました。バージョンは%build.number%に設定されています。生成されたファイルにバージョン番号が正しく含まれています。

ビルドプロセスの一部として正しく設定されたpackage.json内のバージョンを取得できません。

他に何私が正しくビルド番号を渡すために行うことができ、正しく受け取ったコメントの後package.json

のバージョンを更新

を設定するために、私はエラーがでたことを発見しました私が読んでいた方法package.json

私のgulpfile。jsは次のものを持っていました:

var pkg = require('./package.json'); 
var banner = ['/**', 
    ' * <%= pkg.name %>', 
    ' * @version v<%= pkg.version %>', 
    ' */', 
    ''].join('\n'); 

私はパッケージのgulp-headerを使って、ページの上部にバナーを挿入していました。この質問への回答を見てみると

$.header(banner, { pkg: pkg }) 

Javascript: get package.json data in gulpfile.js それはあなたが、ファイルがキャッシュされているpackage.jsonロードするために必要とし、使用時に任意のプロセスはpackage.jsonファイルを変更した場合、がぶ飲みは更新されませんと述べました。既にキャッシュされているバージョン

だから私は、オンデマンドでpackage.jsonファイルを読むためにルーチンを修正:私の過程でそう

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

ヘッダを付加した場合、私はgetPackageJsonを呼び出すように変更されたこと。今すぐチームシティーでプロセスを実行すると、正しいバージョンが正しく設定されています。

var pkg = getPackageJson(); 
return gulp 
    .src(config.src.sass) 
    .pipe($.sass()) 
    .pipe($.header(banner, { pkg: pkg })) 
+0

'config.dest.rootは後のプロセスで使用されている場所ではないため、選択したpackage.configが変更されたpackage.configと異なる場合 – harishr

+0

@entre my config.dest.rootが 'として定義されています。/'とそれ以降のpackage.jsonを使用するプロセスは、require(' ./ package.json ')として定義されたpkg変数を参照しています。私は彼らがすべて同じファイルを参照していると確信しています。 –

+0

@entreあなたのコメントは私の考えであり、私はこの質問を見つけました:http://stackoverflow.com/questions/22645779/javascript-get-package-json-data-in-gulpfile-js要求としてのプロセスの開始、ファイルの内容がキャッシュされています。 packages.jsonで変数をバンプすると、キャッシュ内のファイルが更新されていません。私はこのファイルの内容をどのように読んでいるのかを変えなければならないように見えます –

答えて

0

gulp.task('bump-version', function() { 
    return gulp.src(['./bower.json', './package.json']) 
    .pipe(plugins.if(!bumpOpt.type, plugins.prompt.prompt(bumpPrompt, function(res){ bumpOpt.type = res.bump; }))) 
    .pipe(plugins.bump(bumpOpt).on('error', plugins.util.log)) 
    .pipe(gulp.dest('./')); 
}); 

package.json

更新を働き、その後

function getPackageJsonVersion() { 
//We parse the json file instead of using require because require caches multiple calls so the version number won't be updated 
return JSON.parse(fs.readFileSync('./package.json', 'utf8')).version; 
}; 

を使用してバージョンを読んで、

gulp.task('create-new-tag', function (cb) { 
    var version = getPackageJsonVersion(); 
    plugins.git.tag(version, 'Created Tag for version: ' + version, function (error) { 
    if (error) { return cb(error); } 
    plugins.git.push('origin', 'master', {args: '--tags'}, cb); 
    }); 
}); 
0のように、この機能を使用するには、以下の場合だけをチェック
関連する問題