Implementación de Git local en Azure App ServiceLocal Git deployment to Azure App Service

En esta guía se muestra cómo implementar la aplicación en Azure App Service desde un repositorio Git en la máquina local.This how-to guide shows you how to deploy your app to Azure App Service from a Git repository on your local computer.

Requisitos previosPrerequisites

Para seguir los pasos de esta guía:To follow the steps in this how-to guide:

  • Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don't have an Azure subscription, create a free account before you begin.

  • Instale Git.Install Git.

  • Obtenga un repositorio Git local con el código que quiere implementar.Have a local Git repository with code you want to deploy. Para descargar un repositorio de ejemplo, ejecute el comando siguiente en la ventana del terminal local:To download a sample repository, run the following command in your local terminal window:

    git clone https://github.com/Azure-Samples/nodejs-docs-hello-world.git
    

Preparación del repositorioPrepare your repository

Para obtener compilaciones automáticas del servidor de compilación de Kudu para Azure App Service, asegúrese de que la raíz del repositorio tiene los archivos correctos del proyecto.To get automatic builds from Azure App Service Kudu build server, make sure that your repository root has the correct files in your project.

Tiempo de ejecuciónRuntime Archivos del directorio raízRoot directory files
ASP.NET (solo Windows)ASP.NET (Windows only) *.sln, *.csproj o default.aspx*.sln, *.csproj, or default.aspx
ASP.NET CoreASP.NET Core *.sln o *.csproj*.sln or *.csproj
PHPPHP index.phpindex.php
Ruby (solo Linux)Ruby (Linux only) GemfileGemfile
Node.jsNode.js server.js, app.js o package.json con un script de inicioserver.js, app.js, or package.json with a start script
PythonPython *.py, requirements.txt o runtime.txt*.py, requirements.txt, or runtime.txt
HTMLHTML default.htm, default.html, default.asp, index.htm, index.html o iisstart.htmdefault.htm, default.html, default.asp, index.htm, index.html, or iisstart.htm
Trabajos webWebJobs <nombre_de_trabajo>/run.<extensión> en App_Data/jobs/continuous para WebJobs continuos o App_Data/jobs/triggered para WebJobs desencadenados.<job_name>/run.<extension> under App_Data/jobs/continuous for continuous WebJobs, or App_Data/jobs/triggered for triggered WebJobs. Para más información, consulte la documentación de WebJobs de Kudu.For more information, see Kudu WebJobs documentation.
FunctionsFunctions Consulte Implementación continua para Azure Functions.See Continuous deployment for Azure Functions.

Para personalizar la implementación puede incluir un archivo .deployment en la raíz del repositorio.To customize your deployment, include a .deployment file in the repository root. Para más información, consulte el artículo sobre la personalización de las implementaciones y el artículo sobre el script de implementación personalizado.For more information, see Customize deployments and Custom deployment script.

Nota

Si desarrolla en Visual Studio, deje que Visual Studio cree un repositorio en su lugar.If you develop in Visual Studio, let Visual Studio create a repository for you. El proyecto está listo inmediatamente para su implementación mediante GIT.The project is immediately ready to be deployed by using Git.

Uso de Azure Cloud ShellUse Azure Cloud Shell

En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell le permite usar bash o PowerShell para trabajar con servicios de Azure.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Para iniciar Azure Cloud Shell:To launch Azure Cloud Shell:

OpciónOption Ejemplo o vínculoExample/Link
Seleccione Probarlo en la esquina superior derecha de un bloque de código.Select Try It in the upper-right corner of a code block. Solo con seleccionar Probar no se copia automáticamente el código en Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Ejemplo de Probarlo para Azure Cloud Shell
Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. Iniciar Cloud Shell en una nueva ventanaLaunch Cloud Shell in a new window
Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Botón Cloud Shell en Azure Portal

Para ejecutar el código de este artículo en Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Abra Cloud Shell.Open Cloud Shell.
  2. Seleccione el botón Copiar de un bloque de código para copiar el código.Select the Copy button on a code block to copy the code.
  3. Pegue el código en la sesión de Cloud Shell con Ctrl+Mayús+V en Windows y Linux, o Cmd+Mayús+V en macOS.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Presione ENTRAR para ejecutar el código.Press Enter to run the code.

Implementación con el servidor de compilación KuduDeploy with Kudu build server

La manera más fácil de habilitar la implementación de Git local para la aplicación con el servidor de compilación Kudu App Service es usar Azure Cloud Shell.The easiest way to enable local Git deployment for your app with the Kudu App Service build server is to use Azure Cloud Shell.

Configuración de un usuario de implementaciónConfigure a deployment user

