Tutorial: Implementación en App de Azure servicio con Jenkins y la CLI de Azure

Importante

Muchos servicios de Azure tienen complementos de Jenkins. Algunos de estos complementos dejarán de ser compatibles a partir del 29 de febrero de 2024. La CLI de Azure es la forma recomendada actualmente de integrar Jenkins con los servicios de Azure. Para obtener más información, consulte el artículo Complementos de Jenkins para Azure.

Para implementar una aplicación web de Java en Azure, puede utilizar la CLI de Azure en una canalización de Jenkins. En este tutorial se realizan las tareas siguientes:

  • Crear una máquina virtual de Jenkins
  • Configuración de Jenkins
  • Creación de una aplicación web en Azure
  • Preparación de un repositorio de GitHub
  • Creación de una canalización de Jenkins
  • Ejecución de la canalización y comprobación de la aplicación web

Requisitos previos

  • Suscripción de Azure: si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Configuración de Jenkins

En los pasos siguientes se muestra cómo instalar el JDK de Java necesario y Maven en el controlador de Jenkins:

  1. Inicie sesión en el controlador de Jenkins con SSH.

  2. Descargue e instale la compilación Azul Zulu de OpenJDK para Azure desde un repositorio apt-get:

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
    sudo apt-add-repository "deb http://repos.azul.com/azure-only/zulu/apt stable main"
    sudo apt-get -q update
    sudo apt-get -y install zulu-8-azure-jdk
    
  3. Ejecute el siguiente comando para instalar Maven:

    sudo apt-get install -y maven
    

Adición de un nombre de entidad de servicio de Azure a una credencial de Jenkins

En los pasos siguientes se muestra cómo especificar la credencial de Azure:

  1. Asegúrese de que está instalado el complemento de credenciales.

  2. En el panel de Jenkins, seleccione Credenciales -> Sistema ->.

  3. Seleccione Global credentials(unrestricted) (Credenciales globales [sin restricción]).

  4. Seleccione Add Credentials (Agregar credenciales) para agregar una entidad de servicio de Microsoft Azure. Asegúrese de que el tipo de credencial es Username with password (Nombre de usuario con contraseña) y especifique los siguientes elementos:

    • Username (Nombre de usuario): appId de la entidad de servicio
    • Contraseña: entidad de servicio password
    • Identificador: identificador de credencial (por ejemplo AzureServicePrincipal, )

Creación de una instancia de Azure App Service para implementar la aplicación web de Java

Use az appservice plan create para crear un plan de Azure App Service con el plan de tarifa Gratis:

az appservice plan create \
    --name <app_service_plan> \ 
    --resource-group <resource_group> \
    --sku FREE

Puntos clave:

  • Un plan de servicio de aplicaciones define los recursos físicos que se usan para hospedar las aplicaciones.
  • Todas las aplicaciones asignadas a un plan de App Service comparten estos recursos.
  • Los planes de App Service permiten ahorrar costos al hospedar varias aplicaciones.

Creación de una aplicación web de Azure

Use az webapp create para crear una definición de aplicación web en el plan de App Service myAppServicePlan.

az webapp create \
    --name <app_name> \ 
    --resource-group <resource_group> \
    --plan <app_service_plan>

Puntos clave:

  • La definición de la aplicación web proporciona una dirección URL para acceder a la aplicación y configura varias opciones para implementar el código en Azure.
  • Sustituya el marcador de posición <app_name> por un nombre de aplicación único.
  • El nombre de la aplicación forma parte del nombre de dominio predeterminado de la aplicación web. Por lo tanto, el nombre debe ser único entre todas las aplicaciones de Azure.
  • Puede asignar una entrada de nombre de dominio personalizada a la aplicación web antes de exponerla a los usuarios.

Configuración de Java

Establezca la configuración del entorno de ejecución de Java de la aplicación con el comando az appservice web config update:

az webapp config set \ 
    --name <app_name> \
    --resource-group <resource_group> \ 
    --java-version 1.8 \ 
    --java-container Tomcat \
    --java-container-version 8.0

