Implementación de Git local a Azure App ServiceLocal Git Deployment to Azure App Service

Esta guía muestra cómo implementar el código en Azure App Service desde un repositorio Git en la máquina local.This how-to guide shows you how to deploy your code to Azure App Service from a Git repository on your local computer.

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.

Requisitos previosPrerequisites

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

  • Instale Git.Install Git.
  • Mantenga un repositorio Git local con el código que desea implementar.Maintain a local Git repository with code you want to deploy.

Para usar un repositorio de ejemplo para continuar, ejecute el comando siguiente en la ventana del terminal local:To use a sample repository to follow along, 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 App Service, asegúrese de que la raíz del repositorio tiene los archivos correctos del proyecto.To get automatic builds from the 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
Python (solo Windows)Python (Windows only) *.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 Customizing 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 using Git.

Apertura de Azure Cloud ShellOpen Azure Cloud Shell

Azure Cloud Shell es un shell interactivo gratuito que puede usar para ejecutar los pasos de este artículo.Azure Cloud Shell is a free, interactive shell that you can use to run the steps in this article. Cloud Shell incluye herramientas comunes de Azure preinstaladas y configuradas para que las use con su cuenta.Common Azure tools are preinstalled and configured in Cloud Shell for you to use with your account. Basta con seleccionar el botón Copiar para copiar el código, pegarlo en Cloud Shell y, luego, presionar Entrar para ejecutarlo.Just select the Copy button to copy the code, paste it in Cloud Shell, and then press Enter to run it. Existen varias maneras de abrir Cloud Shell:There are a few ways to open Cloud Shell:

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. Cloud Shell en este artículo
Abra Cloud Shell en el explorador.Open Cloud Shell in your browser. https://shell.azure.com/bash
Seleccione el botón Cloud Shell en el menú de la esquina superior derecha de Azure Portal.Select the Cloud Shell button on the menu in the upper-right corner of the Azure portal. Cloud Shell en el portal

Implementación desde GIT local con compilaciones de KuduDeploy from local Git with Kudu builds

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 es utilizar Cloud Shell.The easiest way to enable local Git deployment for your app with the Kudu build server is to use the Cloud Shell.

Creación de un usuario de implementaciónCreate a deployment user

En Cloud Shell, cree credenciales de implementación con el comando az webapp deployment user set.In the Cloud Shell, create deployment credentials with the az webapp deployment user set command. Se requiere este usuario de implementación para la implementación de FTP y Git local en una aplicación web.This deployment user is required for FTP and local Git deployment to a web app. El nombre de usuario y la contraseña predeterminados están en el nivel de la cuenta.The user name and password are account level. Son diferentes de las credenciales de suscripción de Azure.They are different from your Azure subscription credentials.

En el siguiente ejemplo, reemplace <username> y <password> (corchetes angulares incluidos) por un nuevo nombre de usuario y contraseña.In the following example, replace <username> and <password> (including brackets) with a new user name and password. El nombre de usuario debe ser único en Azure.The user name must be unique within Azure. La contraseña debe tener al menos ocho caracteres, con 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, symbols.

az webapp deployment user set --user-name <username> --password <password>

Debe obtener una salida de JSON, con la contraseña mostrada como null.You should get a JSON output, with the password shown 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.

Solo es necesario crear este usuario de implementación una vez, y puede usarlo en todas las implementaciones de Azure.You create this deployment user only once; you can use it for all your Azure deployments.

Nota

Registre el nombre de usuario y la contraseña.Record the user name and password. Los va a necesitar para implementar la aplicación web más adelante.You need them to deploy the web app later.

Habilitación de GIT local con KuduEnable local Git with Kudu

Para habilitar la implementación de GIT local para la aplicación con el servidor de compilación Kudu, ejecute az webapp deployment source config-local-git en Cloud Shell.To enable local Git deployment for your app with the Kudu build server, run az webapp deployment source config-local-git in the Cloud Shell.

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

Para crear en su lugar una aplicación habilitada para Git, ejecute az webapp create en Cloud Shell con el parámetro --deployment-local-git.To create a Git-enabled app instead, run az webapp create in the Cloud Shell with the --deployment-local-git parameter.

az webapp create --name <app_name> --resource-group <group_name> --plan <plan_name> --deployment-local-git

El comando az webapp create debe generar algo similar a la salida siguiente:The az webapp create command should give you something similar to the following output:

Local git is configured with url of 'https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app_name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

