用于创建工件Angular Universal应用的Azure管道

axkjgtzd  于 2023-05-18  发布在  Angular
关注(0)|答案(2)|浏览(213)

我正在尝试将我的Angular Universal应用部署到Azure Web App Service。
npm run build:ssr && npm run serve:ssr在本地运行良好。
没有ssr渲染npm run start也能很好地工作。
部署简单的应用程序没有ssr工程我的主机太好.我只对ssr的部署有问题。
我的ssr网页配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="iisnode" path="main.js" verb="*" modules="iisnode" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="DynamicContent">
          <match url="/*" />
          <action type="Rewrite" url="main.js"/>
        </rule>
        <rule name="StaticContent" stopProcessing="true">
          <match url="([\S]+[.](jpg|jpeg|gif|css|png|js|ts|cscc|less|ico|html|map|svg))" />
          <action type="None" />
        </rule>
      </rules>
    </rewrite>
    <staticContent>
      <clientCache cacheControlMode="UseMaxAge" />
      <remove fileExtension=".svg" />
      <remove fileExtension=".eot" />
      <remove fileExtension=".ttf" />
      <remove fileExtension=".woff" />
      <remove fileExtension=".woff2" />
      <remove fileExtension=".otf" />
      <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".svg" mimeType="image/svg+xml"  />
      <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
      <mimeMap fileExtension=".woff" mimeType="application/x-woff" />
      <mimeMap fileExtension=".woff2" mimeType="application/x-woff" />
      <mimeMap fileExtension=".otf" mimeType="application/otf" />
    </staticContent>
  </system.webServer>
</configuration>

我的 Azure 管道为ssr
第一例

# Node.js with Angular
# Build a Node.js project that uses Angular.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript

trigger:
  - masters

pool:
  vmImage: ubuntu-latest

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

  - script: |
      npm install -g @angular/cli
      npm install --force
      npm outdated
      npm run build:ssr --prod
    displayName: 'npm install and build'

  - task: CopyFiles@2
    inputs:
      targetFolder: '$(Build.ArtifactStagingDirectory)'

  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: 'dist'
      ArtifactName: 'dist'

第二个案例

# Node.js with Angular
# Build a Node.js project that uses Angular.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript

trigger:
  - masters

pool:
  vmImage: ubuntu-latest

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

  - script: |
      npm install -g @angular/cli
      npm install --force
      npm outdated
      npm run build:ssr --prod
    displayName: 'npm install and build'

  - task: CopyFiles@1
    displayName: 'Copy browser directory from dist directory to the root'
    inputs:
      SourceFolder: '$(Build.SourcesDirectory)/dist'
      TargetFolder: '$(Build.ArtifactStagingDirectory)/app-name'

  - task: CopyFiles@2
    displayName: 'Copy main.js to the root'
    inputs:
      SourceFolder: '$(Build.ArtifactStagingDirectory)/app-name/dist'
      Contents:  main.js
      TargetFolder: '$(Build.ArtifactStagingDirectory)/app-name'

  - task: DeleteFiles@1
    displayName: 'Delete the dist/main.js'
    inputs:
      SourceFolder: '$(Build.ArtifactStagingDirectory)/app-name/dist'
      Contents: 'main.js'
      
  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: 'dist'
      ArtifactName: 'dist'

结果我得到了这个

我在Azure Web App配置上根工件的方法运行良好。我的应用程序不能只运行Angular SSR。错在哪里?在管道中还是在配置文件中?

t98cgbkg

t98cgbkg1#

我使用以下YAML代码在Azure DevOps管道中部署Angular Universal应用程序:-

trigger:

- main

  

pool:

vmImage: ubuntu-latest

  

steps:

- task: NodeTool@0

inputs:

versionSpec: '16.x'

displayName: 'Install Node.js'

- script: |

npm install -g @angular/cli

ng new my-app --defaults --skip-install

cd my-app

ng add @nguniversal/express-engine --skip-confirmation

displayName: 'Create Angular Universal app'

  

- script: |

npm install

npm run build:ssr

workingDirectory: '$(System.DefaultWorkingDirectory)/my-app'

displayName: 'Build Angular Universal app'

  

- task: CopyFiles@2

inputs:

SourceFolder: '$(System.DefaultWorkingDirectory)/my-app/dist/my-app/browser'

Contents: '**'

TargetFolder: '$(Build.ArtifactStagingDirectory)'

displayName: 'Copy files to artifact staging directory'

  

- task: PublishBuildArtifacts@1

inputs:

PathtoPublish: '$(build.artifactstagingdirectory)'

ArtifactName: 'drop'

publishLocation: 'Container'

displayName: 'Publish artifact'

  

- task: AzureRmWebAppDeployment@4

inputs:

ConnectionType: 'AzureRM'

azureSubscription: '<subscription-id>'

appType: 'webAppLinux'

WebAppName: 'siliconwebapp'

packageForLinux: '$(Build.ArtifactStagingDirectory)'

RuntimeStack: 'NODE|16-lts'

StartupCommand: 'npm install && npm run build:ssr && npm start'

displayName: 'Deploy to Azure App Service'

输出:-

展开成功,请参阅以下内容:-

要解决错误,请检查Azure Web应用日志流中的应用日志,如下所示:-

参考:-MS Document1

验证您的Web.config文件,并在运行您的Pipeline时启用调试,以获得有关Pipeline运行的更多信息。

您也可以通过访问Kudu工具查看日志,查看部署是否成功。通过访问部署日志并检查代码文件。

参考:-Ms Document2

0wi1tuuw

0wi1tuuw2#

要为Angular Universal应用创建Azure管道,您可以按照以下步骤操作:
1.设置构建管道:

  • 在Azure DevOps中,转到“管道”部分并创建一个新管道。
  • 选择您的Git仓库并选择您想要构建的分支。
  • 选择“空作业”模板。
  • 如有必要,添加代理池以运行管道。

1.安装依赖项:

  • 添加一个任务来安装Node.js和NPM(如果尚未安装在代理上)。
  • 运行npm install命令来安装Angular Universal应用的所有依赖项。

1.构建app:

  • 运行构建命令npm run build:ssr以生成应用的服务器端呈现输出。
  • 你也可以添加其他构建任务,如linting,测试等。

1.发布工件:

  • 添加一个任务以将生成的输出发布为工件。
  • 指定生成服务器端渲染文件的输出文件夹的路径。
  • 为工件选择名称,例如“my-angular-app”。

1.设置发布管道:

  • 在Azure DevOps中,转到“发布”部分并创建新的发布管道。
  • 选择工件源并选择要释放的工件。
  • 如有必要,请添加部署组,以指定将部署应用程序的位置。
  • 添加一个任务以将工件复制到部署目标。
  • 添加任务以在服务器上启动应用程序。

1.测试app:

  • 添加测试应用的任务,如运行端到端测试、API测试等。

1.部署应用程序:

  • 所有测试通过后,将应用程序部署到生产环境。

以下是为Angular Universal应用创建Azure管道的基本步骤。您可以根据您的特定要求自定义管道。

相关问题