如何使用GitLab Pipelines部署Azure资源
GitLab Pipelines 部署 Azure 资源的实现方案
1. 前置准备工作
- 首先创建Azure服务主体,用于GitLab通过该身份访问Azure进行资源部署。运行Azure CLI命令获取认证信息:
az ad sp create-for-rbac --name gitlab-azure-deploy --role Contributor --scopes /subscriptions/替换为你的Azure订阅ID
保存命令返回的appId、password、tenant以及你的Azure订阅ID四个核心参数。 - 进入GitLab项目的「设置」→「CI/CD」→「Variables」页面,将上述四个参数分别创建为变量:
AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_TENANT_ID、AZURE_SUBSCRIPTION_ID,全部设置为掩码变量,避免凭证泄露。 - 将所有ARM模板、PowerShell部署脚本上传到GitLab仓库,可按目录分类存储,比如
/arm-templates存放各资源的模板和参数文件,/scripts存放自定义PowerShell脚本。
2. 编写.gitlab-ci.yml流水线配置
你可以直接复用以下基础配置,根据自己的资源路径调整即可:
# 定义流水线阶段 stages: - validate - deploy # ARM模板语法校验阶段,提前排查语法错误 validate_arm_template: stage: validate image: mcr.microsoft.com/azure-powershell:latest script: # Azure身份认证 - $secpasswd = ConvertTo-SecureString $AZURE_CLIENT_SECRET -AsPlainText -Force - $credential = New-Object System.Management.Automation.PSCredential ($AZURE_CLIENT_ID, $secpasswd) - Connect-AzAccount -ServicePrincipal -Credential $credential -Tenant $AZURE_TENANT_ID # 校验ARM模板合法性 - Test-AzResourceGroupDeployment -ResourceGroupName 目标资源组名 -TemplateFile ./arm-templates/你的模板文件.json -TemplateParameterFile ./arm-templates/你的参数文件.json only: - main # 可根据你的分支规则调整触发条件 # 资源部署阶段 deploy_azure_resources: stage: deploy image: mcr.microsoft.com/azure-powershell:latest script: # Azure身份认证 - $secpasswd = ConvertTo-SecureString $AZURE_CLIENT_SECRET -AsPlainText -Force - $credential = New-Object System.Management.Automation.PSCredential ($AZURE_CLIENT_ID, $secpasswd) - Connect-AzAccount -ServicePrincipal -Credential $credential -Tenant $AZURE_TENANT_ID - Set-AzContext -Subscription $AZURE_SUBSCRIPTION_ID # 如果要部署的资源组还不存在,先创建资源组 - New-AzResourceGroup -Name 目标资源组名 -Location 部署区域(如chinaeast2) -Force # 执行ARM模板部署 - New-AzResourceGroupDeployment -Name deploy-$(date +%Y%m%d%H%M%S) -ResourceGroupName 目标资源组名 -TemplateFile ./arm-templates/你的模板文件.json -TemplateParameterFile ./arm-templates/你的参数文件.json # 执行自定义PowerShell部署脚本 - ./scripts/你的自定义部署脚本.ps1 only: - main when: manual # 建议设置为手动触发,避免误操作部署资源
3. 支持任意Azure资源部署的适配方法
不需要修改流水线核心逻辑,仅需要调整资源配置即可部署任意类型的Azure资源:
- 新增资源时,将对应资源的ARM模板、参数文件放入
/arm-templates目录下 - 可以将模板路径、资源组名、部署区域等参数设置为GitLab CI变量,运行流水线时手动传入变量值,即可灵活指定本次要部署的资源,不需要修改yml文件
- 如果需要批量部署多个资源,编写简单的遍历脚本,批量执行指定目录下的所有ARM模板即可
注意:服务主体的权限尽量按最小权限原则分配,不需要给订阅级别的权限时可缩小到对应资源组的权限降低安全风险。
内容的提问来源于stack exchange,提问作者Yogesh Kulkarni
相关产品推荐
相关产品推荐

