Tutorial: Implementación de la aplicación en máquinas virtuales Linux de Azure con Jenkins y Azure DevOps ServicesTutorial: Deploy your app to Linux virtual machines in Azure with using Jenkins and Azure DevOps Services

La integración continua (CI) y la implementación continua (CD) constituyen una canalización mediante la que se puede compilar, publicar e implementar el código.Continuous integration (CI) and continuous deployment (CD) form a pipeline by which you can build, release, and deploy your code. Azure DevOps Services proporciona un completo conjunto rico en contenido de herramientas de automatización de CI/CD para la implementación en Azure.Azure DevOps Services provides a complete, fully featured set of CI/CD automation tools for deployment to Azure. Jenkins es una popular herramienta de terceros basada en servidor de CI/CD que además proporciona automatización de CI/CD.Jenkins is a popular third-party CI/CD server-based tool that also provides CI/CD automation. Puede usar Azure DevOps Services y Jenkins conjuntamente para personalizar la forma de entrega de la aplicación o el servicio en la nube.You can use Azure DevOps Services and Jenkins together to customize how you deliver your cloud app or service.

En este tutorial, utilizará Jenkins para compilar una aplicación web de Node.js.In this tutorial, you use Jenkins to build a Node.js web app. Después usará Azure DevOps para implementarlaYou then use Azure DevOps to deploy it

en un grupo de implementación que contiene máquinas virtuales Linux.to a deployment group that contains Linux virtual machines (VMs). Aprenderá a:You learn how to:

  • Obtener la aplicación de ejemplo.Get the sample app.
  • Configurar los complementos de Jenkins.Configure Jenkins plug-ins.
  • Configurar un proyecto de estilo libre de Jenkins para Node.js.Configure a Jenkins Freestyle project for Node.js.
  • Configurar Jenkins para la integración con Azure DevOps Services.Configure Jenkins for Azure DevOps Services integration.
  • Crear un punto de conexión de servicio de Jenkins.Create a Jenkins service endpoint.
  • Crear un grupo de implementación para las máquinas virtuales de Azure.Create a deployment group for the Azure virtual machines.
  • Crear una canalización de versión de Azure Pipelines.Create an Azure Pipelines release pipeline.
  • Ejecutar las implementaciones desencadenadas por CI y de manera manual.Execute manual and CI-triggered deployments.

Antes de empezarBefore you begin

Obtención de la aplicación de ejemploGet the sample app

Necesita una aplicación para implementar, que esté almacenada en un repositorio de Git.You need an app to deploy, stored in a Git repository. Para este tutorial se recomienda usar esta aplicación de ejemplo disponible en GitHub.For this tutorial, we recommend that you use this sample app available from GitHub. Este tutorial contiene un script de ejemplo que se utiliza para la instalación de Node.js y una aplicación.This tutorial contains a sample script that's used for installing Node.js and an application. Si desea trabajar con su propio repositorio, debe configurar un ejemplo similar.If you want to work with your own repository, you should configure a similar sample.

Cree una bifurcación de esta aplicación y anote la ubicación (URL) para usarla en pasos posteriores de este tutorial.Create a fork of this app and take note of the location (URL) for use in later steps of this tutorial. Para obtener más información, consulte Fork a repo (Bifurcar un repositorio).For more information, see Fork a repo.

Nota

La aplicación se ha compilado con Yeoman.The app was built through Yeoman. Utiliza Express, bower y Grunt.It uses Express, bower, and grunt. Y tiene algunos paquetes de npm dependientes.And it has some npm packages as dependencies. El ejemplo también contiene un script que configura Nginx e implementa la aplicación.The sample also contains a script that sets up Nginx and deploys the app. Se ejecuta en las máquinas virtuales.It is executed on the virtual machines. En concreto, el script:Specifically, the script:

  1. Instala Node, Nginx y PM2.Installs Node, Nginx, and PM2.
  2. Configura Nginx y PM2.Configures Nginx and PM2.
  3. Inicia la aplicación Node.Starts the Node app.

