掌握自动化部署,拿下DevOps半壁江山还远吗?
本期的微软 MVP 实验室研究员-贠乾,将通过代码示例为大家分享如何使用 GitHub Actions 以自动化的方式部署 Terraform Code 到 Azure。
贠乾,微软最有价值专家,Microsoft Azure方向,目前从事.NET技术栈产品后端开发工作。热衷学习微软Azure相关技术,分享自己的学习经验。同时,正在提高自己Azure云基础设施解决方案的设计能力和Azure云技术方面的培训能力
思路浅析
使用 Terraform Code 部署 Azure 基础设施资源是特别受欢迎的,我曾经有写文章分享过利用 Azure DevOps 自动部署 Terraform Code 所描述的 Azure 基础设施资源。但是有些人对于Azure DevOps 可能比较陌生,再加上 Azure DevOps 的 Parallel jobs 付费作业。所以作为替代方案,今天给大家分享如何使用 GitHub Actions 部署 Terraform Code。
配置 Azure Service Principal 的凭据到 GitHub 机密库
Terraform Code 以及Azure CLI 会使用 Azure Service Principle 对 Azure 进行身份认证,关于 Azure Service Principle 的创建大家可以参考Blog。
Blog
https://www.cnblogs.com/AllenMaster/p/13065643.html
接下来需要添加以下机密信息
1)AZURE_AD_CLIENT_ID
2)AZURE_AD_CLIENT_SECRET
3)AZURE_AD_TENANT_ID
4)AZURE_SUBSCRIPTION_ID
5)AZURE_CREDENTIALS
其中 AZURE_CREDENTIALS 格式内容如下所示:
{"clientId": "XXXX","clientSecret": "XXXX","subscriptionId": "XXXX","tenantId": "XXXX"}
将上述信息存储到对应名称的 GitHub Secrets。
配置 workflows run 的 yaml
在 Terraform 项目根目录创建 terraform.yaml 并保存在以下目录
terraform.yaml 内容如下
name: " using GitHub Action for Terraform Auto CI/CD"
on:pull_request:branches:- remote_statspush:branches:- remote_stats
env:tf_version: "latest"tf_working_dir: "./src/model/"terraform_rg: "Web_Test_TF_RG"storage_account: "cnbatestorestatefile004"storage_account_container: "terraform-state"key: "cnbate.terraform.stats"
jobs:terraform_auto_deploy:name: "Azure CLI Action (secrect created)"env:ARM_CLIENT_ID: ${{ secrets.AZURE_AD_CLIENT_ID }}ARM_CLIENT_SECRET: ${{ secrets.AZURE_AD_CLIENT_SECRET }}ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}ARM_TENANT_ID: ${{ secrets.AZURE_AD_TENANT_ID }}runs-on: ubuntu-latestenvironment: production# Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latestdefaults:run:shell: bashsteps:- name: "Checkout"uses: actions/checkout@master- name: Azure Loginuses: azure/login@v1with:creds: ${{ secrets.AZURE_CREDENTIALS }}enable-AzPSSession: falseenvironment: azurecloudallow-no-subscriptions: false- name: Azure CLI scriptuses: azure/CLI@v1with:creds: ${{ secrets.AZURE_CREDENTIALS }}enable-AzPSSession: falseenvironment: azurecloudallow-no-subscriptions: falseazcliversion: 2.30.0inlineScript: |# create azure resource groupaz group create --location eastasia --name ${{ env.terraform_rg }}# create azure storage accountaz storage account create --name ${{ env.storage_account }} --resource-group ${{ env.terraform_rg }} --location eastasia --sku Standard_LRS# create storage account container for tf stateaz storage container create --name ${{ env.storage_account_container }} --account-name ${{ env.storage_account }}# query storage key and set variableexport ARM_ACCESS_KEY=$(az storage account keys list --resource-group ${{env.terraform_rg}} --account-name ${{ env.storage_account }} --query "[?keyName == 'key1'][value]" --output tsv)echo $ARM_ACCESS_KEY- name: "Terraform init azurerm backend"uses: ahmedig/terraform-azurerm-backend@v1with:azure_credentials: ${{ secrets.AZURE_CREDENTIALS }}resource_group_name: ${{ env.terraform_rg }}container_name: ${{ env.storage_account_container }}storage_account_name: ${{ env.storage_account }}file_name: ${{ env.key }}subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}tf_working_directory: ${{ env.tf_working_dir }}- name: "Terraform Validate"uses: hashicorp/terraform-github-actions@masterwith:tf_actions_version: ${{ env.tf_version }}tf_actions_subcommand: 'validate'tf_actions_working_dir: ${{ env.tf_working_dir }}env:GITHUB_TOKEN: ${{ secrets.AZURE_CREDENTIALS }}- name: "Terraform Plan"uses: hashicorp/terraform-github-actions@masterwith:tf_actions_version: ${{ env.tf_version }}tf_actions_subcommand: 'plan'tf_actions_working_dir: ${{ env.tf_working_dir }}env:GITHUB_TOKEN: ${{ secrets.AZURE_CREDENTIALS }}- name: "Terraform Deploy"uses: hashicorp/terraform-github-actions@masterwith:tf_actions_version: ${{ env.tf_version }}tf_actions_subcommand: 'apply'tf_actions_working_dir: ${{ env.tf_working_dir }}env:GITHUB_TOKEN: ${{ secrets.AZURE_CREDENTIALS }}- name: "Terraform Destroy"uses: hashicorp/terraform-github-actions@masterwith:tf_actions_version: ${{ env.tf_version }}tf_actions_subcommand: 'destroy'tf_actions_working_dir: ${{ env.tf_working_dir }}env:GITHUB_TOKEN: ${{ secrets.AZURE_CREDENTIALS }}
运行 workflows run
由于我们在 "terraform.yaml" 中指定指定工作分支 “remote_stats”,当 “remote” 分支发生 “push” 或者 “pull_request” 操作就会触发 GitHub Actions 的 workflows 的运行。所以我们直接推送当前已编辑好的 "terraform.yaml" 文件到 “remote_stats” 分支,并在 GitHub 上查看 workflows 运行结果。
如果需要进一步了解每个步骤都执行了那些操作,可以选择当前 workflow runs
查看每个步骤并其输出内容
查看 Terraform 执行部署计划内容
如需参考详细输出信息,复制以下链接到浏览器查看https://github.com/yunqian44/Terraform_Cnbate_Traffic_Manager/runs/4740814994?check_suite_focus=true
总结
本期实验,我们学习如何使用 GitHub Actions 自动化的方式实现 Terraform Code 的语法校验、生成部署计划,执行部署计划,销毁部署计划。也为我们在选择自动化部署 Azure 基础设施即代码的解决方案上又增加了新的方案。
GitHub Action 工作流程中设置 Secrets:
https://github.com/Azure/actions-workflow-samples/blob/master/assets/create-secrets-for-GitHub-workflows.md
Azure服务主体:
https://www.cnblogs.com/AllenMaster/p/13065643.html
GitHub:
https://github.com/yunqian44/Terraform_Cnbate_Traffic_Manager
掌握自动化部署,拿下DevOps半壁江山还远吗?相关推荐
- git自动部署代码到服务器windows,Jenkins-在windows上配置自动化部署(Jenkins+Gitlab+IIS)...
Jenkins-在windows上配置自动化部署(Jenkins+Gitlab+IIS) web部署样例 windows服务部署样例 系统备份 在服务器上创建后缀名为.ps1的文件,例:BackUpD ...
- 持续集成在Hexo自动化部署上的实践
曾经听到过这样一句话,"不要用战术上的勤奋掩盖战略上的懒惰",所以战术和战略更像是抽象类和具体类,而面向对象设计实际上是现实等级制度的一种映射.因此我们注意到,决策者通常关注的 ...
- DevOps平台中的自动化部署框架设计
本文目录: 一.背景 二.我们的需求是什么? 三.概念澄清 四.概念模型 五.总体设计 六.关键点设计 七.总结 一.背景 说到自动化部署,大家肯定都会想到一些配置管理工具,像ansible,chef ...
- 把运维和开发放一起就是DevOps?还差得远!
来自:DBAplus社群 作者介绍 刘华(Kenneth),就职于世界500强银行.负责基金外包业务软件开发与交付.敏捷.精益.DevOps领域专家.著有<猎豹行动--硝烟中的敏捷转型之旅> ...
- kubernetes+Azure DevOps实现.Net Core项目的自动化部署均衡负载
1. 前言 前前后后学习kubernetes也有一个来月了,关于kubernetes的博客也写了有十多篇.但是技术如果无法落地到实际的应用场景终归是纸上谈兵,所以就有了这一出:通过结合kubernet ...
- AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署
AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署 Amazon ElastiCache 连接至 Redis 节点 通过 AWS Command Line Inter ...
- gogs可以自动化部署吗_效率提升利器:你还害怕自动化部署吗?
嗨,我是你稳定输出.干货多多的勾勾(。・∀・)ノ゙.今天要聊一聊"自动化部署". 比尔盖茨曾提到过自动化的重要性:"技术在业务中使用的第一原则是,将自动化应用在正确的操作 ...
- 还在手动部署 Kubernetes 集群吗,是时候使用 Kubespray 完成自动化部署了!
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 前言 部署 Kubernetes 除了手动方式外,还有诸如 Kubeadm.Kubespray.Breeze.Ra ...
- 都2023年了,还不用Jenkins自动化部署?
背景 前段时间与室友在交流中聊到了互联网每个岗位的职责,然后就聊到了测试岗位! 一个同学不禁发问:"如果我们开发接到了特别庞大的项目,开发周期特别久,难道测试团队就一直干等着我们开发结束再进 ...
最新文章
- 360 自动打开word_EXCEL的数据和图表如何与ppt,Word关联,看完你就会了
- 【MPI高性能计算】蒙特卡洛方法计算pi值
- mysql 怎么登陆远程服务器_教你手机怎么远程连接云服务器
- android studio工程特点,Android Studio的重要特性
- java界面中显示图片_java中怎样在界面中显示图片?
- java-前端之js
- 数学图形(1.47)贝塞尔(Bézier)曲线
- C++_类和对象_C++运算符重载_递增运算符重载_重载++运算符_前置++_后置++重载---C++语言工作笔记057
- 互联网电商都是怎么用工厂模式的?
- Loadrunner教程
- EXCEL2007导入SQL生成新表并插入数据
- 南宁琅东的机器人餐厅_南宁埌东藏着一个秘密花园,每天一大波年轻男女进进出出…...
- 学习总结(抓沙理论、盲人摸象、高屋建瓴、囫囵吞枣)
- 《论语》全译——季氏篇第十六
- 动态多光源 Light-Pre-Pass Lighting 实现
- STM32 ADC多通道规则采样和注入采样
- 视频话题识别与跟踪 - demo 【问题总结1.1-视频处理】
- 使用javascript和jquery获取类方法
- 压缩文件的后缀html,rar是什么格式
- 课时19 函数:我的地盘听我的