使用Angular Application在Azure DevOps中构建发布管道-找不到包含package.json

时间:2019-08-10 15:41:56

标签: angular azure-devops pipeline

我正在为Visual Studio 2017中的ASP.NET Core Angular应用程序设置发布管道,并且npm任务查找package.json文件时遇到了主要问题。我知道文件在那里-最初是在ClientApp文件夹中,而且我也已将其添加到主文件夹和dist文件夹中,以进行测试,而我试图弄清为什么它不喜欢我的文件!

我确实尝试了所有可能性,包括使用$(System.DefaultWorkingDirectory)。这是我第一次在Azure DevOps中工作,也是我第一次尝试建立管道。我无休止地搜索Google,甚至尝试重新排队构建管道。

我完全有可能设置了错误类型的发布管道。我选择了一个空工作,我有3个任务-npm安装,npm构建和发布工件(我一直在尝试遵循一些在线教程)。我还从ASP.Net Core模板制作了构建管道,运行了yaml文件,等等。

请注意,我确实安装了node.js和angular,并确保正确的文件位于dist文件夹中。我添加了一个web.config文件,并将其添加到我的angular json文件中的资产中。我还向package.json文件夹中添加了一个小脚本来进行实际构建。

  "project": {
    "name": "Test"
  },
  "apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": [
        "assets",
        "src/web.config"
      ],
      "index": "index.html",
      "main": "main.ts",
      "polyfills": "polyfills.ts",
      "test": "test.ts",
      "tsconfig": "tsconfig.app.json",
      "testTsconfig": "tsconfig.spec.json",
      "prefix": "app",
      "styles": [
        "styles.css",
        "../node_modules/bootstrap/dist/css/bootstrap.min.css"
      ],
      "scripts": [],
      "environmentSource": "environments/environment.ts",
      "environments": {
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts"
      }
    }
  ],
 "name": "Test",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "prod-build-dev": "ng build --prod --build-optimizer",
    "prod-build-staging": "ng build --prod --configuration=staging --build-optimizer"
  },

我希望npm任务找到package.json文件,但事实并非如此。请查看这些错误消息,其中每个错误消息都会为包含package.json的工作文件夹提供不同的输入。一是找不到目录。另一方面,它找不到文件。

  

错误#1:错误:Npm失败,返回码:4294963238

与:

配对
  

14错误enoent ENOENT:没有这样的文件或目录,请打开   'D:\ a \ r1 \ a \ package.json'2019-08-10T15:08:12.2500818Z 15错误   这与npm无法找到文件有关。

  

错误#2:错误:ENOENT:没有这样的文件或目录,统计信息   'D:\ a \ r1 \ a \ Test \ ClientApp \ dist'

4 个答案:

答案 0 :(得分:0)

欢迎来到Azure开发团队痛苦的世界。一旦您习惯了它们一年左右的时间,它们就不会太糟糕,但是它们在背面仍然很痛苦,几乎没有有用的文档方式(或者有用的SO帖子)。

从理论上讲,您希望构建步骤从最基本的方面看起来像这样:

  • npm安装
  • ng构建
  • 复制/发布工件

1。 npm install

npm task-v1。*

Command:安装

Working folder that contains package.json:使用...导航至Test>Test>ClientApp(鉴于您对回购结构的最新评论)。

2。 ng build

注意:我们使用PS脚本做一些额外的工作,但实际上归结为可以运行ng build。

PowerShell-v2。*

Type:内联

Script:ng build --output-path = $(Build.ArtifactStagingDirectory)

Advanced > Working Directory:使用...导航到您的Test>Test>ClientApp目录。

3。复制/发布工件

Publish build artifacts-v1。*

Path to publish:$(Build.ArtifactStagingDirectory)

选择您的姓名和位置...

理论上-一个非常大的理论-应该起作用。无论您将Angular应用程序埋得有多深,只要它具有标准的Angular cli目录结构,都应该可以从该顶级目录进行构建。

> Test
  > Test
    > ClientApp -- top level dir
      > src
      > e2e
      angular.json
      package.json
      etc...

答案 1 :(得分:0)

  

使用Angular Application在Azure DevOps中构建发布管道-找不到包含package.json的工作文件夹

根据错误消息:

  

没有此类文件或目录,请打开“ D:\ a \ r1 \ a \ package.json”

似乎您没有为选项Working folder that contains package.json使用正确的路径。您正在工件目录的根文件夹中搜索package.json文件。 D:\a\r1\a\

要解决此问题,您应该指定工作文件夹,例如$(System.DefaultWorkingDirectory)\Test\Test\ClientApp

注意:您在构建管道时应发布项目/解决方案,否则,我们将无法在发布管道中获取文件。

希望这会有所帮助。

答案 2 :(得分:0)

我遇到了同样的问题,这是因为运行管道的linux服务器对目录名称区分大小写,而我测试脚本的Windows则不区分大小写。

答案 3 :(得分:0)

在某些情况下,您可能需要通过在工作定义中添加一个步骤来明确告知AzureDevOps实际签出有问题的存储库。

jobs:
  - checkout: self