Configuración de los complementos de JenkinsConfigure Jenkins plug-ins

En primer lugar, debe configurar dos complementos de Jenkins: Implementación continua en VS Team Services y NodeJS.First, you must configure two Jenkins plug-ins: NodeJS and VS Team Services Continuous Deployment.

  1. Abra la cuenta de Jenkins y seleccione Manage Jenkins (Administrar Jenkins).Open your Jenkins account and select Manage Jenkins.
  2. En la página Manage Jenkins (Administrar Jenkins), seleccione Manage Plugins (Administrar complementos).On the Manage Jenkins page, select Manage Plugins.
  3. Filtre la lista para buscar el complemento NodeJS y seleccione la opción Install without restart (Instalar sin reinicio).Filter the list to locate the NodeJS plug-in, and select the Install without restart option. Adición del complemento NodeJS a JenkinsAdding the NodeJS plugin to Jenkins
  4. Filtre la lista para buscar el complemento VS Team Services Continuous Deployment (Implementación continua de VS Team Services) y seleccione la opción Install without restart (Instalar sin reinicio).Filter the list to find the VS Team Services Continuous Deployment plug-in and select the Install without restart option.
  5. Vuelva al panel de Jenkins y seleccione Manage Jenkins (Administrar Jenkins).Go back to the Jenkins dashboard and select Manage Jenkins.
  6. Seleccione Global Tool Configuration (Configuración de herramienta global).Select Global Tool Configuration. Busque NodeJS y seleccione NodeJS installations (Instalaciones de NodeJS).Find NodeJS and select NodeJS installations.
  7. Seleccione la opción Install automatically (Instalar automáticamente) y después escriba un valor para Name (Nombre).Select the Install automatically option, and then enter a Name value.
  8. Seleccione Guardar.Select Save.

Configurar un proyecto de estilo libre de Jenkins para Node.jsConfigure a Jenkins Freestyle project for Node.js

  1. Seleccione Nuevo elemento.Select New Item. Escriba un nombre para el elemento.Enter an item name.
  2. Seleccione Freestyle project (Proyecto de estilo libre).Select Freestyle project. Seleccione Aceptar.Select OK.
  3. En la pestaña Administración de código fuente, seleccione Git y escriba los detalles del repositorio y la bifurcación que contengan el código de la aplicación.On the Source Code Management tab, select Git and enter the details of the repository and the branch that contain your app code.
    Adición de un repositorio a la compilaciónAdd a repo to your build
  4. En la pestaña Build Triggers (Desencadenadores de compilación), seleccione Poll SCM (Sondear SCM) y especifique la programación H/03 * * * * para sondear el repositorio de Git en busca de cambios cada tres minutos.On the Build Triggers tab, select Poll SCM and enter the schedule H/03 * * * * to poll the Git repository for changes every three minutes.
  5. En la pestaña Build Environment (Entorno de compilación), seleccione Provide Node & npm bin/ folder PATH (Proporcionar ruta de acceso a la carpeta bin/ de Node y npm) y seleccione el valor de instalación de Node JS.On the Build Environment tab, select Provide Node & npm bin/ folder PATH and select the NodeJS Installation value. Deje npmrc file establecido en Usar predeterminado del sistema.Leave npmrc file set to use system default.
  6. En la pestaña Build (Compilación), seleccione Execute shell (Ejecutar shell) y escriba el comando npm install para asegurarse de que se actualicen todas las dependencias.On the Build tab, select Execute shell and enter the command npm install to ensure that all dependencies are updated.

Configuración de Jenkins para la integración con Azure DevOps ServicesConfigure Jenkins for Azure DevOps Services integration

Nota

