如何管理Ansible架构,实现轻量脚本的快速部署?
问题:如何优化Ansible架构以实现轻量脚本的快速部署?
我认为设计Ansible架构最合理的方式是将主playbook拆分为多个role,每个应用组件对应一个独立仓库的role。所有role通过主Git仓库中的requirements.yml文件关联,该文件会引用各个role仓库。
比如部署常规apache/tomcat/war时,主requirements.yml内容如下:
- src: git+https://git.with.role.that.checks.hardware.requirements version: "1.0.0" - src: git+https://git.with.role.that.deploys.apache version: "1.0.0" - src: git+https://git.with.role.that.deploys.certificates version: "1.0.0" - src: git+https://git.with.role.that.deploys.jdk version: "1.0.0" - src: git+https://git.with.role.that.deploys.tomcat version: "1.0.0" - src: git+https://git.with.role.that.deploys.db.client version: "1.0.0" - src: git+https://git.with.role.that.deploys.war version: "1.0.0" - src: git+https://git.with.role.that.configure.logrotation version: "1.0.0"
该架构下每个包自洽、版本可控,我对部署内容极具信心。
但当添加轻量脚本(如通过cron每日发送活动报告的Python脚本)时,沿用上述策略会显得过于繁琐。若要对脚本做微小更新(如新增依赖包),需执行一系列步骤:
- 在脚本仓库提交代码、创建PR并打标签
- 在pip仓库提交新依赖的PR并打标签
- 在主仓库提交包含两个新标签的PR
- 在Ansible执行机拉取主仓库,重新执行
ansible-galaxy install导入role并运行脚本部署role
这对于仅修改几行Python代码的轻量更新来说工作量过大。
补充说明:我们在开发机编写Python脚本,通过Ansible部署到Dev环境,但开发机无法完成所有端到端测试,需在Dev环境多次测试,这让繁琐的部署流程更难接受。
我曾考虑过合并部分仓库,但存在明显弊端;合并所有role虽能简化流程,但会增加Ansible的执行时间。目前暂时只能通过编写自动化脚本处理上述操作,但仍希望找到更合理的架构方案。
现请教:如何管理Ansible架构以实现轻量脚本的快速部署?要求既无需手动执行大量操作(如多个PR),又避免Ansible执行不必要的重任务(如仅修改脚本却检查所有包)。
内容的提问来源于stack exchange,提问作者mgueydan
相关产品推荐
相关产品推荐

