DevOps部署python的AzureFunctions(Httptrigger)+DevOps部署Terraform 构建部署Infra资源(二)

部署准备

推项目,创建Self-Host Agent或者使用微软自带的编译机(这里我们使用微软自带的编译机)

ok,本地代码都搞好之后,我们在Azure DevOps上创建一个组织,然后初始化一个项目,将本地的项目推到AzureRepos里面。然后我们配置一台编译机,这里我们可以看之前的文章Selfhost Agent配置

创建Service Principal

这个是用于来连接到Azure,给这个管道权限来操作Azure资源。
我们进入到我们创建的项目中,然后点击”项目设置“>然后点击“服务连接”>“新建一个服务连接”
在这里插入图片描述
然后我们点击Azure 资源管理,
在这里插入图片描述

然后我们选择自动的Serviceprincipal(automatic),然后点击“Next”,
然后我们可以给到订阅权限。
选好订阅然后保存就可以了。

创建一个存储账户和一个容器用于存放Terraform运行所产生的文件

我们事先需要在AzurePortal上创建一个存储账户然后在里面创建一个容器,这里我们创建了一个存储账户名为“lslsls”,
容器名为“lsls”用于存放Terraform运行产生的文件。
在这里插入图片描述

部署创建代码

我们在Pipelines里面创建一个CI,我们可以先创建一个空的。
然后如下代码:


# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml

trigger:
- master

pool:
  vmImage: ubuntu-latest

variables:
  - group: varls

steps:
- task: TerraformTaskV4@4
  inputs:
    provider: 'azurerm'
    command: 'init'
    workingDirectory: '$(System.DefaultWorkingDirectory)/terraforminfra'
    backendAzureRmResourceGroupName: 'RG-LS-TRANING'
    backendAzureRmStorageAccountName: 'lslsls'
    backendAzureRmContainerName: 'lsls'
    backendAzureRmKey: 'tf/terraform.tfstate'
    backendServiceArm: 'll'
    
- task: TerraformTaskV4@4
  inputs:
    provider: 'azurerm'
    command: 'plan'
    workingDirectory: '$(System.DefaultWorkingDirectory)/terraforminfra'
    environmentServiceNameAzureRM: 'll'
  
- task: TerraformTaskV4@4
  inputs:
    provider: 'azurerm'
    command: 'apply'
    workingDirectory: '$(System.DefaultWorkingDirectory)/terraforminfra'
    environmentServiceNameAzureRM: 'll'
    
    
- task: TerraformTaskV4@4
  inputs:
    provider: 'azurerm'
    command: 'output'
    workingDirectory: '$(System.DefaultWorkingDirectory)/terraforminfra'
    environmentServiceNameAzureRM: 'll'

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true
# - task: AzureFunctionApp@2
#   inputs:
#     connectedServiceNameARM: 'll'
#     appType: 'functionApp'
#     appName: $(funcname)
#     package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
#     deploymentMethod: 'auto'

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)'
    publishLocation: 'pipeline'

- task: AzureFunctionApp@2
  inputs:
    connectedServiceNameARM: 'll'
    appType: 'functionAppLinux'
    appName: 'ls-exale-func'
    package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    runtimeStack: 'PYTHON|3.10'
    deploymentMethod: 'auto'

里面有触发分支,编译池,参数,
然后就是我们的infra环境部署了,infra环境部署总共分为以下几步:
Terraform init : 初始化会下载一些所需要的依赖插件等
Terraform plan: 指定部署计划
Terraform apply: 应用部署,按照我们的代码应用部署
成功的话,下一步就是我们部署项目了。
声明一下(这里我们用的是微软自带的编译机,所以依赖都有比如Python,Azure CLI等,如果是自己配制的代理机,则需要我们去安装所需要的工具)

Terraform 控件

我们可以在右侧搜索Terraform,点击Terraform,
在这里插入图片描述

Provider:云的提供者,这里我们选用Azurerm
Command:按照我们上面的步骤,第一步应该是init
Configuration directory:我们Infra代码所在的工作目录,默认是最外层目录
在这里插入图片描述
项目及infra代码机构如下:
在这里插入图片描述

按照我们的目录结构直接在后面加/terraforminfra就可以了,接下来几步都是一样的。
在这里插入图片描述

发布代码

我们可以将我们的项目代码打包为Zip,文件(Archive files控件)
在这里插入图片描述
在这里插入图片描述

然后找到控件deploy Azure Functions发布就OK了。
在这里插入图片描述
在这里插入图片描述
然后我们可以部署一下,运行一下Pipeline;

在这里插入图片描述

我们到Azure找到我们的函数,转到概述,看到我们所部署的函数:
在这里插入图片描述

进入之后我们点击获取函数URL,访问就OK了。
在这里插入图片描述
在这里插入图片描述

ok,完美收工。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小松很努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值