Asegúrese de que el token de acceso personal (PAT) que usa para los siguientes pasos contiene el permiso de publicación (lectura, escritura, ejecución y administración) en Azure DevOps Services.Ensure that the personal access token (PAT) you use for the following steps contains the Release (read, write, execute and manage) permission in Azure DevOps Services.

  1. Si aún no tiene uno, cree un PAT en su organización de Azure DevOps Services.Create a PAT in your Azure DevOps Services organization if you don't already have one. Jenkins necesita esta información para acceder a la organización de Azure DevOps Services.Jenkins requires this information to access your Azure DevOps Services organization. Asegúrese de almacenar la información del token para los próximos pasos de esta sección.Be sure to store the token information for upcoming steps in this section.

    Para aprender a generar un token, consulte el artículo de Creación de un token de acceso personal para Azure DevOps Services.To learn how to generate a token, read How do I create a personal access token for Azure DevOps Services?.

  2. En la pestaña Post-build Actions (Acciones posteriores a la compilación), seleccione Add post-build action (Agregar acción posterior a la compilación).In the Post-build Actions tab, select Add post-build action. Seleccione Archive the artifacts (Archivar los artefactos).Select Archive the artifacts.

  3. Para Files to archive (Archivos para archivar), escriba **/* para incluir todos los archivos.For Files to archive, enter **/* to include all files.

  4. Para crear otra acción, seleccione Add post-build action (Agregar acción posterior a la compilación).To create another action, select Add post-build action.

  5. Seleccione Trigger release in TFS/Team Services (Desencadenar la versión en TFS y Team Services).Select Trigger release in TFS/Team Services. Escriba el identificador URI de la organización de Azure DevOps Services, como https://{nombre-de-la-organización}.visualstudio.com.Enter the URI for your Azure DevOps Services organization, such as https://{your-organization-name}.visualstudio.com.

  6. Escriba el nombre del proyecto.Enter the Project name.

  7. Elija un nombre para la canalización de versión.Choose a name for the release pipeline. (Creará esta canalización de versión más adelante en Azure DevOps Services).(You create this release pipeline later in Azure DevOps Services.)

  8. Elija las credenciales para conectarse a su entorno de Azure DevOps Services o Team Foundation Server:Choose credentials to connect to your Azure DevOps Services or Team Foundation Server environment:

    • Si usa Azure DevOps Services, deje el campo Username (Nombre de usuario) en blanco.Leave Username blank if you are using Azure DevOps Services.
    • Escriba un valor para el nombre de usuario y la contraseña si usa una versión local de Team Foundation Server.Enter a username and password if you are using an on-premises version of Team Foundation Server.
      Configuración de acciones posteriores a la compilación de Jenkins
  9. Guarde el proyecto de Jenkins.Save the Jenkins project.

Creación de un punto de conexión de servicio de JenkinsCreate a Jenkins service endpoint

Un punto de conexión de servicio permite a Azure DevOps Services conectarse a Jenkins.A service endpoint allows Azure DevOps Services to connect to Jenkins.

  1. Abra la página Servicios de Azure DevOps Services, abra la lista Nuevo punto de conexión de servicio y seleccione Jenkins.Open the Services page in Azure DevOps Services, open the New Service Endpoint list, and select Jenkins. Adición de un punto de conexión de JenkinsAdd a Jenkins endpoint
  2. Escriba un nombre para la conexión.Enter a name for the connection.
  3. Escriba la dirección URL del servidor de Jenkins y seleccione Aceptar certificados SSL que no son de confianza.Enter the URL of your Jenkins server, and select the Accept untrusted SSL certificates option. Una dirección URL de muestra podría ser http://{suURLdeJenkins}.westcentralus.cloudapp.azure.com.An example URL is http://{YourJenkinsURL}.westcentralus.cloudapp.azure.com.
  4. Escriba el nombre de usuario y la contraseña de la cuenta de Jenkins.Enter the username and password for your Jenkins account.
  5. Seleccione Comprobar conexión para comprobar que la información es correcta.Select Verify connection to check that the information is correct.
  6. Seleccione Aceptar para crear el punto de conexión de servicio.Select OK to create the service endpoint.

Creación de un grupo de implementación para Azure Virtual MachinesCreate a deployment group for Azure virtual machines

