We have a NodeJs project we are building with TeamCity, then using FTP, uploading the built files to our Azure web app (.azurewebsites). The project contains thousands of files, so the FTP upload times are very slow (takes a very long time). We would prefer to package the build as a ZIP file, then upload the ZIP with FTP (much faster). However, how do we unzip the ZIP file on Azure using script?
Or is there a better way to deploy our build to our Azure web app?
NOTES:
This is an Azure web app service, does not live on a VM
Our process needs to be automated with script to support CI/CD
Deployments with Git and other repos are not feasible
You can use the Kudu API or MsBuild to deploy an app (web app or Function) to Azure App service. The deployment is usually done in 2 parts:
Deploy the app service using ARM templates
Deploy the code/App using one of these methods
If you're using VSTS, there are templates for both steps and make it a 2min process to setup. If you're not using VSTS, the Kudu API is he best way to solve the problem.
You can find more information here : https://github.com/projectkudu/kudu/wiki/REST-API
You can also use the Azure PowerShell Management cmdlets to achieve the same. However, this is at the moment only supported on Windows
Related
I pushed my .net core function application using visual studio and now setting up release pipeline. I can publish and execute the application just fine and it works great on the Azure portal. However when I see the builds for releases in azure-devOps that slot fails with the following error.
2019-06-19T23:21:33.3543380Z ##[error]Error: Deployment of msBuild generated package is not supported. Change package format or use Azure App Service Deploy task. D:\a\r1\a\_...AVFunctionCore.zip
I am not sure where I need to check in my setup to even start diagnosing the issue.
Here are the pipeline steps.
I create a new stage and then select a template of type (Azure app service deployment)
Under tasks
App type is Function App on Windows
Give the app name, resource group , give the slot and
package folder as
$(System.DefaultWorkingDirectory)/**/AVFunctionCore.zip
Everything else on this is left as default.
Azure function app deploy and release pipeline error
According to the error message:
Deployment of msBuild generated package is not supported. Change
package format or use Azure App Service Deploy task.
It seems you are not using the correct task to publish the generated package. Since the generated package is .zip, you can try the suggestion as error message said use Azure App Service Deploy task.
Azure App Service Deploy task:
Use this task in a build or release pipeline to deploy to a range of
App Services on Azure. The task works on cross-platform agents running
Windows, Linux, or Mac and uses several different underlying
deployment technologies.
The task works for ASP.NET, ASP.NET Core, PHP, Java, Python, Go, and
Node.js based web applications.
The task can be used to deploy to a range of Azure App Services such
as:
Web Apps on both Windows and Linux
Web Apps for Containers Function
Apps on both Windows and Linux
Function Apps for Containers
WebJobs
Apps configured under Azure App Service Environments
Check this blog Visual Studio 2017 Tools for Azure Functions and Continuous Integration with VSTS for some more details.
Hope this helps.
I get predefined pipeline from VS integration. So for those you have the same case:
In GUI/Classic mode Release page -> edit pipeline
Edit task in stage section (this is responsible for deploying)
Replace Azure Web App task with Azure App Service deploy
I have more than one project (web api + azure function) in my solution. For the web app I used the zip file, but for the azure function to work I needed to publish the whole folder.
Azure Function
Package or folder:
$(System.DefaultWorkingDirectory)/_Backend/drop
Web Api
Package or folder:
$(System.DefaultWorkingDirectory)/_Backend/drop/ClientAPI.zip
I'm using the ASP.NET Core & Angular startup template from ASP.NET Boilerplate with Multi-Tenancy disabled: 1 database with a single tenant(Default).
I'm also using TeamCity to build/test/publish the projects available in the startup template so I end up with 3 NuGet packages that are getting pushed to Octopus Deploy:
API (Host project, ASP.NET Core Web Application)
Migrator (Console application, capable of migrating the database(s))
UI (Angular App)
I want to deploy this setup to Azure with Octopus Deploy(self hosted, v2018.9.0) in the following way using 2 App Services(Host & UI) and 1 Azure SQL database(Host):
Take the UI and API applications offline, displaying a friendly maintenance message while updating the projects.
Migrate the database using the Migrator package
Deploy the API application package
Deploy the UI application package
Put the API application online, maybe some more tests to check that it's working correctly
Put the UI application online.
If all this was on-prem, I would have no questions. It's the Azure part that I can't figure out because I don't know how to do these things on Azure via Octopus Deploy:
Put an Azure App Service offline/online (using an app_offline.htm file)
Deploy the Migrator package to the API Azure App Service in a special folder(so that I don't overwrite the API deployment) and run the migrator: dotnet [migrator.dll] -q
I tried using the Octopus Deploy "Deploy an Azure Web App" but this step won't let me also deploy the migrator package and run it before the API package is deployed. Or does it? I don't know how.
I tried using the "Run an Azure PowerShell script" but this executes on the Octopus Deploy server and not on the Azure App Service environment right?
Maybe there are other, even better, approaches deploying this setup to Azure?
You can use App service slots to swap in/out version of your logical applications. When you swap there's a warming up that occurs and no loss of traffic.
So basically deploy to backup slot, then swap production with backup slot.
For the db I don't think your strategy is valid. There are some assumptions you are making that will not make your life easy. I would look at handling the db deployment separately with no breaking changes but that's my opinion.
I'm not familiar with Octopus or TeamCity so I won't go into details about those.
We have an ASP.NET Core application build in TFS and we want to deploy the built files to multiple Azure App Services. It appears the solution is to use multiple Azure App Service Deploy steps. While testing this we are able to get the output zip copied to the App Service but we can't figure out how to copy all the raw output files. Can anyone help us understand how to do this?
Base on the screenshot you will copy the files from $(build.stagingdirectory) to App Service.
So, if you want to copy other files, then you can add a Copy Files task before the Azure App Service Deploy step to copy the files to $(build.stagingdirectory) first.
By default, the value of Package or Folder is something like
$(build.artifactstagingdirectory)/**/*.zip
So, you can try to use $(build.stagingdirectory)/** to copy all the files to App Service.
See below articles for more information:
How To: Extend your deployments to Azure App Services
Deploy a web app to Azure App Services
I want to deploy one Azure application package (.cspkg) with N different configuration files(.cscfg) to the cloud.
I know that Visual Studio makes it easy to publish packages with "publish profiles" (.azurePubxml) however I still could not figure out how can I automate deployment of N cloud services all using same app package.
Is it possible? I don't want to go down Powershell route as it's tedious to write a good script and I don't want to mess with uploading cspkg blob etc. Is there an easier way to deploy an app with different cscfgs at once?
Publish-AzureServiceProject does most of the work for you - but you would need to write your own script to swap out the correct configuration file.
My goal is to be able to deploy a package of ASP.NET website stored in Azure Storage as Azure Web Site programmatically (using C# ASP.NET) with just a click of a button. I know this can be done if I will deploy it as Azure Cloud Service by using Service Management API or azure powershell.
I dig into the source code of azure powershell and I see that it can only deploy from local Git and GitHub repo. Does anyone have any idea of how to do it from Azure Storage?
Note: I want to be able to manage all the Web Deploy Packages (stored in Azure Storage) online. I have an ASP.NET MVC website deployed as Azure web site and I will be using this one to automate deployments.
How are you packaging your site in blog storage? One way to publish to Windows Azure Web Sites is to use web deploy. You could package your site as a web deploy package as part of your build, and then use msdeploy.exe to push your bits to the site:
http://technet.microsoft.com/en-us/library/dd569106(v=ws.10).aspx
This would be no different from using web deploy to publish to an IIS Server.
It looks like someone else has used this approach with success:
http://robdmoore.id.au/blog/2013/06/01/windows-azure-web-sites-programmatic-web-deploy/
Hope this helps!
You could totally do this using the Windows Azure Management Libraries and the Storage SDK together. If I'm right in reading this, do you want a Web Site that you use to spin up new Cloud Services, and you want to deploy those services from the server side of your web site. If that's the case, you could do that using the Compute Management Client NuGet.