Preparación de un repositorio de GitHub

  1. Abra el repositorio de Simple Java Web App for Azure (Aplicación web de Simple Java para Azure).

  2. Para bifurcar el repositorio en su propia cuenta de GitHub, seleccione el botón Fork (Bifurcar).

  3. Abra el archivo Jenkinsfile; para ello, haga clic en el nombre de archivo.

  4. Seleccione el icono de lápiz para editar el archivo.

  5. Actualice el identificador de la suscripción y el identificador del inquilino.

      withEnv(['AZURE_SUBSCRIPTION_ID=<subscription_id>',
            'AZURE_TENANT_ID=<tenant_id>']) 
    
  6. Actualice el grupo de recursos y el nombre de la aplicación web en las líneas 22 y 23, respectivamente.

    def resourceGroup = '<resource_group>'
    def webAppName = '<app_name>'
    
  7. Actualice el identificador de la credencial en la instancia de Jenkins.

    withCredentials([usernamePassword(credentialsId: '<service_princial>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
    

Creación de una canalización de Jenkins

Haga lo siguiente para crear una canalización de Jenkins:

  1. Abra Jenkins en un explorador web.

  2. Seleccione Nuevo elemento.

  3. Escriba un nombre para el trabajo.

  4. Seleccione Pipeline (Canalización).

  5. Seleccione Aceptar.

  6. Seleccione Pipeline (Canalización).

  7. En Definition (Definición), seleccione Pipeline script from SCM (Script de canalización del SCM).

  8. En SCM, seleccione Git.

  9. Especifique la dirección URL del repositorio bifurcado en GitHub: https:\<forked_repo\>.git

  10. Seleccione Guardar.

Prueba de la canalización

  1. Vaya a la canalización que ha creado.

  2. Seleccione Build Now (Compilar ahora).

  3. Una vez finalizada la compilación, seleccione Console Output (Salida de la consola) para ver los detalles de la compilación.

Comprobación de la aplicación web

Haga lo siguiente para comprobar que el archivo WAR se ha implementado correctamente en la aplicación web:

  1. Vaya a la siguiente dirección URL: http://&lt;app_name>.azurewebsites.net/api/calculator/ping

  2. Verá un texto similar al siguiente:

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  3. Vaya a la siguiente dirección URL (sustituya <x> e y <> por dos valores para sumar): http://< app_name.azurewebsites.net/api/calculator/add?x>=<x>&y=<y>.

    Example of running the demo add

Implementación en App Service en Linux

App Service también puede hospedar las aplicaciones Web de forma nativa en Linux para las pilas de aplicaciones admitidas. Además, puede ejecutar contenedores de Linux personalizados (también conocidos como Web App for Containers).

Puede modificar el script para realizar la implementación en una instancia de Azure App Service en Linux. App Service en Linux admite Docker. Debe proporcionar un archivo de Docker que empaquete la aplicación web con el entorno de ejecución de servicio en una imagen de Docker. El complemento compila la imagen, la inserta en un registro de Docker y la implementa en la aplicación web.

  1. Consulte Migración de software personalizado a Azure App Service mediante un contenedor personalizado para crear una instancia de Azure App Service en Linux y una instancia de Azure Container Registry.

        az group create --name myResourceGroup2 --location westus2
        az acr create --name myACRName --resource-group myResourceGroup2 --sku Basic --admin-enabled true
        az appservice plan create --name myAppServicePlan --resource-group  myResourceGroup2 --is-linux
        az webapp create --resource-group myResourceGroup2 --plan myAppServicePlan --name myApp --deployment-container-image-name myACRName.azurecr.io/calculator:latest
    
  2. Instale Docker en la canalización de Jenkins.

  3. Asegúrese de que el complemento de canalización de Docker está instalado.

  4. En el mismo repositorio Simple Java Web App for Azure (Aplicación web de Java simple para Azure), edite el archivo Jenkinsfile2 de la siguiente manera:

    1. Actualice el identificador de la suscripción y el identificador del inquilino.

       withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>',
              'AZURE_TENANT_ID=<myTenantId>']) {
      
    2. Actualice los nombres del grupo de recursos, la aplicación web y ACR (reemplazando los marcadores de posición por sus valores).

      def webAppResourceGroup = '<resource_group>'
      def webAppName = '<app_name>'
      def acrName = '<registry>'
      
    3. Reemplace el valor de <azsrvprincipal\> por su identificador de credencial.

      withCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
      
  5. Cree una nueva canalización de Jenkins como hizo cuando realizó la implementación en la aplicación web de Azure en Windows, usando Jenkinsfile2.

  6. Ejecute el nuevo trabajo.

  7. Para realizar la comprobación, ejecute el siguiente comando en la CLI de Azure:

    az acr repository list -n <myRegistry> -o json
    

    Debería ver resultados parecidos al siguiente:

    [
    "calculator"
    ]
    
  8. Vaya a http://<app_name>.azurewebsites.net/api/calculator/ping (reemplazando el marcador de posición). Se mostrarán resultados similares a los siguientes:

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  9. Vaya a http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> (reemplazando los marcadores de posición). Los valores que especifique en x y y se suman y se muestran.

Pasos siguientes