Se puede implementar FTP y Git local en una aplicación web de Azure mediante un usuario de implementación.FTP and local Git can deploy to an Azure web app by using a deployment user. Una vez configurado este usuario de implementación, podrá usarlo en todas las implementaciones de Azure.Once you configure your deployment user, you can use it for all your Azure deployments. El nombre de usuario y la contraseña en el nivel de cuenta son diferentes de las credenciales de suscripción de Azure.Your account-level deployment username and password are different from your Azure subscription credentials.

Para configurar el usuario de implementación, ejecute el comando az webapp deployment user set en Azure Cloud Shell.To configure the deployment user, run the az webapp deployment user set command in Azure Cloud Shell. Reemplace <username> y <password> por su nombre de usuario y contraseña.Replace <username> and <password> with a deployment user username and password.

  • El nombre de usuario debe ser único dentro de Azure y no debe contener el símbolo "@" para las inserciones de Git local.The username must be unique within Azure, and for local Git pushes, must not contain the ‘@’ symbol.
  • La contraseña debe tener al menos ocho caracteres y dos de los tres elementos siguientes: letras, números y símbolos.The password must be at least eight characters long, with two of the following three elements: letters, numbers, and symbols.
az webapp deployment user set --user-name <username> --password <password>

La salida JSON muestra la contraseña como null.The JSON output shows the password as null. Si se produce un error 'Conflict'. Details: 409, cambie el nombre de usuario.If you get a 'Conflict'. Details: 409 error, change the username. Si se produce un error 'Bad Request'. Details: 400, use una contraseña más segura.If you get a 'Bad Request'. Details: 400 error, use a stronger password.

Anote el nombre de usuario y la contraseña que se usarán para implementar las aplicaciones web.Record your username and password to use to deploy your web apps.

Obtener la dirección URL de implementaciónGet the deployment URL

Para obtener la URL para habilitar la implementación de Git local de una aplicación existente, ejecute az webapp deployment source config-local-git en Cloud Shell.To get the URL to enable local Git deployment for an existing app, run az webapp deployment source config-local-git in the Cloud Shell. Reemplace <app-name> y <group-name> con los nombres de la aplicación y el grupo de recursos de Azure.Replace <app-name> and <group-name> with the names of your app and its Azure resource group.

az webapp deployment source config-local-git --name <app-name> --resource-group <group-name>

Igualmente, para crear una aplicación habilitada para Git, ejecute az webapp create en Cloud Shell con el parámetro --deployment-local-git.Or, to create a new Git-enabled app, run az webapp create in the Cloud Shell with the --deployment-local-git parameter. Reemplace <app-name>, <group-name> y <plan-name> con los nombres de la nueva aplicación de Git, el grupo de recursos de Azure y el plan de Azure App Service.Replace <app-name>, <group-name>, and <plan-name> with the names for your new Git app, its Azure resource group, and its Azure App Service plan.

az webapp create --name <app-name> --resource-group <group-name> --plan <plan-name> --deployment-local-git

Cualquiera de los comandos devuelve una dirección URL como: https://<deployment-username>@<app-name>.scm.azurewebsites.net/<app-name>.git.Either command returns a URL like: https://<deployment-username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Use esta dirección URL para implementar la aplicación en el siguiente paso.Use this URL to deploy your app in the next step.

En lugar de usar esta dirección URL de nivel de cuenta, también puede habilitar la instancia de Git local con las credenciales del nivel de aplicación.Instead of using this account-level URL, you can also enable local Git by using app-level credentials. Azure App Service genera automáticamente estas credenciales para cada aplicación.Azure App Service automatically generates these credentials for every app.

Puede obtener las credenciales de la aplicación ejecutando el siguiente comando en Cloud Shell.Get the app credentials by running the following command in the Cloud Shell. Reemplace <app-name> y <group-name> con el nombre de la aplicación y el nombre del grupo de recursos de Azure.Replace <app-name> and <group-name> with your app's name and Azure resource group name.

az webapp deployment list-publishing-credentials --name <app-name> --resource-group <group-name> --query scmUri --output tsv

Use la dirección URL que vuelve a implementar la aplicación en el siguiente paso.Use the URL that returns to deploy your app in the next step.

