当前位置: 首页 > news >正文

[es自动化更新] Updatecli编排配置.yaml | dockerfilePath值文件.yml

链接:https://github.com/elastic/elasticsearch/tree/main/build-conventions

elasticsearch自动化更新

本专栏使用updatecli实现自动化版本更新与依赖管理

其配置通过编排文件updatecli-compose.yaml)实现,该文件罗列了称为Policies的自动化任务,每个任务通过配置文件(Values Files)获取项目特定细节,实际执行逻辑则来自容器镜像(Policy Sources),确保自动化过程可复现。

概览

在这里插入图片描述

章节导航

  1. Updatecli编排配置
  2. 值文件
  3. 策略
  4. 策略源(容器镜像)

第一章:Updatecli编排配置

欢迎来到使用Updatecli实现Elasticsearch项目版本更新自动化的首章教程~

维护Elasticsearch这类大型软件项目的依赖更新(包括基础容器镜像、库文件乃至内部工具)是项艰巨任务。

设想我们作为项目管理者,每天需要跟踪数十项待检查更新的内容!此时我们需要一个主清单来确保所有事项被覆盖且无遗漏。

这正是updatecli-compose.yaml文件的价值所在。

它如同Updatecli在项目中的主检查清单,虽不包含具体更新细节,但通过罗列所有待执行任务(即检查项),告知Updatecli需要更新哪些内容

何为updatecli-compose.yaml

该文件本质上是协调多个Updatecli任务的编排配置文件,是执行系列自动化更新的起点。它向updatecli compose命令传达:“这是本项目需运行的所有更新任务清单,每个任务的具体指令如下。”

参考简化版文件结构:

# `updatecli compose ...`的配置文件
policies:# 清单首项- name: 处理ironbank更新policy: ghcr.io/elastic/oblt-updatecli-policies/ironbank/templates:0.3.0@sha256:... # (策略细节简化)values:- .github/updatecli/values.d/scm.yml- .github/updatecli/values.d/ironbank.yml# 清单次项- name: 更新Updatecli策略policy: ghcr.io/updatecli/policies/autodiscovery/updatecli:0.8.0@sha256:... # (策略细节简化)values:- .github/updatecli/values.d/scm.yml- .github/updatecli/values.d/updatecli-compose.yml

该YAML文件核心是policies:列表(通过-标识),每项代表一个Updatecli需执行的更新任务。

每任务项包含:

  • name:人类可读的任务名称(如"处理ironbank更新"),便于理解任务目标
  • policy:指向具体执行指令或模板,即该任务的"操作手册"(详见策略章)
  • values:提供策略运行所需细节的文件列表,如同填写操作手册中的空白项(详见下一章值文件)

这种任务项的划分有点类似于Manus

运行机制

执行updatecli compose时,系统将:

  1. 读取updatecli-compose.yaml
  2. 遍历policies列表
  3. 获取每个策略的指令(通过policy引用)
  4. 加载values文件中的具体配置
  5. 执行策略

流程示意图:

在这里插入图片描述
IronBank是一个DeFi借贷协议,采用信用授权机制,允许用户无需抵押直接借款,主要服务于机构和高信用用户。

简言之,updatecli-compose.yaml作为中央调度器,统一管理项目所需的所有版本更新任务,确保通过单入口即可触发全量自动化更新。

总结

updatecli-compose.yaml是协调运行多个Updatecli任务的主入口,其作为检查清单具备两大功能:

  1. 罗列项目所需的全部更新任务(策略)
  2. 指引每个任务获取具体配置(值文件)

理解该文件的中心地位后,让我们深入探究策略配置的核心——值文件。

下一章:值文件


第二章:值文件

在上一章《Updatecli编排配置》中,我们了解到updatecli-compose.yaml文件是项目中Updatecli的主检查清单。它列出了所有需要运行的更新任务(策略),并指引Updatecli获取每个任务所需的具体配置。

这些"具体配置"就存储在值文件

值文件解决何种问题?

设想我们有一个操作手册(策略),描述如何更新容器镜像版本

这个手册是通用性的——它阐述着标准步骤:“查找最新版本”、“定位项目文件中镜像引用位置”、“用新版本替换旧版本”。

当项目中使用数十个不同镜像且分散在不同文件时,若为每个镜像编写独立手册将极其低效!

这正是值文件的用武之地。它们为通用操作手册提供特定场景下的专属配置,回答以下核心问题:

  • 跟踪哪个具体镜像?
  • 在哪个文件路径检索?
  • 需匹配的具体行或模式?

通过将这类项目专属信息存入独立文件,我们的操作手册(策略)得以保持通用性复用性

(可复用性的方案)

何为值文件?

值文件通常是采用key: value格式的YAML配置文件,类似为特定策略任务填写的定制表单。以下通过上章的示例片段展开说明:

