我有ASP.NET核心网络应用程序(VS2017),我开发了Angular 4前端项目(VS Code),它应该是该核心Web应用程序的一部分。我需要为整个事情设置CI。因此,当任何一个项目发生任何变化时,它首先构建Angular 4,获取工件并将它们放入ASP.NET Core项目,然后构建它并将其发布到Azure。
此时,我将Angular 4项目放在一个单独的回购中。因此,理想情况下,我可以在该repo上设置CI,并将其工件发布到Azure存储(例如)。然后,我想为ASP.NET Core repo设置另一个CI设置来触发构建,第一步是获取那些Angular 4工件并将它们放在这里#39;。像这样:
所以问题是 - 我怎么能用VSTS做到这一点?
答案 0 :(得分:3)
好吧,所以我说我有2个项目 - ASP.NET核心MVC项目(Core-P)和Angular 4项目(NG-P)。他们居住在VSTS的独立回购中。目标是自动构建和发布整个项目到Azure App Service。
以下是我的工作方式:
构建任务:
npm command
设置为安装,将arguments
设置为 @ angular / cli @ latest -g 。ng build --aot --output-path dist --base-href work
。注意 - output-path dist :项目输出将被放入' dist' dist文件夹(这是我猜的Angular-CLI的默认值,但我只是想确定)。此外,我在这里使用 - base-href work 选项,因此我的angular 4应用程序将作为[mydomain.com] /在Core-P项目中工作。因此,我们构建了NG-P,它可用作Core-P构建过程中的dist.zip文件,位于Azure Blob存储(或您选择的任何其他位置)。现在,我从ASP.NET Core (PREVIEW)
模板创建了此构建定义。所以,只需为项目创建一个,然后更改为以下内容。
任务:
现在,我们需要抓住 dist.zip 。就我而言,要以某种方式从Azure Blob存储中获取它(如果您使用任何其他方式来共享dist.zip,那么您需要使用自己的任务)。我设法使用Azure PowerShell内联脚本:
$ an =" [your_azure_storage_acc_name]" $ ak =" [storage_acc_key]" $ Ctx = New-AzureStorageContext -StorageAccountName $ an -StorageAccountKey $ ak
$ blobs = Get-AzureStorageBlob -Container" ng-p-dist" -Context $ Ctx $ destFolder =" $ env:BUILD_ARTIFACTSTAGINGDIRECTORY"
New-Item -Path $ destFolder -ItemType目录-Force $ blobs | Get-AzureStorageBlobContent -Destination $ destFolder -Context $ Ctx
这将下载dist.zip并输入Build.ArtifactStagingDirectory
目录。
提取文件 - 任务将dist.zip提取到$(Build.ArtifactStagingDirectory)/$(Build.Repository.Name)/wwwroot/js/app
。因此存档文件模式参数设置为$(Build.ArtifactStagingDirectory)/dist.zip
,目标文件夹设置为$(Build.ArtifactStagingDirectory)/$(Build.Repository.Name)/wwwroot/js/app
PowerShell脚本 - 删除dist.zip,我们不再需要它了。这是一个单行:
Remove-Item" $(Build.ArtifactStagingDirectory)/dist.zip"
因此,这将使用Angular 4 app创建您的ASP.NET Core MVC项目。现在,我必须在此设置中添加两项内容:
所以,HTH