AzureFunctionApp@2 – tarefa implantar Azure Functions v2

Atualize um aplicativo de funções com aplicativos Web baseados em .NET, Python, JavaScript, PowerShell e Java.

Syntax

# Azure Functions Deploy v2
# Update a function app with .NET, Python, JavaScript, PowerShell, Java based web applications.
- task: AzureFunctionApp@2
  inputs:
    connectedServiceNameARM: # string. Alias: azureSubscription. Required. Azure Resource Manager connection. 
    appType: # 'functionApp' | 'functionAppLinux'. Required. App type. 
    appName: # string. Required. Azure Functions App name. 
    #deployToSlotOrASE: false # boolean. Optional. Use when appType != "". Deploy to Slot or App Service Environment. Default: false.
    #resourceGroupName: # string. Required when deployToSlotOrASE = true. Resource group. 
    #slotName: 'production' # string. Required when deployToSlotOrASE = true. Slot. Default: production.
    package: '$(System.DefaultWorkingDirectory)/**/*.zip' # string. Required. Package or folder. Default: $(System.DefaultWorkingDirectory)/**/*.zip.
    #runtimeStack: # 'DOTNET|6.0' | 'DOTNET-ISOLATED|6.0' | 'DOTNET-ISOLATED|7.0' | 'DOTNET-ISOLATED|8.0' | 'JAVA|8' | 'JAVA|11' | 'JAVA|17' | 'JAVA|21' | 'NODE|14' | 'NODE|16' | 'NODE|18' | 'NODE|20' | 'PYTHON|3.8' | 'PYTHON|3.9' | 'PYTHON|3.10' | 'PYTHON|3.11'. Optional. Use when appType = functionAppLinux. Runtime stack. 
  # Application and Configuration Settings
    #appSettings: # string. App settings. 
  # Additional Deployment Options
    #deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Deployment method. Default: auto.
# Azure Functions Deploy v2
# Update a function app with .NET, Python, JavaScript, PowerShell, Java based web applications.
- task: AzureFunctionApp@2
  inputs:
    connectedServiceNameARM: # string. Alias: azureSubscription. Required. Azure Resource Manager connection. 
    appType: # 'functionApp' | 'functionAppLinux'. Required. App type. 
    appName: # string. Required. Azure Functions App name. 
    #deployToSlotOrASE: false # boolean. Optional. Use when appType != "". Deploy to Slot or App Service Environment. Default: false.
    #resourceGroupName: # string. Required when deployToSlotOrASE = true. Resource group. 
    #slotName: 'production' # string. Required when deployToSlotOrASE = true. Slot. Default: production.
    package: '$(System.DefaultWorkingDirectory)/**/*.zip' # string. Required. Package or folder. Default: $(System.DefaultWorkingDirectory)/**/*.zip.
    #runtimeStack: # 'DOTNET|2.2' | 'DOTNET|3.1' | 'DOTNET|6.0' | 'DOTNET-ISOLATED|7.0' | 'JAVA|8' | 'JAVA|11' | 'NODE|8' | 'NODE|10' | 'NODE|12' | 'NODE|14' | 'NODE|16' | 'NODE|18' | 'PYTHON|3.6' | 'PYTHON|3.7' | 'PYTHON|3.8' | 'PYTHON|3.9' | 'PYTHON|3.10'. Optional. Use when appType = functionAppLinux. Runtime stack. 
  # Application and Configuration Settings
    #appSettings: # string. App settings. 
  # Additional Deployment Options
    #deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Deployment method. Default: auto.

Entradas

connectedServiceNameARM - Conexão de Resource Manager do Azure
Alias de entrada: azureSubscription. string. Obrigatórios.

Selecione a assinatura Resource Manager do Azure para a implantação.


appType - Tipo de aplicativo
string. Obrigatórios. Valores permitidos: functionApp (Aplicativo de Funções no Windows) functionAppLinux (Aplicativo de Funções no Linux).

Selecione o tipo aplicativo de funções do Azure para a implantação.


appName - Azure Functions Nome do aplicativo
string. Obrigatórios.

Especifique o nome de um aplicativo Azure Functions existente. Os Aplicativos de Funções listados serão baseados no tipo de aplicativo selecionado.


deployToSlotOrASE - Implantar em Slot ou Ambiente do Serviço de Aplicativo
boolean. Opcional. Use quando appType != "". Valor padrão: false.

