Tutorial: Implantação no Azure Functions usando o Jenkins

Importante

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

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

Pré-requisitos

  • Assinatura do Azure: caso você não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.
  • Servidor Jenkins: se você não tiver um servidor Jenkins instalado, consulte o artigo Criar um servidor Jenkins no Azure.

Exibir 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 runtime do 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ções 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 você ainda não tiver uma instância do servidor Jenkins instalado, o artigo Criar um servidor Jenkins no Azure o orientará pelo processo.

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

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

  4. Instale o maven usando o seguinte comando:

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

  7. Verifique se o plug-in de 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 filtro, insira credentials.

    5. Verifique se o plug-in de Credenciais está instalado. Caso não esteja, instale-o usando a guia Disponível.

    The Credentials Plug-in needs to be installed.

  8. No menu, selecione Gerenciar Jenkins.

  9. Em Segurança, selecione Gerenciar 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 o appId da 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.

Criar fork do repositório GitHub de exemplo

  1. Entre no repositório GitHub do aplicativo de exemplo par ou ímpar.

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

  3. Siga os prompts para escolher sua conta do GitHub e concluir o fork.

Criar um pipeline do Jenkins

Nesta seção, você criará o Pipeline do Jenkins.

  1. No painel do 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 a URL e o caminho do script do fork do GitHub ("doc/resources/jenkins/JenkinsFile") para usar no exemplo 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'
             }
         }
     }
    

Criar e implantar

Agora é hora de executar o trabalho do Jenkins.

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

  2. No navegador, digite a 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 à seguinte saída de exemplo (em que um número ímpar – 365 – foi usado como teste):

    The number 365 is Odd.
    

Limpar os recursos

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

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

Próximas etapas