猿问

如何在 Azure 构建管道中打包 JS 应用程序并保存在单独的 C# 存储库中

使用两个单独的存储库(因为我就是这样继承它们的)我正在尝试运行一个自定义脚本来构建一个仅限 JS 的应用程序,然后将该应用程序与一个 C# API 应用程序一起复制和部署,该应用程序位于一个第二个存储库。将 Azure DevOps Services(基于云)用于存储库和管道。


正如我上面所指出的,我正在通过运行这些脚本的过程来创建一个可以使用我们的 API 部署的单个 .js 文件(JS 应用程序由我们的各种应用程序调用和创建) API)。我的难题是如何使用 Azure 的 Build Pipe 来解决这个问题,因为我可以运行脚本,但是创建的文件然后被存储在哪里(以及在哪里引用它们),然后获取该文件并将这个创建插入到存储库中C# API 应用程序,从而启动第二次构建,然后将 C# 应用程序部署到适当的服务。


在另一个 JS 项目中,我已成功复制构建管道中的文件,然后将这些“构建”推送到适当的环境,但我无法复制特定文件,按照npm run build-prod保存然后插入文件的步骤第二个存储库的已知静态位置。注意:两个存储库位于同一个组织中。


这是我的 JS 应用程序的粗略 YAML 草案:



trigger:

- master


pool:

  vmImage: 'vs2017-win2016'


steps:

- task: NodeTool@0

  inputs:

    versionSpec: '10.x'

  displayName: 'Install Node.js'


- script: |

    npm install

    npm run build-prod

  displayName: 'npm install and build-prod'


- task: CopyFiles@2

  inputs:

    SourceFolder: '$(agent.builddirectory)/dist/'

    Contents: '**'

    TargetFolder: '$(build.artifactstagingdirectory)'


- task: PublishBuildArtifacts@1

  inputs:

    PathtoPublish: '$(Build.ArtifactStagingDirectory)/closet-api.js'

    ArtifactName: 'closet-api.js'

    publishLocation: 'Container'

感谢您的帮助!


2019 年 12 月 2 日小更新我更新了 YAML 以正确运行我的自定义构建脚本(包含在 JS 文件中)并获取所需的文件。现在的难题是更彻底地了解该文件的确切位置,因此,在单独构建管道中的另一个项目中,我可能会获取 .js 文件并在我的 C# 项目中使用它。


trigger:

- master


pool:

  vmImage: 'vs2017-win2016'


steps:

- task: NodeTool@0

  inputs:

    versionSpec: '10.x'

  displayName: 'Install Node.js'


- script: npm install

  displayName: 'npm install'


- script: npm run build-prod

  displayName: 'Run Build Script for Prod'

- task: CopyFiles@2

  displayName: 'Copy client-api.js file to: $(Build.ArtifactStagingDirectory)'

  inputs:

    SourceFolder: '$(Build.SourcesDirectory)'

    Contents: '**\dist\closet-api.js'

    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1

  inputs:

    pathtoPublish: '$(Build.ArtifactStagingDirectory)'

    artifactName: closet-api.js



人到中年有点甜
浏览 188回答 2
2回答

富国沪深

经过大量的试验和努力,我已经能够找到一个似乎可以完成项目这个阶段的解决方法:TL;博士从我在 JS 构建管道中指定的路径下载构建工件(在本例中downloadPath: '$(System.ArtifactsDirectory)')将文件复制到 C# 项目中的指定文件路径并覆盖现有文件steps:#Download JS app from published JS Build Pipe- task: DownloadBuildArtifacts@0  inputs:    buildType: 'specific'    project: '(project identifier here)'    pipeline: '7'    buildVersionToDownload: 'latest'    downloadType: 'specific'    downloadPath: '$(System.ArtifactsDirectory)'- task: CopyFiles@2  inputs:    SourceFolder: '$(System.ArtifactsDirectory)\folder-name-where-item-was-saved'    Contents: '**'    TargetFolder: '$(Build.SourcesDirectory)\directory\where\I\want\built\file'    OverWrite: true现在我必须开始努力从另一个管道触发管道,但那是另一天和另一美元。继续重新设计我们的部署流程。

慕的地10843

我认为您需要创建第三个管道,您可以在其中从 C# API 和 JS 应用程序下载工件,然后您可以组织它们并部署到目标服务器。这是一个例子:
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答