Implanta em um slot de implantação existente ou ambiente de Serviço de Aplicativo do Azure. Para ambos os destinos, a tarefa precisa de um nome de grupo de recursos.

Se o destino de implantação for um slot, ele usará como padrão o slot de produção . Qualquer outro nome de slot existente também pode ser fornecido.

Se o destino de implantação for um ambiente Serviço de Aplicativo do Azure, deixe o nome do slot como produção e especifique o nome do grupo de recursos.


resourceGroupName - Grupo de recursos
string. Obrigatório quando deployToSlotOrASE = true.

O nome do grupo de recursos é necessário quando o destino de implantação é um slot de implantação ou um Ambiente do Serviço de Aplicativo.

Insere ou seleciona o grupo de recursos do Azure que contém o Serviço de Aplicativo do Azure especificado acima.


slotName - Slot
string. Obrigatório quando deployToSlotOrASE = true. Valor padrão: production.

Insere ou seleciona um slot existente, excluindo o slot De produção.


slotName - Slot
string. Obrigatório quando deployToSlotOrASE = true. Valor padrão: production.

Insira ou Selecione um Slot existente diferente do slot de Produção.


package - Pacote ou pasta
string. Obrigatórios. Valor padrão: $(System.DefaultWorkingDirectory)/**/*.zip.

O caminho do arquivo para o pacote ou pasta que contém Serviço de Aplicativo conteúdo gerado pelo MSBuild ou um arquivo zip compactado. Há suporte para variáveis ( | versão de build) e curingas. Por exemplo, $(System.DefaultWorkingDirectory)/**/*.zip.


runtimeStack - Pilha de runtime
string. Opcional. Use quando appType = functionAppLinux. Valores permitidos: DOTNET|6.0, DOTNET-ISOLATED|6.0, , DOTNET-ISOLATED|7.0, DOTNET-ISOLATED|8.0, JAVA|8, JAVA|11, JAVA|17, JAVA|21, NODE|16NODE|14, NODE|18, , NODE|20, PYTHON|3.8, , PYTHON|3.9, , PYTHON|3.10, PYTHON|3.11.

Especifique a estrutura e a versão em que seu aplicativo de funções será executado. Você pode usar qualquer uma das versões de runtime com suporte. Valores antigos como DOCKER|microsoft/azure-functions-* são preteridos. Novos valores são listados na lista suspensa na tarefa assistente. Se houver uma versão mais recente de uma estrutura disponível nas versões de runtime com suporte , você poderá especificá-la mesmo que ela não esteja na lista.


runtimeStack - Pilha de runtime
string. Opcional. Use quando appType = functionAppLinux. Valores permitidos: DOTNET|2.2 (DOTNET|2.2 (functionapp v2)), DOTNET|3.1 (DOTNET|3.1 (functionapp v3)), DOTNET|6.0 (DOTNET|6.0 (functionapp v4)), DOTNET-ISOLATED|7.0 (DOTNET-ISOLATED|7.0 (functionapp v4)), JAVA|8 (JAVA|8 (functionapp v2/v3/v4)), JAVA|11 (JAVA|11 (functionapp v3/v4)), NODE|8 (NODE|8 (functionapp v2)), NODE|10 (NODE|10 (functionapp v2/v3)), NODE|12 (NODE|12 (functionapp v3)), NODE|14 (NODE|14 (functionapp v3/v4)), NODE|16 (NODE|16 (functionapp v4)), NODE|18 (NODE|18 (functionapp v4)), PYTHON|3.6 (PYTHON|3.6 (functionapp v2/v3)), PYTHON|3.7 (PYTHON|3.7 (functionapp v2/v3/v4)), PYTHON|3.8 (PYTHON|3.78 (functionapp v3/v4)), PYTHON|3.9 (PYTHON|3.9 (functionapp v3/v4)), PYTHON|3.10 (PYTHON|3.10 (functionapp v3/v4)).

Especifique a estrutura e a versão em que seu aplicativo de funções será executado. Você pode usar qualquer uma das versões de runtime com suporte. Valores antigos como DOCKER|microsoft/azure-functions-* são preteridos. Novos valores são listados na lista suspensa na tarefa assistente. Se houver uma versão mais recente de uma estrutura disponível nas versões de runtime com suporte , você poderá especificá-la mesmo que ela não esteja na lista.


