【问题标题】:How to build and release a react application in a web api application with Azure DevOps?如何使用 Azure DevOps 在 Web api 应用程序中构建和发布 React 应用程序?
【发布时间】:2020-03-02 01:11:19
【问题描述】:

我们现在有两个具有两个不同 git 存储库的应用程序。第一个在 ReactJS 中用于前面,第二个在 C# (Web Api 2) 中用于后面。当我们要部署在 Azure 上时,我们构建前端并将输出文件复制到 c# 项目(web api 项目)。由于部署菜单,我们从 Azure 中的 Visual Studio 部署 Web api 应用程序。 这有点无聊,有时当我们手动更改与不同环境相关的参数时会出错。 我们希望使用 Azure Dev Ops 自动化所有这些任务。你做过这种事情吗?如何 ?抱歉,如果这个问题看起来很愚蠢,但是当正面和背面不在同一个 git 存储库中时,我找不到要构建的教程。提前感谢您的帮助。

【问题讨论】:

  • 您是否尝试过以下解决方案。这个案例有什么更新吗?
  • 谢谢Levi,第7步还是有问题,azure构建web应用时,前面复制的文件不在这里,因为csproj没有引用。我不知道如何解决这个问题。每个版本的文件名都不同。
  • 如何将复制文件任务移到visual studio build task之后,复制到web app构建后的文件,也就是将react.js的输出文件复制到build web app的输出文件夹中。
  • 感谢 Levi,将 react.js 的输出文件复制到 web 应用程序的输出文件夹中很困难,因为 web 应用程序在构建后被压缩。我必须添加一个任务来解压缩 web 应用程序并在非常深的树中导航以复制文件。
  • 您是否在您的 c# web 应用程序 csproj 文件中包含 react.js 输出文件。 <Content Include="..\..\reactOutput\**\*.*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> 。您可以查看here 了解有关将文件包含到输出文件夹的更多信息。

标签: reactjs asp.net-web-api build azure-devops release


【解决方案1】:

您可以按照以下步骤构建和部署您的应用程序。我只能给出一个大概的思路和步骤。主要思想是将前端和后端源代码放在一起,并在同一管道中构建它们。构建管道中每个任务的配置和参数需要你根据你的项目来指定。

经典视图管道中显示了以下步骤。检查here 获取 yaml 视图管道

1,登录到您的 Azure DevOps 组织并导航到您的项目。

2、进入Pipelines,然后选择New Pipeline,在页面最后选择Use the classic editor to create a pipeline without YAML

3,通过首先选择源代码的位置来完成向导的步骤。

4、选择来源以指定您的代码所在的位置。并继续选择模板,这里我选择 ASP.NET Core(.NET Framework) 模板。

5,在管道顶部添加一个 powershell 任务(任务可以拖放以重新排序)以运行 git 命令将您的前端 react.js 代码克隆到后端 c# 代码的同一源文件夹中。

如果您的代码托管在 azure repo git 中。您可以在您的 powershell 任务中添加以下脚本。确保选中 Allow scripts to access the OAuth token

cd $(Build.SourcesDirectory)
git clone "https://$env:SYSTEM_ACCESSTOKEN@dev.azure.com/{yourAzureorganizationName}/{yourProjectname}/_git/testrepo"

6,添加 npm install 任务和 npm 自定义任务来构建你的 react.js,你需要指定 包含 package.json 的工作文件夹的路径到你克隆你的 reactjs 代码的文件夹在上面的powershell步骤中。您可以查看步骤here 以供参考。

7、在任务Visual Studio build之前添加一个copy file任务,将构建react.js的输出文件复制到你的c#项目中。

8、配置Visual Studio构建所需的路径和参数 任务和 Visual Studio 测试任务来构建和测试您的后端 C# 代码。

9、在最后添加一个Azure App Service deploy任务部署到azure。

您可能需要添加其他额外任务来构建您的项目。您还可以将部署任务移至发布管道。请查看here 了解更多信息。

您可以在网上找到很多关于如何创建构建管道以及如何将应用程序部署到 Azure 的示例和学习材料。我建议您可以按照一个示例为 c# 项目创建构建管道,并尝试编辑现有管道以集成您的 react.js 项目。

Here是微软官方文档,供你查看。希望以上内容对您有所帮助。

【讨论】:

  • 您好 Levi,感谢您提供这个非常有用的教程。它对构建来说还不错,但我在第 7 步仍然有一个小问题。事实上,我添加了一个任务来复制 web 应用程序中的前端构建 (reactjs) 的文件,但它不起作用。我认为这是由于构建了 Web 应用程序(csproj 不知道前端构建的文件,因此它们被排除在 Web 应用程序构建中)。提前感谢您的帮助。
  • 我不明白为什么没有教程来做这种事情......这似乎是一个很常见的案例。我们构建了一个 react 应用程序,我们构建了一个 web api 应用程序,我们想在 web 应用程序构建中复制前端构建。任何帮助将不胜感激。
  • @Zen Christophe 这个案子进展如何,有什么更新吗?
  • 我会尽快提供教程。抱歉耽搁了。
  • @swedish_junior_dev,是的,这是可能的。下面的答案(屏幕截图)对此进行了解释。首先,您构建您的前端应用程序。工件在此源文件夹中创建(例如):Fronts/OASELIT.Front.RetailLab/app/build。您添加一个任务来复制目标文件夹中的前端文件(在构建后端时创建):$(build.artifactstagingdirectory)\appRetailLab。此目标文件夹来自 /p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\appRetailLab" /p:DeployDefaultTarget=WebPublish
【解决方案2】:

在这里,您可以找到构建和发布两个 web 应用程序(托管 web api)和使用 ReactJS 开发的相关前端的步骤。这是我们的目标:

在 Azure devops 中,我们使用经典编辑器创建了一个管道:

我们选择了我们的 git 存储库和这个模板:

经过一个创建任务的步骤,我们得到:

我们将描述其中的一些任务。例如:

/p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\appRetailLab" /p:DeployDefaultTarget=WebPublish

一旦您构建了两个 Web 应用程序,您就必须复制 Web 应用程序中的前端文件。有两个任务:

最后,您在 build.artifactstagingdirectory 的放置目录中发布您的人工制品: 发布 :

我们的发布并不难:

我们使用 4 个任务:

替换令牌是一个非常有用的插件。您可以将令牌(由模板定义)替换为版本中定义的值。我们使用这个插件来替换我们应用程序前面部分(js文件)中的令牌。

要在我们的 reactjs 应用程序中添加令牌,我们使用 dotenv npm 包。

对于 web.config 参数,不要忘记在部署任务中检查 XML 变量替换。

就是这样。

【讨论】:

  • 哇,回答的很详细,谢谢!我们在同一个 repo 中有一个 .net 后端和一个 react 前端,我们想要部署到另一台服务器上的 IIS。如果可以的话,我会尝试应用你在这里所做的。再次感谢您。
  • 嗨@swedish_junior_dev,谢谢。不要犹豫,问问题,如果我可以帮助...
  • 我还没有时间尝试实施您的建议,但如果您想看看,我确实有我自己的问题的堆栈线程。感谢您抽出宝贵的时间! stackoverflow.com/questions/59630569/…
  • 您好!我们已经将这个项目搁置了几个月,但现在又开始重新启动了。所以我还没有真正将 dist 文件夹放在正确的位置,希望你能看看我在这个评论上方的线程- 当你有时间的时候!
猜你喜欢
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
相关资源
最近更新 更多