英文:
How to configure Deployment Center configuration in ARM Template?
问题
我通过GitHub Action工作流创建了一个“Function App”,并从Azure创建了一个ARM模板。这是一个CI/CD工作流程。
要直接部署“Function App”,我手动转到“部署中心”并连接到GitHub。然后获取“发布配置文件”设置,并更新GitHub密钥。
手动过程可以正常工作!但如果它是ARM模板的一部分,工作流会失败。
我在ARM模板中看到了以下部分:
{
"type": "sourcecontrols",
"name": "web",
"apiVersion": "2020-12-01",
"properties": {
"RepoUrl": "[parameters('repoUrl')]",
"branch": "[parameters('branch')]",
"IsManualIntegration": false,
"deploymentRollbackEnabled": false,
"isMercurial": false,
"isGitHubAction": true,
"gitHubActionConfiguration": {
"generateWorkflowFile": false,
"workflowSettings": {
"appType": "functionapp",
"publishType": "code",
"os": "linux",
"runtimeStack": "dotnet",
"workflowApiVersion": "2020-12-01",
"slotName": "production",
"variables": {
"runtimeVersion": "7.0.x"
}
}
}
},
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', parameters('name'))]"
]
}
但上述部分生成了错误:
错误: "status":"Failed","error":"code":"DeploymentFailed","target":"/subscriptions/f24b12b1-d887-4938-8c49-ce56acded667/resourceGroups/MyResourceGroup/providers/Microsoft.Resources/deployments/azure-function-api","message":"至少有一个资源部署操作失败。请列出详细的部署操作。请参阅https://aka.ms/arm-deployment-operations了解用法详细信息。","details":["code":"NotFound","target":"/subscriptions/f24b12b1-d887-4938-8c49-ce56acded667/resourceGroups/MyResourceGroup/providers/Microsoft.Resources/deployments/azure-function-api","message":"
\r\n \"Code\": \"NotFound\",\r\n \"Message\": \"无法找到名为GitHub的SourceControlToken。\",\r\n \"Target\": null,\r\n \"Details\": [\r\n ***
\"Message\": \"无法找到名为GitHub的SourceControlToken。\"\r\n ***,
***
\"Code\": \"NotFound\"\r\n ***,
***
\"ErrorEntity\": ***
\"ExtendedCode\": \"51004\",
\"MessageTemplate\": \"无法找到名为0的1。\",
\"Parameters\": [
\"SourceControlToken\",
\"GitHub\"
],
\"Code\": \"NotFound\",
\"Message\": \"无法找到名为GitHub的SourceControlToken。\"
***
***
],
\"Innererror\": null
***"]
我需要哪些配置才能通过上述错误?
除了手动步骤外,是否有ARM模板命令来获取GitHub仓库名称、分支并将密钥复制到“GitHub设置/秘密与变量”中作为“存储库秘密”?
英文:
I created a Function App
through GitHub Action
workflow and an ARM Template
from Azure
. It is a CI/CD
workflow.
To deploy the Function App
directly, I go to Deployment Center
manually connect to GitHub. Then get the Publish Profile
settings, and update the GitHub
secret.
The manual process works! But if it is part of the ARM Template
, the workflow fails.
I see a section in the ARM Template
like below:
{
"type": "sourcecontrols",
"name": "web",
"apiVersion": "2020-12-01",
"properties": {
"RepoUrl": "[parameters('repoUrl')]",
"branch": "[parameters('branch')]",
"IsManualIntegration": false,
"deploymentRollbackEnabled": false,
"isMercurial": false,
"isGitHubAction": true,
"gitHubActionConfiguration": {
"generateWorkflowFile": false,
"workflowSettings": {
"appType": "functionapp",
"publishType": "code",
"os": "linux",
"runtimeStack": "dotnet",
"workflowApiVersion": "2020-12-01",
"slotName": "production",
"variables": {
"runtimeVersion": "7.0.x"
}
}
}
},
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', parameters('name'))]"
]
}
But the above generates the error:
ERROR: ***"status":"Failed","error":***"code":"DeploymentFailed","target":"/subscriptions/f24b12b1-d887-4938-8c49-ce56acded667/resourceGroups/MyResourceGroup/providers/Microsoft.Resources/deployments/azure-function-api","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-deployment-operations for usage details.","details":[***"code":"NotFound","target":"/subscriptions/f24b12b1-d887-4938-8c49-ce56acded667/resourceGroups/MyResourceGroup/providers/Microsoft.Resources/deployments/azure-function-api","message":"***\r\n \"Code\": \"NotFound\",\r\n \"Message\": \"Cannot find SourceControlToken with name GitHub.\",\r\n \"Target\": null,\r\n \"Details\": [\r\n ***\r\n \"Message\": \"Cannot find SourceControlToken with name GitHub.\"\r\n ***,\r\n ***\r\n \"Code\": \"NotFound\"\r\n ***,\r\n ***\r\n \"ErrorEntity\": ***\r\n \"ExtendedCode\": \"51004\",\r\n \"MessageTemplate\": \"Cannot find ***0*** with name ***1***.\",\r\n \"Parameters\": [\r\n \"SourceControlToken\",\r\n \"GitHub\"\r\n ],\r\n \"Code\": \"NotFound\",\r\n \"Message\": \"Cannot find SourceControlToken with name GitHub.\"\r\n ***\r\n ***\r\n ],\r\n \"Innererror\": null\r\n***"***]***
What configuration that I need to have so I can pass the above error?
Instead of the manual step, are there ARM Template
commands to get the GitHub
repository name, branch and copy the secret to the GitHub Settings\Secrets & Variables
as Repository secrets
?
答案1
得分: 1
我尝试了以下的ARM模板,并在模板的源代码参数部分中添加了包含函数和分支的存储库URL,然后尝试部署它,函数触发器成功部署,参见以下链接:
您可以在此处检查函数部署日志,查看是否需要更改任何设置,或者是否有任何阻止通过GitHub操作进行源代码部署的问题。
函数触发器已成功从我的GitHub存储库部署如下:
添加了以下CORS设置:
要通过门户部署ARM模板,请使用以下方法:
在Azure门户中选择自定义部署 > 在编辑器中构建自己的模板 > 添加上述ARM模板并部署,请确保在参数中替换repo_urrl和branch为您自己的值:
点击保存,选择资源组 > 查看 + 创建 > 将部署函数应用与触发器:
英文:
I tried the below ARM Template and added my repository URL that contains the Function and Branch in the source control parameter section of the template and tried deploying it, The Function Trigger got deployed successfully, Refer below:-
ARM template reference Link
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"appName": {
"defaultValue": "[concat('funtionapp-', uniqueString(resourceGroup().id))]",
"type": "string",
"metadata": {
"description": "The name of the function app that you wish to create."
}
},
"sku": {
"defaultValue": "S1",
"type": "string",
"metadata": {
"description": "The pricing tier for the hosting plan."
}
},
"workerSize": {
"defaultValue": "0",
"allowedValues": [
"0",
"1",
"2"
],
"type": "String",
"metadata": {
"description": "The instance size of the hosting plan (small, medium, or large)."
}
},
"storageAccountType": {
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_ZRS",
"Premium_LRS"
],
"type": "string",
"metadata": {
"description": "Storage Account type"
}
},
"repoURL": {
"defaultValue": "https://github.com/username/FunctionApp25",
"type": "string",
"metadata": {
"description": "The URL for the GitHub repository that contains the project to deploy."
}
},
"branch": {
"defaultValue": "master",
"type": "string",
"metadata": {
"description": "The branch of the GitHub repository to use."
}
},
"location": {
"defaultValue": "[resourceGroup().location]",
"type": "string",
"metadata": {
"description": "Location for all resources."
}
}
},
"variables": {
"functionAppName": "[parameters('appName')]",
"hostingPlanName": "[concat(parameters('appName'), '-plan')]",
"storageAccountName": "[concat(uniquestring(resourceGroup().id), 'functions')]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-02-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "Storage"
},
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2020-12-01",
"name": "[variables('hostingPlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('sku')]"
},
"properties": {
"workerSize": "[parameters('workerSize')]",
"numberOfWorkers": 1
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2020-12-01",
"name": "[variables('functionAppName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
],
"kind": "functionapp",
"properties": {
"name": "[variables('functionAppName')]",
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
"clientAffinityEnabled": false,
"siteConfig": {
"alwaysOn": true,
"cors": {
"allowedOrigins": [
"*"
]
},
"appSettings": [
{
"name": "FUNCTIONS_EXTENSION_VERSION",
"value": "~1"
},
{
"name": "AzureWebJobsStorage",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('storageAccountName'),';AccountKey=',listkeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value,';')]"
},
{
"name": "AzureWebJobsDashboard",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('storageAccountName'),';AccountKey=',listkeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value,';')]"
}
]
}
},
"resources": [
{
"type": "sourcecontrols",
"apiVersion": "2020-12-01",
"name": "web",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', variables('functionAppName'))]"
],
"properties": {
"RepoUrl": "[parameters('repoURL')]",
"branch": "[parameters('branch')]",
"IsManualIntegration": true
}
}
]
}
]
}
You can check your Function deployment logs here and see if any settings needs to be changed, or any issue that is stopping the deployment from source control via github actions.
Function Trigger got deployed from my github repository successfully like below:-
Added CORS setting like below:-
In-order to deploy ARM template via Portal, Use the method below:-
Select Custom Deployment in Azure Portal > Build your own template in the editor> Add the ARM template above and deploy, Make sure you replace the repo_urrl and branch with yours in parameter:-
Click on Save, Select Resource Group > Review + Create > And the Function app with Trigger will be deployed:-
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论