Teamcity运行gulp并传入参数

时间:2016-04-11 16:52:35

标签: gulp teamcity

我已在本地设置和配置gulp进程,现在我正在努力让它与Teamcity一起使用。

我已经安装了node,并且插入了gulp。

我正在使用的gulp包之一是gulp-bump,因此我可以使用%build-number%变量并使用它来设置我的package.json文件的版本。我正在使用yargs,以便我可以从命令行读取参数

这是我正在使用的gulp任务

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

要使其正常工作,请从命令行调用

gulp build --version=2.3.4

build是我想要运行的gulp任务, - version是我想从命令行读取的值。

任务setVersion是构建任务的依赖项。 还有其他gulp任务使用package.json文件包含在输出的所有.css和js文件的op中,但这些文件是使用包'run-sequence'

作为构建任务的一部分调用的

当我从命令行运行它时,一切都按预期工作。

在我的teamcity构建中,我定义了两个步骤。

步骤1是Node.js NPM跑步者,我可以看到它正确地拉下了所有相关的包裹。

第2步是使用Gulp跑步者。 在此任务中,我将gulp任务设置为“build”,并将其他命令行参数设置为--version =%build.number%

但即使在构建日志中,它似乎没有正确设置版本号

“将版本设置为2.3.4”

它没有正确设置版本,因为我在构建后查看css和js文件时,它们没有使用正确的版本。

但是我知道teamcity正在正确使用%build.number%,因为下一个任务是使用NuGet Pack生成nuget文件,并且版本设置为%build.number%,以及nuget文件的文件名生产确实包含版本号。

我无法将package.json中的版本设置为构建过程的一部分。

我还能做些什么来正确传递内部版本号并正确设置package.json的版本

更新

收到评论后,我发现错误与我正在阅读package.json

的方式有关。

我的gulpfile.js有以下内容:

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

我正在使用package gulp-header然后在页面顶部插入横幅。

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

查看此问题的答案:Javascript: get package.json data in gulpfile.js 有人提到当你使用require加载package.json时,文件被缓存,如果任何进程修改了package.json文件,gulp将不会更新它已经缓存的版本。

所以我修改了例程以按需读取package.json文件:

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

所以在我附加标题的进程中,我改为调用getPackageJson。现在,当我在teamcity中运行该过程时,它正确设置了正确的版本

e.g。

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

1 个答案:

答案 0 :(得分:0)

检查以下是否有效

更新package.json

var issuesId =[1,2,3,4]
var issues = "issue one, issue two, issue three, issue four";

if (issuesId.length >= 2) {
  var str = issues.split(', ');
  var addAnd = str.pop();
  addAnd = 'and ' + addAnd;
  str.push(addAnd);
  var listArr = str.join(', ');
  document.getElementById('text').innerHTML = listArr;
}
else {
  var listArr = issues;
  document.getElementById('text').innerHTML = listArr;
}

然后使用

读取版本
<p>{{listArr}}</p>

并使用此功能,如

 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('./'));
});