Implementación de la aplicación webDeploy the web app

  1. Abra una ventana del terminal local en su repositorio de Git local y agregue una instancia remota de Azure.Open a local terminal window to your local Git repository, and add an Azure remote. En el siguiente comando, reemplace <url> con la dirección URL específica del usuario de la implementación o la dirección URL específica de la aplicación que obtuvo en el paso anterior.In the following command, replace <url> with the deployment user-specific URL or app-specific URL you got from the previous step.

    git remote add azure <url>
    
  2. Acceda a la instancia remota de Azure con git push azure master.Push to the Azure remote with git push azure master.

  3. En la ventana del administrador de credenciales de Git, escriba su contraseña de usuario de implementación, no la contraseña de inicio de sesión de Azure.In the Git Credential Manager window, enter your deployment user password, not your Azure sign-in password.

  4. Revise el resultado.Review the output. Es posible que vea la automatización específica para el entorno de tiempo de ejecución, como MSBuild para ASP.NET, npm install para Node.js y pip install para Python.You may see runtime-specific automation, such as MSBuild for ASP.NET, npm install for Node.js, and pip install for Python.

  5. Busque su aplicación en Azure Portal para comprobar que el contenido esté implementado.Browse to your app in the Azure portal to verify that the content is deployed.

Implementación con compilaciones de Azure PipelinesDeploy with Azure Pipelines builds

Si su cuenta tiene los permisos necesarios, puede configurar Azure Pipelines (versión preliminar) para habilitar la implementación de Git local para la aplicación.If your account has the necessary permissions, you can set up Azure Pipelines (Preview) to enable local Git deployment for your app.

  • Su cuenta de Azure debe tener permisos para escribir en Azure Active Directory y crear un servicio.Your Azure account must have permissions to write to Azure Active Directory and create a service.

  • Su cuenta de Azure debe tener el rol Propietario en su suscripción de Azure.Your Azure account must have the Owner role in your Azure subscription.

  • Debe ser administrador en el proyecto de Azure DevOps que quiera usar.You must be an administrator in the Azure DevOps project you want to use.

Para habilitar la implementación de Git local para la aplicación con Azure Pipelines (versión preliminar):To enable local Git deployment for your app with Azure Pipelines (Preview):

  1. Vaya a la página de la aplicación Azure App Service en Azure Portal y seleccione Deployment Center (Centro de implementación) en el menú de la izquierda.Navigate to your Azure App Service app page in the Azure portal, and select Deployment Center in the left menu.

  2. En la página del centro de implementación , seleccione Local Git (Git local) y Continue (Continuar).On the Deployment Center page, select Local Git, and then select Continue.

    Seleccione Local Git (Git local) y luego seleccione Continue (Continuar)

  3. En la página Build provider (Compilar proveedor), seleccione Azure Pipelines (Preview) (Azure Pipelines [versión preliminar]) y Continue (Continuar).On the Build provider page, select Azure Pipelines (Preview), and then select Continue.

    Seleccione Azure Pipelines (Preview) (Azure Pipelines [versión preliminar]) y luego Continue (Continuar).

  4. En la página Configure (Configurar), configure una nueva organización de Azure DevOps o especifique una organización existente y, a continuación, seleccione Continue (Continuar).On the Configure page, configure a new Azure DevOps organization, or specify an existing organization, and then select Continue.

    Nota

    Si su organización Azure DevOps existente no figura en la lista, es posible que deba vincularla a su suscripción de Azure.If your existing Azure DevOps organization isn't listed, you may need to link it to your Azure subscription. Para obtener más información, consulte Define your CD release pipeline (Definir la canalización de versión de CD).For more information, see Define your CD release pipeline.

  5. Dependiendo de su plan de tarifa de App Service, puede ver una página Deploy to staging (Implementar en el almacenamiento provisional).Depending on your App Service plan pricing tier, you may see a Deploy to staging page. Dcida si quiere habilitar las ranuras de implementación y seleccione Continue (Continuar).Choose whether to enable deployment slots, and then select Continue.

  6. En la página Summary (Resumen), revise la configuración y seleccione Finish (Finalizar).On the Summary page, review the settings, and then select Finish.

  7. Cuando Azure Pipeline esté listo, copie la dirección URL del repositorio de Git desde la página del centro de implementación para usarla en el siguiente paso.When the Azure Pipeline is ready, copy the Git repository URL from the Deployment Center page to use in the next step.

    Copie la dirección URL del repositorio de Git.

  8. En la ventana del terminal local, agregue una instancia remota de Azure al repositorio de Git local.In your local terminal window, add an Azure remote to your local Git repository. En el comando, reemplace <url> con la dirección URL del repositorio de Git que recibió en el paso anterior.In the command, replace <url> with the URL of the Git repository that you got from the previous step.

    git remote add azure <url>
    
  9. Acceda a la instancia remota de Azure con git push azure master.Push to the Azure remote with git push azure master.

  10. En la página del administrador de credenciales de GIT, inicie sesión con su nombre de usuario de visualstudio.com.On the Git Credential Manager page, sign in with your visualstudio.com username. Para ver otros métodos de autenticación, consulte la información general sobre autenticación de Azure DevOps Services.For other authentication methods, see Azure DevOps Services authentication overview.

  11. Una vez finalizada la implementación, puede consultar el progreso de la compilación en https://<azure_devops_account>.visualstudio.com/<project_name>/_build y el progreso de la implementación en https://<azure_devops_account>.visualstudio.com/<project_name>/_release.Once deployment is finished, view the build progress at https://<azure_devops_account>.visualstudio.com/<project_name>/_build, and the deployment progress at https://<azure_devops_account>.visualstudio.com/<project_name>/_release.

  12. Busque su aplicación en Azure Portal para comprobar que el contenido esté implementado.Browse to your app in the Azure portal to verify that the content is deployed.