Necesita un grupo de implementación para registrar el agente de Azure DevOps Services de manera que la canalización de versión pueda implementarse en la máquina virtual.You need a deployment group to register the Azure DevOps Services agent so the release pipeline can be deployed to your virtual machine. Los grupos de implementación facilitan la definición de grupos lógicos de equipos de destino para la implementación, e instalan el agente requerido en cada máquina.Deployment groups make it easy to define logical groups of target machines for deployment, and to install the required agent on each machine.

Nota

En el siguiente proceso, asegúrese de instalar los requisitos previos y no ejecute el script con privilegios sudo.In the following procedure, be sure to install the prerequisites and don't run the script with sudo privileges.

  1. Abra la pestaña Versiones del concentrador Compilación y versión, abra la pestaña Grupos de implementación y seleccione + Nuevo.Open the Releases tab of the Build & Release hub, open Deployment groups, and select + New.
  2. Especifique un nombre para el grupo de implementación y una descripción opcional.Enter a name for the deployment group, and an optional description. Seleccione Crear.Then select Create.
  3. Elija el sistema operativo para la máquina virtual del destino de implementación.Choose the operating system for your deployment target virtual machine. Por ejemplo, seleccione Ubuntu 16.04+.For example, select Ubuntu 16.04+.
  4. Seleccione Usar un token de acceso personal en el script para la autenticación.Select Use a personal access token in the script for authentication.
  5. Seleccione el vínculo Requisitos previos del sistema.Select the System prerequisites link. Instalar los requisitos previos para su sistema operativo.Install the prerequisites for your operating system.
  6. Seleccione Copiar script en el Portapapeles para copiar el script.Select Copy script to clipboard to copy the script.
  7. Inicie sesión en la máquina virtual del destino de implementación y ejecute el script.Log in to your deployment target virtual machine and run the script. No ejecute el script con privilegios sudo.Don't run the script with sudo privileges.
  8. Después de la instalación, se le pedirán etiquetas para el grupo de implementación.After the installation, you are prompted for deployment group tags. Acepte los valores predeterminados.Accept the defaults.
  9. En Azure DevOps Services, busque la máquina virtual recién registrada en Destinos, debajo de Grupos de implementación.In Azure DevOps Services, check for your newly registered virtual machine in Targets under Deployment Groups.

Creación de una canalización de versión de Azure PipelinesCreate an Azure Pipelines release pipeline

Una canalización de versión especifica el proceso que Azure Pipelines usa para implementar la aplicación.A release pipeline specifies the process that Azure Pipelines uses to deploy the app. En este ejemplo, se ejecuta un script de shell.In this example, you execute a shell script.

Para crear la canalización de versión en Azure Pipelines:To create the release pipeline in Azure Pipelines:

  1. Abra la pestaña Versiones del centro Compilación y versión y seleccione Crear la canalización de versión.Open the Releases tab of the Build & Release hub, and select Create release pipeline.
  2. Seleccione la plantilla Vacío seleccionando empezar con un Proceso vacío.Select the Empty template by choosing to start with an Empty process.
  3. En la sección Artefactos, seleccione + Agregar artefacto y elija Jenkins como Tipo de origen.In the Artifacts section, select + Add Artifact and choose Jenkins for Source type. Seleccione la conexión del punto de conexión de servicio de Jenkins.Select your Jenkins service endpoint connection. Luego seleccione el trabajo de origen de Jenkins y seleccione Agregar.Then select the Jenkins source job and select Add.
  4. Seleccione los puntos suspensivos junto a Entorno 1.Select the ellipsis next to Environment 1. Seleccione Agregar fase de grupo de implementación.Select Add deployment group phase.
  5. Elija su grupo de implementación.Choose your deployment group.
  6. Seleccione + para agregar una tarea a la Fase de grupo de implementación.Select + to add a task to Deployment group phase.
  7. Elija la tarea Script de shell y seleccione Agregar.Select the Shell Script task and select Add. La tarea Script de Shell proporciona la configuración de un script que se ejecuta en cada servidor para instalar Node.js e iniciar la aplicación.The Shell Script task provides the configuration for a script to run on each server in order to install Node.js and start the app.
  8. Como Ruta de acceso del script, escriba $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh.For Script Path, enter $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh.
  9. Seleccione Opciones avanzadas y después habilite Especificar directorio de trabajo.Select Advanced, and then enable Specify Working Directory.
  10. En Directorio de trabajo, escriba $(System.DefaultWorkingDirectory)/Fabrikam-Node.For Working Directory, enter $(System.DefaultWorkingDirectory)/Fabrikam-Node.
  11. Cambie el nombre de la canalización de versión por el nombre especificado en la pestaña Post-build Actions (Acciones posteriores a la compilación) de la compilación en Jenkins.Edit the name of the release pipeline to the name that you specified on the Post-build Actions tab of the build in Jenkins. Jenkins necesita este nombre para desencadenar una nueva versión cuando se actualizan los artefactos de origen.Jenkins requires this name to be able to trigger a new release when the source artifacts are updated.
  12. Seleccione Guardar y Aceptar para guardar la canalización de versión.Select Save and select OK to save the release pipeline.