appSettings - Configurações do aplicativo
string.

Insira as configurações do aplicativo usando a sintaxe -key value (por exemplo:-RequestTimeout 5000-Port 5000-WEBSITE_TIME_ZONE ). Coloque os valores que contêm espaços entre aspas duplas (por exemplo: "Eastern Standard Time").


deploymentMethod - Método de implantação
string. Obrigatório quando appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Valores permitidos: auto (detecção automática), zipDeploy (Implantação zip) runFromPackage (Implantação zip com executar do pacote). Valor padrão: auto.

Especifica o método de implantação para o aplicativo. Os aplicativos de Consumo do Linux não dão suporte a essa configuração.


deploymentMethod - Método de implantação
string. Obrigatório quando appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Valores permitidos: auto (detecção automática), zipDeploy (Implantação zip) runFromPackage (Implantação zip com executar do pacote). Valor padrão: auto.

Escolhe o método de implantação para o aplicativo. Os aplicativos de Consumo do Linux não dão suporte a essa configuração.s


Opções de controle da tarefa

Todas as tarefas têm opções de controle além de suas entradas de tarefa. Para obter mais informações, consulte Opções de controle e propriedades comuns da tarefa.

Variáveis de saída

Essa tarefa define as variáveis de saída a seguir, que você pode consumir em etapas downstream, trabalhos e estágios.

AppServiceApplicationUrl
URL do aplicativo do Aplicativo de Funções do Azure selecionado.

Comentários

A tarefa Implantação de Funções do Azure é usada para atualizar Azure Functions para implantar o Functions no Azure. A tarefa funciona em agentes do Azure Pipelines multiplataforma que executam o Windows, Linux ou Mac e usa as tecnologias de implantação subjacentes das APIs REST RunFromPackage, Zip Deploy e Kudu.

A tarefa funciona para o Azure Functions idiomas com suporte.

Pré-requisitos para a tarefa

Os pré-requisitos a seguir precisam ser configurados nos computadores de destino para que a tarefa funcione corretamente.

Azure Function

A tarefa é usada para implantar um projeto Azure Functions em uma Função do Azure existente. O aplicativo de funções do Azure deve existir antes de executar a tarefa. O Aplicativo de Funções do Azure pode ser criado a partir do portal do Azure. Como alternativa, a tarefa Azure PowerShell pode ser usada para executar scripts do PowerShell do AzureRM para provisionar e configurar o aplicativo de funções do Azure.

A tarefa pode ser usada para implantar Azure Functions (Windows/Linux).

Assinatura do Azure

Para implantar no Azure, uma assinatura do Azure precisa ser vinculada ao Azure Pipelines usando a guia Serviços na seção Administração de Conta. Adicione a assinatura do Azure a ser usada na definição Compilar ou Release Management abrindo a tela Administração de Conta (ícone de engrenagem no canto superior direito da tela) e clique na Guia Serviços.

Create o ponto de extremidade de serviço do ARM e use o tipo de ponto de extremidade Resource Manager do Azure. Para obter mais detalhes, siga as etapas listadas no link aqui.

A tarefa não funciona com o ponto de extremidade de serviço Clássico do Azure e não listará essas conexões nos parâmetros da tarefa.

Métodos de implantação

Vários métodos de implantação estão disponíveis nesta tarefa.

Para alterar a opção de implantação baseada em pacote em uma tarefa de designer, expanda Opções adicionais de implantação e habilite Selecionar Método de Implantação.

Com base no tipo do Serviço de Aplicativo do Azure e do agente do Azure Pipelines, a tarefa usa uma tecnologia de implantação adequada. As tecnologias de implantação usadas pelas tarefas são as seguintes:

Por padrão, a tarefa tenta selecionar a tecnologia de implantação apropriada com base no pacote de entrada, no tipo de Serviço de Aplicativo e no sistema operacional do agente.

  • Se um script pós-implantação for fornecido, use a Implantação de zip.
  • Se o tipo de Serviço de Aplicativo for Aplicativo Web no Linux, use a Implantação de zip.
  • Se um arquivo .war for fornecido, use Implantação de war.
  • Se um arquivo .jar for fornecido, use Executar do zip.
  • Para todas as outras tarefas, use Executar do Pacote (via Zip Deploy).

