在互联网业务中,CDN的应用已经成了普遍,SRE的日常需求中,CDN的刷新在前端需求逐渐中占了很大比例,并且比较琐碎。做为合格的SRE,把一切自动化是终极使命,而今天就分享通过Jenkins+Terraform实现阿里云的CDN自动刷新,给大家提供一个自动化思路。
思路
整体的思路是,由运维创建.tf模板文件,放置在业务代码仓库中,由业务研发人员负责维护,运维辅助指导;改造当前Jenkins的Pipeline的流程,依照业务需求选择并行或者串行,然后研发在发布变更时,可通过修改代码中.tf相关的CDN路径参数,从而实现CDN的自动化刷新。
示意图
必备步骤
安装Terraform插件
- 登录Jenkins。
- 进入“管理Jenkins” > “插件管理”。
- 在“可选插件”中搜索“Terraform”,选择它并安装
示例代码
Terraform配置文件
provider "alicloud" {
access_key = var.ALIYUN_ACCESS_KEY
secret_key = var.ALIYUN_SECRET_KEY
}
resource "alicloud_cdn_purge_cache" "purge" {
domain = var.cdn_domain
paths = ["/*"]
}
variable "ALIYUN_ACCESS_KEY" {
type = string
default = ""
}
variable "ALIYUN_SECRET_KEY" {
type = string
default = ""
}
variable "cdn_domain" {
type = string
default = ""
}
Jenkinsfile示例
pipeline {
agent any
environment {
TF_VAR_cdn_domain = 'your-cdn-domain.com'
TF_VAR_access_key = credentials('ALIYUN_ACCESS_KEY')
}
stages {
stage('Terraform Init') {
steps {
script {
def terraform = docker.image('hashicorp/terraform:latest')
terraform.inside {
sh 'terraform init'
}
}
}
}
stage('Terraform Plan and Apply') {
steps {
script {
def terraform = docker.image('hashicorp/terraform:latest')
terraform.inside {
sh 'terraform plan -out=plan'
sh 'terraform apply -auto-approve plan'
}
}
}
}
}
post {
always {
cleanup()
}
}
}
void cleanup() {
// 执行Terraform destroy以清理资源,实际使用时可能需要根据实际情况调整
sh 'terraform destroy -auto-approve'
}