AWS CDK -- Error: Cannot find module '@aws-cdk/cloud-assembly-schema' in Azure DevOps pipeline

AWS CDK -- Error: Cannot find module '@aws-cdk/cloud-assembly-schema' in Azure DevOps pipeline

运行在 Azure DevOps Pipeline 上使用我的 AWS CDK,但收到此 Cannot find module '@aws-cdk/cloud-assembly-schema' 错误。目前不知道出了什么问题。

运行 cdk synth myStack

管道yml:

trigger:
- none

pool: 
  vmImage: 'ubuntu-latest'

steps:
  
  - task: NodeTool@0
    inputs: 
      versionSpec: '16.x'
    displayName: "Install NodeJS"
  - script: | 
      echo "Check version"
      which node
      echo "Node Version: " 
      sudo node -v
      echo "NPM Version: " 
      sudo npm -v
    displayName: "Node Version check"
 

  - script: |      
      echo "Installing packages"      
      echo "Install AWS CDK"
      sudo npm install -g aws-cdk      
    displayName: 'Installing aws cdk'

  - script: |
      echo "NPM INSTALL"
      sudo  npm install
    displayName: "NPM INSTALL"

  - task: AWSShellScript@1
    inputs:
      awsCredentials: 'azure-infra-deploy-ops'
      regionName: 'ap-southeast-2'
      scriptType: 'inline'
      workingDirectory: '$(Build.SourcesDirectory)'
      inlineScript: |
        echo "Running validations"
        cdk synth myStack
    displayName: 'AWS CDK output'

错误输出:

Error: Cannot find module '@aws-cdk/cloud-assembly-schema'
Require stack:
- /home/vsts/work/1/s/node_modules/@aws-cdk/core/lib/annotations.js
- /home/vsts/work/1/s/node_modules/@aws-cdk/core/lib/tag-aspect.js
- /home/vsts/work/1/s/node_modules/@aws-cdk/core/lib/index.js
- /home/vsts/work/1/s/bin/tandm-cdk.ts
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:941:15)
    at Function.Module._load (node:internal/modules/cjs/loader:774:27)
    at Module.require (node:internal/modules/cjs/loader:1013:19)
    at require (node:internal/modules/cjs/helpers:93:18)
    at Object.<anonymous> (/home/vsts/work/1/s/node_modules/@aws-cdk/core/lib/annotations.ts:1:1)
    at Module._compile (node:internal/modules/cjs/loader:1109:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1138:10)
    at Module.load (node:internal/modules/cjs/loader:989:32)
    at Function.Module._load (node:internal/modules/cjs/loader:829:14)
    at Module.require (node:internal/modules/cjs/loader:1013:19)
Subprocess exited with error 1

##[error]Error: The process '/usr/bin/bash' failed with exit code 1

检查了构建运行时的node_modules,看起来一切正常:

-rw-r--r--   1 vsts docker    543 May  9 23:29 README.md
-rw-r--r--   1 vsts docker   1409 May  9 23:29 azure-pipelines-pr.yml
-rw-r--r--   1 vsts docker   1006 May  9 23:29 azure-pipelines.yml
drwxr-xr-x   2 vsts docker   4096 May  9 23:29 bin
-rw-r--r--   1 vsts docker    682 May  9 23:29 cdk.json
-rw-r--r--   1 vsts docker    130 May  9 23:29 jest.config.js
drwxr-xr-x   2 vsts docker   4096 May  9 23:29 lib
drwxr-xr-x 401 vsts docker  16384 May  9 23:29 node_modules
-rw-r--r--   1 vsts docker 282463 May  9 23:29 package-lock.json
-rw-r--r--   1 vsts docker   1195 May  9 23:29 package.json
drwxr-xr-x   2 vsts docker   4096 May  9 23:29 test
-rw-r--r--   1 vsts docker    598 May  9 23:29 tsconfig.json
/home/vsts/work/1/s
/home/vsts/work/1/s/node_modules/aws-cdk/node_modules/@aws-cdk/cloud-assembly-schema

package.json

"dependencies": {
    "@aws-cdk/aws-certificatemanager": "^1.102.0",
    "@aws-cdk/aws-cloudfront": "^1.102.0",
    "@aws-cdk/aws-cloudwatch": "^1.102.0",
    "@aws-cdk/aws-ec2": "^1.102.0",
    "@aws-cdk/aws-ecr": "^1.102.0",
    "@aws-cdk/aws-ecs": "^1.102.0",
    "@aws-cdk/aws-ecs-patterns": "^1.102.0",
    "@aws-cdk/aws-elasticloadbalancingv2": "^1.102.0",
    "@aws-cdk/aws-iam": "^1.102.0",
    "@aws-cdk/aws-logs": "^1.102.0",
    "@aws-cdk/aws-route53": "^1.102.0",
    "@aws-cdk/aws-route53-targets": "^1.102.0",
    "@aws-cdk/aws-s3": "^1.102.0",
    "@aws-cdk/aws-s3-deployment": "^1.102.0",
    "@aws-cdk/core": "1.102.0",
    "dotenv": "^8.2.0",
    "source-map-support": "^0.5.16"
  },
  "engines": { 
    "node": "16.x"
  }

在调用 cdk synth myStack 之前,您必须安装 aws-cdk 缺少的包。

运行管道任务下的这个命令:

npm i @aws-cdk/cloud-assembly-schema

终于找到问题了。简而言之,它是本地生成 package-lock.json 和构建代理之间的 npm 版本差异。

我整理了资料写进了自己的博客。随便看看:Lesson learn from aws cdk azure pipeline.