首页 > 解决方案 > Azure DevOps S3 React/MERN 堆栈

问题描述

有没有人有使用 Azure DevOps 使用他们的扩展将 React 构建包部署到 AWS 的经验?

我坚持只上传 npm build 的构建包。

到目前为止,这是我的脚本:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- script: |
    npm install
    npm test
    npm run build
    - task: S3Upload@1
      inputs:
        awsCredentials: 'AWS Deploy User'
        regionName: 'us-east-1'
        bucketName: 'test'
        globExpressions: '**'
        createBucket: true
  displayName: 'npm install and build'

S3Upload 任务中唯一突出的选项是 sourceFolder。他们使用类似的东西,"$(Build.ArtifactStagingDirectory)"但由于我之前从未使用过,这对我来说没有多大意义。会不会像这样简单$(Build.ArtifactStagingDirectory)/build

在此处输入图像描述

标签: amazon-web-servicesazureamazon-s3azure-devopsdevops

解决方案


预定义变量 $(Build.ArtifactStagingDirectory)映射到c:\agent_work\1\a,这是代理上的本地路径,任何工件在被推送到目的地之前都会复制到该路径。

在您的 yaml 管道中,您的源代码下载到文件夹$(Build.SourcesDirectory)(即。c:\agent_work\1\s)中。并且脚本任务中的 npm 命令都在这个文件夹中运行。所以 npm 构建结果就是这个文件夹$(Build.SourcesDirectory)\build(ie.c:\agent_work\1\s\build)。

S3Upload 任务默认从 $(Build.ArtifactStagingDirectory) 上传文件。您可以将 S3Upload 任务的sourceFolder属性(默认为)具体指向 folder 。见下文:$(Build.ArtifactStagingDirectory)$(Build.SourcesDirectory)\build

- task: S3Upload@1
      inputs:
        awsCredentials: 'AWS Deploy User'
        regionName: 'us-east-1'
        bucketName: 'test'
        globExpressions: '**'
        createBucket: true
        sourceFolder: '$(Build.SourcesDirectory)/build'

另一种解决方法是使用复制文件任务将构建结果从$(Build.SourcesDirectory)\build文件夹复制$(Build.ArtifactStagingDirectory)请参见此处的示例。

- task: CopyFiles@2
  inputs:
    Contents: 'build/**' # Pull the build directory (React)
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

推荐阅读