我想使用PowerShell脚本设置从GitLab存储库到Azure应用的连续部署。我知道您可以按照以下步骤手动执行此操作:
https://christianliebel.com/2016/05/auto-deploying-to-azure-app-services-from-gitlab/
但是,我正在尝试使用Powershell使其自动化。我查看了GitHub的示例脚本:
但是由于没有GitLab的提供程序,并且现有的提供程序都没有接受GitLab URL,所以我不确定如何继续。我已经看过在Azure门户中使用GitLab设置手动部署(使用“外部存储库”选项),并导出资源组模板以获取存储库如何连接到App的详细信息,但出现错误:>
Could not get resources of the type 'Microsoft.Web/sites/sourcecontrols'.
Resources of this type will not be exported. (Code: ExportTemplateProviderError, Target: Microsoft.Web/sites/sourcecontrols)
目前,我正在通过镜像GitHub中的GitLab存储库并使用从那里到Azure的连续部署管道来解决此问题。请注意,这是针对在GitLab.com中托管的存储库,而不是在自托管的GitLab服务器中。该项目没有Windows Runner安装程序。
如何使用PowerShell脚本直接从GitLab到Azure设置持续部署?一旦运行了安装脚本,随后对GitLab存储库的每个后续提交/合并都应自动部署到Azure。最好,此PowerShell脚本应使用AzureRM模块,但我愿意接受使用PowerShell Core和新的Az模块(基于Azure CLI)的解决方案。我正在使用的特定测试存储库是公共的(https://gitlab.com/MagicAndi/geekscode.net),但这不是解决方案与私有存储库一起使用的特定要求(但如果可以,甚至更好!)。
更新17/12/2018
我将赏金授予the-fish,因为他的回答最能满足我的特定需求。但是,鉴于已弃用Windows Powershell和Azure RM模块,而转而使用PowerShell Core和新的Az模块(使用Azure CLI),我创建了一个new question,专门使用Azure来寻求规范答案CLI和Powershell核心。我计划在两天内向我开放此问题的悬赏计划。谢谢。
答案 0 :(得分:4)
听起来您正在寻找从GitLab到Azure Apps的直接部署,但是我建议使用部署管道工具为您提供更多选择。
Azure DevOps Services管道可能是一个安全的选择,并且有免费层,这里是very brief getting started guide for Web Apps deploys。
但是它并未内置对GitLab的支持,但似乎有一个marketplace tool for integrations with GitLab。
此功能似乎没有释放触发器的功能,但可以手动触发。有人对release triggers in the marketplace Q&A有疑问,所以也许会在路线图中。
答案 1 :(得分:4)
为了重现您的情况,我使用了Azure CLI:
https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest
愿意在Powershell中的脚本中随意使用它。
首先,我尝试使用Bitbucket存储库获取有关当前部署的所有信息,该存储库配置为Microsoft.Web / sites / sourcecontrols / Bitbucket:
az webapp deployment source show --name XXXXXXX --resource-group YYYYY
得到答案:
{
"branch": "master",
"deploymentRollbackEnabled": false,
"id": "/subscriptions/00000/resourceGroups/YYYYY/providers/Microsoft.Web/sites/XXXXXXX/sourcecontrols/web",
"isManualIntegration": false,
"isMercurial": false,
"kind": null,
"location": "North Europe",
"name": "XXXXXXX",
"repoUrl": "https://bitbucket.org/myAccount/myRepo",
"resourceGroup": "YYYYY",
"type": "Microsoft.Web/sites/sourcecontrols"
}
我断开了连接,并对其进行了手动配置,完全像您的链接中那样指定了 External Repository ,定义了SAME Git存储库并进行分支,最后得到的结果几乎相同:>
{
"branch": "master",
"deploymentRollbackEnabled": false,
"id": "/subscriptions/00000/resourceGroups/YYYYY/providers/Microsoft.Web/sites/XXXXXXX/sourcecontrols/web",
"isManualIntegration": true,
"isMercurial": false,
"kind": null,
"location": "North Europe",
"name": "XXXXXXX",
"repoUrl": "https://bitbucket.org/myAccount/myRepo",
"resourceGroup": "YYYYY",
"tags": {
"hidden-related:/subscriptions/00000/resourcegroups/YYYYY/providers/Microsoft.Web/serverfarms/XXXXXXX-sp": "empty"
},
"type": "Microsoft.Web/sites/sourcecontrols"
}
您可以看到不同之处:
总而言之,您可以使用官方Azure Azure Cli(即部署定义)通过以下方式轻松编写脚本:
az webapp deployment source config --manual-integration --repository-type git --repo-url https://bitbucket.org/myAccount/myRepo --branch master --name XXXXXXX --resource-group YYYYY
编辑15/11/2018:
完成此部署设置后,每次将新的提交推送到相关分支(例如,先前示例中的master)都会自动触发新的部署。
要注意,有时触发部署需要花费几分钟。
最终,如果您希望自动执行某些操作(Powershell命令,GNU / Bash脚本,.py,.bat或任何其他内容),则可以创建一个 .deployment 文件在您存储库的根目录中。
例如:
[config]
SCM_COMMAND_IDLE_TIMEOUT = 9000
command = bash.exe build_my_project_on_azure.sh
您可以在official documentation中获取更多信息。
答案 2 :(得分:2)
假设存储库是公共的,则可以使用以下内容:
$gitrepo="<replace-with-URL-of-your-own-repo>"
$webappname="mywebapp$(Get-Random)"
$location="West Europe"
# Create a resource group.
New-AzureRmResourceGroup -Name myResourceGroup -Location $location
# Create an App Service plan in Free tier.
New-AzureRmAppServicePlan -Name $webappname -Location $location `
-ResourceGroupName myResourceGroup -Tier Free
# Create a web app.
New-AzureRmWebApp -Name $webappname -Location $location -AppServicePlan $webappname `
-ResourceGroupName myResourceGroup
# Configure deployment from your repo and deploy once.
$PropertiesObject = @{
repoUrl = "$gitrepo";
branch = "master";
isManualIntegration = $true
}
Set-AzureRmResource -PropertyObject $PropertiesObject -ResourceGroupName myResourceGroup `
-ResourceType Microsoft.Web/sites/sourcecontrols -ResourceName $webappname/web `
-ApiVersion 2018-02-01 -Force
让我知道它是否私有,这可能会更困难。如果您查看CLI源代码,则可以看到它们当前仅支持GitHub上的访问令牌。