【问题标题】:gulpfile.js is not run on Azure VSBuildgulpfile.js 不在 Azure VSBuild 上运行
【发布时间】:2021-03-31 09:49:51
【问题描述】:

我有一个 .NET MVC 项目,它在每次构建 /// <binding AfterBuild='default' /> 后执行 gulpfile.js。如果我在 Visual Studio 中本地构建项目,这很有效。但是我必须在每次提交后在 Azure Pipeline 上设置自动构建。 VSBuild@1 任务成功完成,但 gulpfile.js 没有被执行。

gulpfile.js

/// <binding AfterBuild='default' />
'use strict'
//include gulp
var gulp = require('gulp'),

//include plugins
templateCache = require('gulp-angular-templatecache'),
rimraf = require('rimraf'),
concat = require('gulp-concat'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
gutil = require('gulp-util'),
path = require('path');

//concatenate & minify JS Files
function scripts() {
    return gulp.src([...])
.pipe(concat('main.js'))
        .pipe(rename('main.min.js')) 
        .pipe(uglify()) 
        .on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); })
        .pipe(gulp.dest('Build/js'))//put main.js in this folder
}

exports.scripts = scripts;
exports.default = gulp.series(scripts);

Azure 管道 yaml

trigger:
- develop

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'
    
- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

【问题讨论】:

  • Gulp 预安装在 Microsoft 托管的代理上。您可以尝试在VSBuild@1 任务之后添加Gulp task 来执行gulpfile.js。
  • 我确实尝试添加 gulp 任务。这就是我得到的.. C:\windows\system32\cmd.exe /D /S /C "C:\npm\prefix\gulp.cmd --gulpfile D:\a\1\s\src\. ..\gulpfile.js" [19:28:42] D:\a\1\s\src\...\PackageTmp [19:28:42] 尝试运行:npm install ##[错误]gulp 失败并出现错误:进程 'C:\npm\prefix\gulp.cmd' 失败,退出代码为 1 完成:gulp
  • 嗨,本,我的回答对你有用吗?请检查并告知我们结果。
  • 嗨,爱德华,我无法让 gulp 任务工作,但我确实弄清楚了为什么管道任务给了我错误。我认为这是因为它没有在正确的目录上运行。所以我最终做的是在网络服务器上编写一个批处理文件并运行 npm install 和 gulp。

标签: asp.net-mvc azure azure-devops gulp gulp-uglify


【解决方案1】:

我最终做的是让 Azure 将工件部署到我的网络服务器。然后我有一个批处理文件来解压缩并将构建的文件移动到 IIS 目录。然后在批处理文件中,我有以下内容:

CD <<IIS directory>>
npm install
gulp --gulpfile "path\to\gulpfile.js"

这样,它在部署到 IIS 时执行 gulfile.js 以合并和最小化 javascript 文件。它不适用于 Azure 管道的原因是它没有在正确的目录中找到 gulpfilejs 路径

【讨论】:

  • 很高兴听到您已解决此问题并在下面分享您的解决方案。您可以标记您的答案,这样可以帮助遇到相同问题的其他社区成员,谢谢。
【解决方案2】:

根据您的评论,您可以在 gulp 构建之前添加一个任务,只需执行 npm install:

steps:
- task: Npm@1
  displayName: 'npm install'
  inputs:
    command: install
    workingDir: '$(Build.SourcesDirectory)'
    verbose: false

更多详情请参见帖子:Azure DevOps gulp step fails with Local modules not found

更新>> artifact的目录是$(Build.ArtifactStagingDirectory),所以应该是D:\a\1\a。如果工件中没有包含js文件,您可以使用Copy Files task将js文件复制到Publish Build Artifacts task之前的该目录。

【讨论】:

  • 谢谢。我终于能够运行 gulp 任务。但是为什么最小化的js文件没有包含在工件中? [18:49:33] 工作目录更改为 D:\a\1\s\src\ [18:49:34] 使用 gulpfile D:\a\1\s\src\gulpfile.js [18:49: 34] 开始'默认'... [18:49:34] 开始'cleanjs'... [18:49:34] 7.14 毫秒后完成'cleanjs' [18:49:34] 开始'htmlTemplates'.. . [18:49:36] 1.9 秒后完成'htmlTemplates' [18:49:36] 开始'脚本'... [18:49:48] 12 秒后完成'脚本' [18:49:48] 14 秒后完成“默认”完成:gulp
  • 我已经更新了答案,请检查并告诉我结果。
猜你喜欢
  • 2021-05-21
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多