Em um agente não Windows (para qualquer tipo de Serviço de Aplicativo), a tarefa depende da API REST do Kudu para implantar o aplicativo Web.

API REST do Kudu

A API REST do Kudu funciona em agentes de automação do Windows e do Linux quando o destino é um Aplicativo Web no Windows, um Aplicativo Web no Linux (origem interna) ou um aplicativo de funções. A tarefa usa o Kudu para copiar arquivos para o Serviço de Aplicativo do Azure.

Implantação de zip

A Implantação de zip cria um pacote de implantação .zip do pacote ou pasta escolhido. Em seguida, ela implanta o conteúdo do arquivo na pasta wwwroot do aplicativo de funções chamado Serviço de Aplicativo no Azure. Essa opção substitui todo o conteúdo existente na pasta wwwroot. Para obter mais informações, confira Implantação de zip para o Azure Functions.

Execução a partir do pacote

Ao usar Executar do Pacote, cria-se o mesmo pacote de implantação que a Implantação de zip. Em vez de implantar arquivos na pasta wwwroot, o runtime do Functions monta o pacote inteiro. Ao usar essa opção, os arquivos na pasta wwwroot tornam-se somente leitura. Para obter mais informações, consulte Executar o Azure Functions de um arquivo de pacote.

Solução de problemas

Erro: não foi possível buscar o token de acesso para o Azure. Verifique se a entidade de serviço usada é válida e não expirou.

A tarefa usa a entidade de serviço na conexão de serviço para autenticar com o Azure. Se a entidade de serviço tiver expirado ou não tiver permissões para o Serviço de Aplicativo, a tarefa falhará com esse erro. Verifique a validade da entidade de serviço usada e se ela está presente no registro do aplicativo. Para obter mais informações, confira Usar o controle de acesso baseado em função para gerenciar o acesso aos recursos da sua assinatura do Azure. Esta postagem no blog também contém mais informações sobre como usar a autenticação da entidade de serviço.

Erro de SSL

Se você quiser usar um certificado no Serviço de Aplicativo, o certificado precisará ser assinado por uma autoridade de certificação confiável. Se o seu aplicativo Web retorna erros de validação de certificado, você provavelmente está usando um certificado autoassinado. Defina uma variável chamada VSTS_ARM_REST_IGNORE_SSL_ERRORS para o valor true no pipeline de build ou lançamento para resolver o erro.

Uma versão fica parada por muito tempo e depois falha

Esse problema pode ser resultado de capacidade insuficiente em seu plano de Serviço de Aplicativo. Para resolver esse problema, você pode escalar verticalmente a instância do Serviço de Aplicativo para aumentar a CPU, a RAM e o espaço em disco disponíveis ou pode tentar um plano diferente do Serviço de Aplicativo.

Códigos de erro 5xx

Se você estiver vendo um erro 5xx, verifique o status do serviço do Azure.

O Azure Function parou de funcionar repentinamente

Azure Functions poderá parar de funcionar repentinamente se mais de um ano tiver passado desde a última implantação. Se você implantar com "RunFromPackage" em "deploymentMethod", uma SAS com uma data de validade de 1 ano será gerada e definida como o valor de "WEBSITE_RUN_FROM_PACKAGE" na configuração do aplicativo. Azure Functions usa essa SAS para fazer referência ao arquivo de pacote para execução da função, portanto, se a SAS tiver expirado, a função não será executada. Para resolve esse problema, implante novamente para gerar uma SAS com uma data de validade de um ano.

Erro: nenhum pacote encontrado com o padrão especificado

Verifique se o pacote mencionado na tarefa está publicado como um artefato na build ou em um estágio anterior e baixado no trabalho atual.

Erro: não há suporte para publicar usando a opção de implantação zip para o tipo de pacote msBuild

Os pacotes da Web criados com a tarefa MSBuild (com argumentos padrão) têm uma estrutura de pastas aninhada que só pode ser implantada corretamente pela Implantação da Web. A opção de implantação de publicação em zip não pode ser usada para implantar esses pacotes. Para converter a estrutura de empacotamento, siga estas etapas:

  1. Na tarefa Solução de build, altere MSBuild Arguments para /p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(System.DefaultWorkingDirectory)\\WebAppContent":

    Captura de tela que mostra os valores da Solução de build.

  2. Adicione uma tarefa Arquivar e altere os valores da seguinte maneira:

    1. Altere Pasta raiz ou documento para arquivar para $(System.DefaultWorkingDirectory)\\WebAppContent.

    2. Desmarque a caixa de seleção Prefixar nome da pasta raiz para caminhos de arquivo:

      Captura de tela que mostra os valores de Arquivar.