# `updatecli compose ...`的配置文件
policies:- name: 处理ironbank更新policy: ghcr.io/elastic/oblt-updatecli-policies/ironbank/templates:0.3.0@sha256:...values:- .github/updatecli/values.d/scm.yml- .github/updatecli/values.d/ironbank.yml # <-- 此处即为值文件!

假设.github/updatecli/values.d/ironbank.yml内容如下(简化版):

# .github/updatecli/values.d/ironbank.yml - 简化示例
imageName: elasticsearch/elasticsearch # 需更新的镜像名称?
imageTag: 8.12.2 # 当前跟踪版本(或匹配模式)
dockerfilePath: x-pack/docker/elasticsearch/Dockerfile # 镜像引用所在文件路径

该值文件提供三项关键配置:

  • imageName:目标容器镜像名称
  • imageTag:当前版本标识(或版本模式)
  • dockerfilePath:镜像引用文件路径

策略如何消费值数据?

当Updatecli执行策略时,会加载值文件数据并将其实例化到策略中。通用策略通过占位符(如{{ .imageName }})动态获取专属配置,实现具体操作:

  1. 检索elasticsearch/elasticsearch的最新版本
  2. 扫描x-pack/docker/elasticsearch/Dockerfile文件
  3. 查找引用elasticsearch/elasticsearch的行(可能包含旧版本8.12.2
  4. 用新版本替换旧标识

底层运行机制

在这里插入图片描述

流程分解:

  1. updatecli compose读取主清单文件
  2. 定位策略项(如处理ironbank更新
  3. 解析策略模板引用地址
  4. 加载关联值文件scm.ymlironbank.yml
  5. 合并值数据并注入策略模板
  6. 策略实例化后执行具体更新操作

该过程对清单中每个策略循环执行,不同策略可复用同一模板配合不同值文件

(多态)

采用独立值文件的优势

优势描述示例
可复用性单一策略可服务多个更新任务用相同"镜像更新"策略配合valuesA.yml更新imageAvaluesB.yml更新imageB
关注点分离策略逻辑(如何更新)与项目数据(更新对象及位置)解耦"镜像更新"策略无需感知具体操作的是elasticsearch/elasticsearch镜像
可读性值文件直观展示任务目标查看ironbank.yml即可明确该任务针对特定Ironbank镜像
易维护性修改配置无需调整策略代码更新新镜像只需新建值文件或修改现有文件,策略模板保持不变

通过值文件机制,我们能在Elasticsearch等大型项目中高效管理海量依赖更新,构建灵活、清晰且易维护的自动化体系。

总结

值文件作为策略执行的燃料,具备两大特性:

  1. 配置驱动:通过键值对定制策略行为(如dockerfilePath指定操作文件)
  2. 环境隔离项目专属数据与通用策略逻辑物理分离

此设计使得版本更新流程既保持标准化,又能灵活适配项目演进需求。

下一章我们将深入探讨策略模板的设计哲学与实现细节,解密值数据如何驱动自动化操作。

下一章:策略

http://www.xdnf.cn/news/1107739.html

相关文章:

  • AI之DL之VisualizationTool:ai-by-hand-excel的简介、安装和使用方法、案例应用之详细攻略
  • Redis过期策略与内存淘汰机制面试笔记
  • [es自动化更新] 策略体系 | 策略源(容器镜像)
  • Java中的方法传参机制
  • 【B题成品论文】2025APMCM亚太杯中文赛B题成品论文(无偿分享)
  • Java 大视界:基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用(2025 实战全景)
  • 舒尔特方格训练小游戏流量主微信小程序开源
  • 数据分析库 Pandas
  • SQL新手入门详细教程和应用实例
  • 【MediaSoup】MS_DUMP打印转换为PLOGI的形式
  • 13. https 是绝对安全的吗
  • 二叉树算法进阶
  • Redis渗透思路总结
  • 第七章应用题
  • JVM--虚拟线程
  • Spring Boot 中使用 Lombok 进行依赖注入的示例
  • RMSNorm实现
  • linux----------------------线程同步与互斥(上)
  • linux_线程概念
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的营销直播质量提升策略研究
  • Vue框架之钩子函数详解
  • 2025年亚太杯(中文赛项)数学建模B题【疾病的预测与大数据分析】原创论文分享
  • [爬虫实战] 多进程/多线程/协程-异步爬取豆瓣Top250
  • QML与C++相互调用函数并获得返回值
  • PID控制算法理论学习基础——单级PID控制
  • 多 Agent 强化学习实践指南(一):CTDE PPO 在合作捕食者-猎物游戏中的应用详解
  • GitHub 操作指南:项目协作与自动化工作流实践
  • 【小沐杂货铺】基于Three.JS绘制汽车展示Car(WebGL、vue、react、autoshow、提供全部源代码)
  • 【Elasticsearch】function_score与rescore
  • html-初级标签