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
- Subscrição do Azure: se não tem uma subscrição 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.
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:
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
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
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:
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.
Entre na instância do Jenkins com SSH.
Na instância Jenkins, instale Az CLI, versão 2.0.67 ou superior.
Instale o maven usando o seguinte comando:
sudo apt install -y maven
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
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.
Verifique se o plug-in Credenciais está instalado.
No menu, selecione Gerenciar Jenkins.
Em Configuração do sistema, selecione Gerenciar plug-in.
Selecione a guia Instalado .
No campo de filtro , digite
credentials
.Verifique se o plug-in Credenciais está instalado. Caso contrário, terá de instalá-lo a partir do separador Disponível .
No menu, selecione Gerenciar Jenkins.
Em Segurança, selecione Gerir Credenciais.
Em Credenciais, selecione (global).
No menu, selecione Adicionar credenciais.
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
.
Selecione OK.
Fork o repositório GitHub de exemplo
Faça login no repositório GitHub para o aplicativo de amostra ímpar ou par.
No canto superior direito do GitHub, escolha Fork.
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.
No painel Jenkins, crie um Pipeline.
Habilite Preparar um ambiente para a execução.
Na seção Definição de> pipeline, selecione Script de pipeline do SCM.
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.
Primeiro, obtenha a chave de autorização por meio das instruções no artigo Gatilhos e ligações HTTP do Azure Functions.
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>
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>