A implantação do aplicativo de funções no Windows foi bem-sucedida, mas o aplicativo não funciona

Esse problema poderá ocorrer se um arquivo web.config não estiver presente em seu aplicativo. Você pode adicionar um arquivo web.config à sua fonte ou gerar um automaticamente usando as Definições de Aplicativo e Configuração da tarefa.

  1. Selecione a tarefa e acesse Gerar parâmetros web.config para aplicativos Python, Node.js, Go e Java:

    Captura de tela que mostra a seção Gerar parâmetros web.config.

  2. Clique no botão de mais opções (...) em Gerar parâmetros web.config para aplicativos Python, Node.js, Go e Java para editar os parâmetros:

    Captura de tela que mostra a Gerar parâmetros web.config.

  3. Selecione o tipo de aplicativo na lista Estrutura do aplicativo.

  4. Selecione OK. Isso preencherá os parâmetros web.config necessários para gerar o arquivo web.config.

Perguntas frequentes

Como devo configurar minha conexão de serviço?

Essa tarefa exige uma conexão de serviço do Azure Resource Manager.

Como devo configurar a implantação de trabalho Web com o Application Insights?

Ao implantar em um Serviço de Aplicativo, se você tiver o Application Insights configurado e tiver habilitado Remove additional files at destination, também precisará habilitar Exclude files from the App_Data folder. Habilitar essa opção mantém a extensão do Application Insights em um estado seguro. Essa etapa é necessária porque o WebJob contínuo do Application Insights está instalado na pasta App_Data.

Como devo configurar meu agente se ele estiver por trás de um proxy enquanto estou implantando no Serviço de Aplicativo?

Se o agente auto-hospedado exigir um proxy Web, você poderá informar o agente sobre o proxy durante a configuração. Fazer isso possibilita que seu agente se conecte ao Azure Pipelines ou Azure DevOps Server por meio do proxy. Saiba mais sobre como executar um agente auto-hospedado por trás de um proxy Web.

Não consigo implantar em um Ambiente do Serviço de Aplicativo interno usando uma conexão de serviço Resource Manager do Azure e um agente hospedado pela Microsoft

Por design, um agente hospedado pela Microsoft não funcionará com um Ambiente do Serviço de Aplicativo. Em vez disso, você precisa configurar um agente privado em uma máquina virtual que esteja na mesma rede virtual que o Ambiente do Serviço de Aplicativo. Também defina uma zona DNS privada para habilitar a comunicação entre os recursos.

Exemplos

Aqui está um snippet YAML de exemplo que implanta funções do Azure no Windows:


variables:
  azureSubscription: Contoso
  # To ignore SSL error, uncomment the below variable
  # VSTS_ARM_REST_IGNORE_SSL_ERRORS: true

steps:
- task: AzureFunctionApp@2
  displayName: Azure Function App Deploy
  inputs:
    azureSubscription: $(azureSubscription)
    appName: samplefunctionapp
    appType: functionApp
    package: $(System.DefaultWorkingDirectory)/**/*.zip

Para implantar uma função no Linux, adicione o parâmetro appType e defina-o como appType: functionAppLinux. Se você não especificar um valor, o padrão será functionApp.

Para especificar explicitamente o método de implantação como Implantação de zip, adicione o parâmetro deploymentMethod: zipDeploy. Outro valor com suporte para esse parâmetro é runFromPackage. Se você não especificar um valor, o padrão será auto.

Para obter um passo a passo que mostra como criar um pipeline de CI/CD (integração contínua e entrega contínua), confira Compilar e implantar o Java no Azure Functions.

Requisitos

Requisito Descrição
Tipos de pipeline YAML, build clássico, versão clássica
É executado em Agent, DeploymentGroup
Demandas Nenhum
Funcionalidades Essa tarefa não atende a nenhuma demanda por tarefas subsequentes no trabalho.
Restrições de comando Qualquer
Variáveis configuráveis Qualquer
Versão do agente 2.104.1 ou superior
Categoria da tarefa Implantar