Implementación del proyectoDeploy your project

En la ventana del terminal local, agregue una instancia remota de Azure al repositorio de Git local.Back in the local terminal window, add an Azure remote to your local Git repository. Reemplace <url> con la dirección URL del Git remoto que obtuvo en Habilitación de Git para la aplicación.Replace <url> with the URL of the Git remote that you got from Enable Git for your app.

git remote add azure <url>

Inserte en la instancia remota de Azure para implementar la aplicación con el comando siguiente.Push to the Azure remote to deploy your app with the following command. Cuando se le pida una contraseña, asegúrese de escribir la que creó en Configuración de un usuario de implementación, no la que usa para iniciar sesión en Azure Portal.When prompted for a password, make sure that you enter the password you created in Configure a deployment user, not the password you use to log in to the Azure portal.

git push azure master

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

Vaya a la aplicación para comprobar que se implementó el contenido.Browse to your app to verify that the content is deployed.

Implementación desde GIT local con las compilaciones de Azure DevOps ServicesDeploy from local Git with Azure DevOps Services builds

Nota

Para que App Service cree las instancias necesarias de Azure Pipelines en la organización de Azure DevOps Services, la cuenta de Azure debe tener el rol de propietario en la suscripción a Azure.For App Service to create the necessary Azure Pipelines in your Azure DevOps Services organization, your Azure account must have the role of Owner in your Azure subscription.

Para habilitar la implementación de GIT local para la aplicación con el servidor de compilación Kudu, vaya a la aplicación en Azure Portal.To enable local Git deployment for your app with the Kudu build server, navigate to your app in the Azure portal.

En el panel de navegación de la izquierda de la página de la aplicación, haga clic en Centro de implementación > GIT local > Continuar.In the left navigation of your app page, click Deployment Center > Local Git > Continue.

Haga clic en Entrega continua de Azure DevOps Services > Continuar.Click Azure DevOps Services Continuous Delivery > Continue.

En la página Configurar, cree una organización de Azure DevOps Services o especifique una organización existente.In the Configure page, configure a new Azure DevOps Services organization, or specify an existing organization. Cuando haya terminado, haga clic en Continuar.When finished, click Continue.

Nota

Si desea usar una organización existente de Azure DevOps Services que no aparece, debe vincular la organización de Azure DevOps Services a la suscripción de Azure.If you want to use an existing Azure DevOps Services organization that is not listed, you need to link the Azure DevOps Services organization to your Azure subscription.

En la página Probar, elija si desea habilitar las pruebas de carga y, después, haga clic en Continuar.In the Test page, choose whether to enable load tests, then click Continue.

En función del plan de tarifa de App Service, también puede ver una página Implementar en el almacenamiento provisional.Depending on the pricing tier of your App Service plan, you may also see a Deploy to staging page. Elija si desea habilitar ranuras de implementación y después haga clic en Continuar.Choose whether to enable deployment slots, then click Continue.

En la página Resumen, verifique las opciones y haga clic en Finalizar.In the Summary page, verify your options and click Finish.

La organización de Azure DevOps Services tarda unos minutos en estar preparada.It takes a few minutes for the Azure DevOps Services organization to be ready. Cuando esté listo, copie la dirección URL del repositorio de GIT en el centro de implementación.When it's ready, copy the Git repository URL in the deployment center.

En la ventana del terminal local, agregue una instancia remota de Azure al repositorio de Git local.Back in the local terminal window, add an Azure remote to your local Git repository. Reemplace <url> por la dirección URL obtenida en el último paso.Replace <url> with the URL you got from the last step.

git remote add vsts <url>

Inserte en la instancia remota de Azure para implementar la aplicación con el comando siguiente.Push to the Azure remote to deploy your app with the following command. Cuando se lo solicite el Administrador de credenciales de GIT, inicie sesión con su usuario de visualstudio.com.When prompted by Git Credential Manager, sign in with your visualstudio.com user. Para métodos de autenticación adicionales, vea la información general sobre autenticación de Azure DevOps Services.For additional authentication methods, see Azure DevOps Services authentication overview.

git push vsts master

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

