Tutorial: Implantar no Azure Functions usando Jenkins

Importante

Muitos serviços do Azure têm plug-ins Jenkins. Alguns desses plug-ins estarão sem suporte a partir de 29 de fevereiro de 2024. A CLI do Azure é a maneira atualmente recomendada de integrar o Jenkins aos serviços do Azure. Para obter mais informações, consulte o artigo Jenkins plug-ins for Azure.

O Azure Functions é um serviço de computação sem servidor. Usando o Azure Functions, você pode executar código sob demanda sem provisionar ou gerenciar infraestrutura. Este tutorial mostra como implantar uma função Java no Azure Functions usando o plug-in do Azure Functions.

Pré-requisitos

Ver o código-fonte

O código-fonte usado para este tutorial está localizado no repositório GitHub do Visual Studio China.

Criar uma função Java

Para criar uma função Java com a pilha de tempo de execução Java, use o portal do Azure ou a CLI do Azure.

As etapas a seguir mostram como criar uma função Java usando a CLI do Azure:

  1. Crie um grupo de recursos, substituindo o espaço reservado resource_group> pelo nome do <grupo de recursos.

    az group create --name <resource_group> --location eastus
    
  2. Crie uma conta de armazenamento do Azure, substituindo os espaços reservados pelos valores apropriados.

    az storage account create --name <storage_account> --location eastus --resource-group <resource_group> --sku Standard_LRS    
    
  3. Crie o aplicativo de função de teste, substituindo os espaços reservados pelos valores apropriados.

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

Preparar o servidor Jenkins

As etapas a seguir explicam como preparar o servidor Jenkins:

  1. Implante um servidor Jenkins no Azure. Se ainda não tiver uma instância do servidor Jenkins instalada, o artigo Criar um servidor Jenkins no Azure orienta-o ao longo do processo.

  2. Entre na instância do Jenkins com SSH.

  3. Na instância Jenkins, instale Az CLI, versão 2.0.67 ou superior.

  4. Instale o maven usando o seguinte comando:

    sudo apt install -y maven
    
  5. Na instância Jenkins, instale as Ferramentas Principais do Azure Functions emitindo os seguintes comandos em um prompt de 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 precisa de uma entidade de serviço do Azure para autenticar e acessar recursos do Azure. Consulte Implantar no Serviço de Aplicativo do Azure para obter instruções passo a passo.

  7. Verifique se o plug-in Credenciais está instalado.

    1. No menu, selecione Gerenciar Jenkins.

    2. Em Configuração do sistema, selecione Gerenciar plug-in.

    3. Selecione a guia Instalado .

    4. No campo de filtro , digite credentials.

    5. Verifique se o plug-in Credenciais está instalado. Caso contrário, terá de instalá-lo a partir do separador Disponível .

    The Credentials Plug-in needs to be installed.

  8. No menu, selecione Gerenciar Jenkins.

  9. Em Segurança, selecione Gerir Credenciais.

  10. Em Credenciais, selecione (global).

  11. No menu, selecione Adicionar credenciais.

  12. Insira os seguintes valores para sua entidade de serviço do Microsoft Azure:

    • Tipo: Selecione o valor: Nome de usuário com senha.
    • Nome de usuário: especifique a appId entidade de serviço criada.
    • Senha: especifique o password (segredo) da entidade de serviço.
    • ID: especifique o identificador de credencial, como azuresp.
  13. Selecione OK.

Fork o repositório GitHub de exemplo

  1. Faça login no repositório GitHub para o aplicativo de amostra ímpar ou par.

  2. No canto superior direito do GitHub, escolha Fork.

  3. Siga as instruções para selecionar sua conta do GitHub e concluir a bifurcação.

Criar um pipeline Jenkins

Nesta seção, você cria o Jenkins Pipeline.

  1. No painel Jenkins, crie um Pipeline.

  2. Habilite Preparar um ambiente para a execução.

  3. Na seção Definição de> pipeline, selecione Script de pipeline do SCM.

  4. Insira o URL e o caminho do script da bifurcação do GitHub ("doc/resources/jenkins/JenkinsFile") para usar no exemplo do 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'
             }
         }
     }
    

Compilar e implementar

Agora é hora de executar o trabalho de Jenkins.

  1. Primeiro, obtenha a chave de autorização por meio das instruções no artigo Gatilhos e ligações HTTP do Azure Functions.

  2. No navegador, insira o URL do aplicativo. Substitua os espaços reservados pelos valores apropriados e especifique um valor numérico para input_number> como entrada para <a função Java.

    https://<function_app>.azurewebsites.net/api/HttpTrigger-Java?code=<authorization_key>&number=<input_number>
    
  3. Você verá resultados semelhantes ao seguinte exemplo de saída (onde um número ímpar - 365 - foi usado como teste):

    The number 365 is Odd.
    

Clean up resources (Limpar recursos)

Se você não vai continuar a usar este aplicativo, exclua os recursos que você criou com a seguinte etapa:

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

Próximos passos