Tutorial: Implementación en Azure Functions con Jenkins

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.

Azure Functions es un servicio de proceso sin servidor. Con Azure Functions, puede ejecutar código a petición sin aprovisionar ni administrar infraestructura. En este tutorial se muestra cómo implementar una función de Java en Azure Functions mediante el complemento para Azure Functions.

Requisitos previos

Visualización del código fuente

El código fuente utilizado para este tutorial se encuentra en el repositorio de GitHub de Visual Studio China.

Creación de una función de Java

Para crear una función de Java con la pila del entorno de tiempo de ejecución de Java, utilice Azure Portal o la CLI de Azure.

Los siguientes pasos muestran cómo crear una función de Java mediante la CLI de Azure:

  1. Cree un grupo de recursos y reemplace el <marcador de posición resource_group> por el nombre del grupo de recursos.

    az group create --name <resource_group> --location eastus
    
  2. Cree una cuenta de almacenamiento de Azure y sustituya los marcadores de posición por los valores adecuados.

    az storage account create --name <storage_account> --location eastus --resource-group <resource_group> --sku Standard_LRS    
    
  3. Cree la aplicación de función de prueba y sustituya los marcadores de posición por los valores adecuados.

    az functionapp create --resource-group <resource_group> --runtime java --consumption-plan-location eastus --name <function_app> --storage-account <storage_account> --functions-version 2
    

Preparación del servidor Jenkins

En los siguientes pasos se explica cómo preparar el servidor Jenkins:

  1. Implemente un servidor Jenkins en Azure. Si aún no tiene una instancia del servidor Jenkins instalado, el artículo sobre la Creación de un servidor Jenkins en Azure le guiará por el proceso.

  2. Inicie sesión en la instancia de Jenkins con SSH.

  3. Instale la versión 2.0.67 o posterior de la CLI de Azure en la instancia de Jenkins.

  4. Instale Maven con el siguiente comando:

    sudo apt install -y maven
    
  5. En la instancia de Jenkins, instale Azure Functions Core Tools; para ello, ejecute los siguientes comandos en un símbolo del sistema del terminal:

    curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
    sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs)-prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list'
    cat /etc/apt/sources.list.d/dotnetdev.list
    sudo apt-get update
    sudo apt-get install azure-functions-core-tools-3
    
  6. Jenkins necesita una entidad de servicio de Azure para la autenticación y el acceso a los recursos de Azure. Consulte el artículo de Implementación en Azure App Service para instrucciones paso a paso.

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

    1. En el menú, seleccione Manage Jenkins (Administrar Jenkins).

    2. En System Configuration (Configuración del sistema), seleccione Manage plug-in (Administrar complemento).

    3. Seleccione la pestaña Instalado.

    4. En el campo Filter (Filtro), escriba credentials.

    5. Compruebe que está instalado el complemento de credenciales. Si no es así, tendrá que instalarlo desde la pestaña Available (Disponibles).

    The Credentials Plug-in needs to be installed.

  8. En el menú, seleccione Manage Jenkins (Administrar Jenkins).

  9. En Security (Seguridad), seleccione Manage Credentials (Administrar credenciales).

  10. En Credentials (Credenciales), seleccione (global).

  11. En el menú, seleccione Add Credentials (Agregar credenciales).

  12. Escriba los siguientes valores para la entidad de servicio de Microsoft Azure:

    • Tipo: seleccione el valor: Nombre de usuario con contraseña.
    • Nombre de usuario: especifique el appId valor de la entidad de servicio creada.
    • Contraseña: especifique el password (secreto) de la entidad de servicio.
    • Id. : especifique el identificador de credencial, como azuresp.
  13. Seleccione Aceptar.

Bifurcación del repositorio de GitHub de ejemplo

  1. Inicie sesión en el repositorio de GitHub para la aplicación de ejemplo par o impar.

  2. En la esquina superior derecha de GitHub, elija Fork (Bifurcar).

  3. Siga las indicaciones para seleccionar la cuenta de GitHub y finalizar la bifurcación.

Creación de una canalización de Jenkins

En esta sección, creará la canalización de Jenkins.

  1. En el panel de Jenkins, cree una canalización.

  2. Habilite Prepare an environment for the run (Preparar un entorno para la ejecución).

  3. En la sección Pipeline-Definition (Definición de canalización), seleccione Script de canalización en SCM.>

  4. Especifique la dirección URL y la ruta de acceso del script de la bifurcación de GitHub ("doc/recursos/jenkins/JenkinsFile") para utilizar en el ejemplo de JenkinsFile.

     node {
     withEnv(['AZURE_SUBSCRIPTION_ID=99999999-9999-9999-9999-999999999999',
             'AZURE_TENANT_ID=99999999-9999-9999-9999-999999999999']) {
         stage('Init') {
             cleanWs()
             checkout scm
         }
    
         stage('Build') {
             sh 'mvn clean package'
         }
    
         stage('Publish') {
             def RESOURCE_GROUP = '<resource_group>' 
             def FUNC_NAME = '<function_app>'
             // login Azure
             withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
             sh '''
                 az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                 az account set -s $AZURE_SUBSCRIPTION_ID
             '''
             }
             sh 'cd $PWD/target/azure-functions/odd-or-even-function-sample && zip -r ../../../archive.zip ./* && cd -'
             sh "az functionapp deployment source config-zip -g $RESOURCE_GROUP -n $FUNC_NAME --src archive.zip"
             sh 'az logout'
             }
         }
     }
    

Compilación e implementación

Ahora es el momento de ejecutar el trabajo de Jenkins.

  1. En primer lugar, siga las instrucciones del artículo Enlaces y desencadenadores HTTP de Azure Functions para obtener la clave de autorización.

  2. En el explorador, escriba la dirección URL de la aplicación. Reemplace los marcadores de posición por los valores adecuados y especifique un valor numérico para <input_number> como entrada para la función java.

    https://<function_app>.azurewebsites.net/api/HttpTrigger-Java?code=<authorization_key>&number=<input_number>
    
  3. Verá resultados similares a la salida del ejemplo siguiente (donde se utilizó un número impar [365] como prueba):

    The number 365 is Odd.
    

Limpieza de recursos

Si no va a seguir usando esta aplicación, elimine los recursos que ha creado con el siguiente paso:

az group delete -y --no-wait -n <resource_group>

Pasos siguientes