Vaya a la aplicación para comprobar que se implementó el contenido.Browse to your app 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 tienen algo en común: realizan cambios en los archivos de la carpeta /site/home/wwwroot de la aplicación.All the officially supported deployment methods have one thing in common: they make changes to the files in the /site/home/wwwroot folder of your app. Estos son los mismos archivos que se ejecutan en producción.These are the same files that are run in production. Por tanto, se puede producir un error durante la implementación debido a archivos bloqueados, o puede que la aplicación de producción tenga un comportamiento impredecible durante la implementación debido a que no todos los archivos se actualizan simultáneamente.Therefore, the deployment can fail due to locked files, or the app in production may have unpredictable behavior during deployment because not all the files are updated simultaneously. Hay varias formas de evitar estos problemas:There are a few different ways to avoid these issues:

Solución de problemas de implementación de KuduTroubleshooting Kudu deployment

Estos son los errores o problemas comunes al usar Git para publicar en una aplicación de App Service en Azure:The following are common errors or problems when using Git to publish to an App Service app in Azure:


Síntoma: Unable to access '[siteURL]': Failed to connect to [scmAddress]Symptom: Unable to access '[siteURL]': Failed to connect to [scmAddress]

Causa: este error puede producirse si la aplicación no está en funcionamiento.Cause: This error can happen if the app isn't up and running.

Resolución: inicie la aplicación en Azure Portal.Resolution: Start the app in the Azure portal. La implementación de GIT no está disponible cuando la aplicación web está detenida.Git deployment is unavailable when the Web App is stopped.


Síntoma: Couldn't resolve host 'hostname'Symptom: Couldn't resolve host 'hostname'

Causa: este error puede producirse si la información de dirección introducida al crear el repositorio remoto "azure" no era correcta.Cause: This error can happen if the address information entered when creating the 'azure' remote was incorrect.

Resolución: use el comando git remote -v para obtener un listado de todos los remotos, junto con la dirección URL asociada.Resolution: 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.


Síntoma: No refs in common and none specified; doing nothing. Perhaps you should specify a branch such as 'master'.Symptom: No refs in common and none specified; doing nothing. Perhaps you should specify a branch such as 'master'.

Causa: este error puede producirse si no se especifica una rama durante git push o si no ha establecido el valor push.default en .gitconfig.Cause: This error can happen if you don't specify a branch during git push, or if you haven't set the push.default value in .gitconfig.

Resolución: vuelva a ejecutar git push y especifique la rama principal.Resolution: Run git push again, specifying the master branch. Por ejemplo: For example:

git push azure master

Síntoma: src refspec [branchname] does not match any.Symptom: src refspec [branchname] does not match any.

Causa: este error puede producirse si intenta insertar una rama que no es la principal en el repositorio remoto "azure".Cause: This error can happen if you try to push to a branch other than master on the 'azure' remote.

Resolución: vuelva a ejecutar git push y especifique la rama principal.Resolution: Run git push again, specifying the master branch. Por ejemplo: For example:

git push azure master

Síntoma: RPC failed; result=22, HTTP code = 5xx.Symptom: RPC failed; result=22, HTTP code = 5xx.

Causa: este error puede producirse si se trata de insertar un repositorio Git de gran tamaño a través de HTTPS.Cause: This error can happen if you try to push a large git repository over HTTPS.

Resolución: cambie la configuración de git en la máquina local para aumentar el tamaño de postBuffer.Resolution: Change the git configuration on the local machine to make the postBuffer bigger

git config --global http.postBuffer 524288000

Síntoma: Error - Changes committed to remote repository but your web app not updated.Symptom: Error - Changes committed to remote repository but your web app not updated.

Causa: este error puede ocurrir si se implementa una aplicación Node.js con un archivo package.json que especifica los módulos requeridos adicionales.Cause: This error can happen if you deploy a Node.js app with a package.json file that specifies additional required modules.

Resolución: los mensajes adicionales con "npm ERR!"Resolution: Additional messages with 'npm ERR!' deben registrarse antes de este error y pueden proporcionar contexto adicional sobre el error.should be logged before this error, and can provide additional context on the failure. A continuación se indican las causas conocidas de este error y el mensaje 'npm ERR!'The following are known causes of this error and the corresponding 'npm ERR!' correspondiente:message:

  • Archivo package.json con estructura incorrecta: npm ERR!Malformed package.json file: npm ERR! No se pudieron leer las dependencias.Couldn't read dependencies.
  • Módulo nativo que no tiene una distribución binaria para Windows:Native module that doesn't have a binary distribution for Windows:

    • npm ERR! \cmd "/c" "node-gyp rebuild"\ failed with 1

      OROR

    • npm ERR! [modulename@version] preinstall: \make || gmake\

Recursos adicionalesAdditional Resources