Ejecución de las implementaciones manuales y de las desencadenadas por CIExecute manual and CI-triggered deployments

  1. Seleccione + Versión y Crear versión.Select + Release and select Create Release.
  2. Seleccione la compilación completada en la lista desplegable resaltada y después Poner en cola.Select the build that you completed in the highlighted drop-down list, and select Queue.
  3. Seleccione el enlace de versión en el mensaje emergente.Choose the release link in the pop-up message. Por ejemplo: "Se creó la versión Release-1".For example: "Release Release-1 has been created."
  4. Abra la pestaña Registros para ver la salida de la consola de la versión.Open the Logs tab to watch the release console output.
  5. En el explorador, abra la dirección URL de uno de los servidores agregados al grupo de implementación.In your browser, open the URL of one of the servers that you added to your deployment group. Por ejemplo, escriba http://{your-server-ip-address}.For example, enter http://{your-server-ip-address}.
  6. Vaya al repositorio de Git de origen y modifique el contenido del encabezado h1 del archivo app/views/index.jade con parte del texto modificado.Go to the source Git repository and modify the contents of the h1 heading in the file app/views/index.jade with some changed text.
  7. Confirme el cambio.Commit your change.
  8. Pasados unos minutos, verá una nueva versión creada en la página Versiones de Azure DevOps.After a few minutes, you will see a new release created on the Releases page of Azure DevOps. Abra la versión para ver cómo se realiza la implementación.Open the release to see the deployment taking place. Felicidades.Congratulations!

Solución de problemas del complemento de JenkinsTroubleshooting the Jenkins plugin

Si detecta algún error con los complementos de Jenkins, envíe un problema en Jenkins JIRA para el componente específico.If you encounter any bugs with the Jenkins plugins, file an issue in the Jenkins JIRA for the specific component.

Pasos siguientesNext steps

En este tutorial se ha automatizado la implementación de una aplicación en Azure con la compilación de Jenkins y Azure DevOps Services para el lanzamiento.In this tutorial, you automated the deployment of an app to Azure by using Jenkins for build and Azure DevOps Services for release. Ha aprendido a:You learned how to:

  • Compilar la aplicación en Jenkins.Build your app in Jenkins.
  • Configurar Jenkins para la integración con Azure DevOps Services.Configure Jenkins for Azure DevOps Services integration.
  • Crear un grupo de implementación para las máquinas virtuales de Azure.Create a deployment group for the Azure virtual machines.
  • Crear una canalización de versión que configure las máquinas virtuales e implemente la aplicación.Create a release pipeline that configures the VMs and deploys the app.

Para aprender a implementar una pila LAMP (Linux, Apache, MySQL y PHP), pase al siguiente tutorial.To learn about how to deploy a LAMP (Linux, Apache, MySQL, and PHP) stack, advance to the next tutorial.