¿Qué ocurre con mi aplicación durante la implementación?What happens to my app during deployment?

Todos los métodos de implementación admitidos oficialmente realizan cambios en los archivos de la carpeta /home/site/wwwroot de la aplicación.All the officially supported deployment methods make changes to the files in the /home/site/wwwroot folder of your app. Estos archivos son los mismos que se ejecutan en producción.These files are the same ones that are run in production. Por lo tanto, se puede producir un error en la implementación debido a archivos bloqueados.Therefore, the deployment can fail because of locked files. Es posible que la aplicación en producción también se comporte de forma impredecible durante la implementación, ya que no todos los archivos se actualizan al mismo tiempo.The app in production may also behave unpredictably during deployment, because not all the files updated at the same time. Hay varias formas de evitar estos problemas:There are a few different ways to avoid these issues:

Solución de problemas de implementaciónTroubleshoot deployment

Puede ver los siguientes mensajes de error comunes cuando usa Git para publicar en una aplicación de App Service en Azure:You may see the following common error messages when you use Git to publish to an App Service app in Azure:

MessageMessage CausaCause ResoluciónResolution
Unable to access '[siteURL]': Failed to connect to [scmAddress] La aplicación no está funcionando.The app isn't up and running. inicie la aplicación en Azure Portal.Start the app in the Azure portal. La implementación de GIT no está disponible cuando la aplicación web está detenida.Git deployment isn't available when the web app is stopped.
Couldn't resolve host 'hostname' La información de dirección del repositorio remoto de "azure" es incorrecta.The address information for the 'azure' remote is incorrect. use el comando git remote -v para obtener un listado de todos los remotos, junto con la dirección URL asociada.Use the git remote -v command to list all remotes, along with the associated URL. Compruebe que la URL para el repositorio correcto "azure" es correcta.Verify that the URL for the 'azure' remote is correct. Si lo necesita, suprima y vuelva a crear este repositorio remoto utilizando la URL correcta.If needed, remove and recreate this remote using the correct URL.
No refs in common and none specified; doing nothing. Perhaps you should specify a branch such as 'master'. No especificó una rama durante git push, o no ha establecido el valor push.default en .gitconfig.You didn't specify a branch during git push, or you haven't set the push.default value in .gitconfig. Vuelva a ejecutar git push y especifique la rama principal git push azure master.Run git push again, specifying the master branch: git push azure master.
src refspec [branchname] does not match any. Intentó agregar una rama que no es maestra en el repositorio remoto "azure".You tried to push to a branch other than master on the 'azure' remote. Vuelva a ejecutar git push y especifique la rama principal git push azure master.Run git push again, specifying the master branch: git push azure master.
RPC failed; result=22, HTTP code = 5xx. este error puede producirse si se trata de insertar un repositorio Git de gran tamaño a través de HTTPS.This error can happen if you try to push a large git repository over HTTPS. Cambie la configuración de Git en la máquina local para aumentar el tamaño de postBuffer.Change the git configuration on the local machine to make the postBuffer bigger. Por ejemplo: git config --global http.postBuffer 524288000.For example: git config --global http.postBuffer 524288000.
Error - Changes committed to remote repository but your web app not updated. Implementó una aplicación Node.js con un archivo package.json que especifica los módulos adicionales requeridos.You deployed a Node.js app with a package.json file that specifies additional required modules. Revise los mensajes de error npm ERR! anteriores a este error para obtener más contexto sobre el error.Review the npm ERR! error messages before this error for more context on the failure. A continuación se indican las causas conocidas de este error y los mensajes npm ERR!:The following are the known causes of this error, and the corresponding npm ERR! messages:

El archivo package.json tiene una estructura incorrecta: npm ERR! Couldn't read dependencies.Malformed package.json file: npm ERR! Couldn't read dependencies.

Módulo nativo que no tiene una distribución binaria para Windows:Native module doesn't have a binary distribution for Windows:
npm ERR! \cmd "/c" "node-gyp rebuild"\ failed with 1
oor
npm ERR! [modulename@version] preinstall: \make || gmake\

Recursos adicionalesAdditional resources