Получение следующей ошибки:
##[error]Error: Failed to update App service 'function-app-name' application settings. Error: BadRequest - Parameter name cannot be empty. (CODE: 400)
Я следую документации, найденной здесь: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/azure-function-app-v2?view=azure-pipelines
Не уверен, почему это терпит неудачу. Вот моя задача:
- task: AzureFunctionApp@2
displayName: 'Azure functions app deploy'
inputs:
azureSubscription: '$(azureSubscription)'
appType: functionAppLinux
appName: $(functionAppName)
package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
appSettings: |
-AzureWebJobsStorage "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AzureWebJobsStorage)"
-repeatorderstorage_STORAGE "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/repeatorderstorage-STORAGE)"
-AZURE_OPENAI_API_KEY "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-API-KEY)"
-AZURE_OPENAI_ENDPOINT "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-ENDPOINT)"
-AZURE_OPENAI_API_VERSION "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-API-VERSION)"
Привет @Sean, доброго дня тебе. Если вам будет удобно, сообщите нам, может ли любой из приведенных ниже ответов appSettings
решить вашу проблему в этом посте. Спасибо за ваше время и усилия.
Чтобы использовать многострочный ключ и значение настроек приложения, добавьте пробел в конце каждой строки. например:
appSettings: |
-key1 value1
-key2 value2
-key3 value3
Как вы можете видеть на скриншоте ниже, после ключа и значения есть пробел.
Ниже файл работал для меня
steps:
- task: AzureFunctionApp@1
displayName: 'Azure functions app deploy'
inputs:
azureSubscription: '$(azureSubscription)'
appType: functionAppLinux
appName: $(functionAppName)
package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
appSettings: |
-AzureWebJobsStorage "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/)"
-repeatorderstorage_STORAGE "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/)"
-AZURE_OPENAI_API_KEY "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/)"
-AZURE_OPENAI_ENDPOINT "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/)"
-AZURE_OPENAI_API_VERSION "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/)"
-Test Vivek
OUTPUT
:Я смог воспроизвести проблему при развертывании приложения-функции с многострочными настройками приложения. Из журналов мы увидели, что контекст JSON был преобразован неправильно.
Хитрость заключается в том, чтобы изменить индикатор многострочной строки для appSettings
с |
на >
.
- task: AzureFunctionApp@2
inputs:
connectedServiceNameARM: '$(ARMSvcCnn)'
appType: 'functionAppLinux'
appName: '$(AzureFunctionApp)'
package: '$(Pipeline.Workspace)/drop/build$(Build.BuildId).zip'
appSettings: >
-TestEnvVar $(Build.BuildId)
-CONNECTION_URL example$(Build.BuildId).com
-AzureWebJobsStorage "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AzureWebJobsStorage)"
-repeatorderstorage_STORAGE "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/repeatorderstorage-STORAGE)"
-AZURE_OPENAI_API_KEY "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-API-KEY)"
-AZURE_OPENAI_ENDPOINT "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-ENDPOINT)"
-AZURE_OPENAI_API_VERSION "@Microsoft.KeyVault(SecretUri=https://$(keyVaultName).vault.azure.net/secrets/AZURE-OPENAI-API-VERSION)"
deploymentMethod: 'runFromPackage'
Кроме того, дважды проверьте, нужно ли задавать значение AzureWebJobsStorage
с секретом Key Vault, так как во время развертывания может возникнуть ошибка, указанная ниже.
Спасибо, я понял ##[error]Error: Unable to find the storage account associated with the function app.
Есть какие-нибудь советы, как решить эту проблему? Для учетной записи хранения включен брандмауэр.
Как упоминалось в моем ответе, эта ошибка была вызвана изменением вами значения по умолчанию AzureWebJobsStorage
в настройках приложения с выражением для получения секретного значения из Key Vault. Именно поэтому я предложил в ответе дважды проверить, нужно ли вам устанавливать значение AzureWebJobsStorage
во время развертывания. Значение по умолчанию было примерно DefaultEndpointsProtocol=https;AccountName=<AccountName>;AccountKey=<AccountKey>;EndpointSuffix=core.windows.net
. Пожалуйста, рассмотрите возможность создания еще одного поста, если предложение вам не подходит.
Вам нужно добавить пустое место в конце каждой строки настроек приложения.