Ansible
从第一个清单文件到多主机部署,学习 Ansible。涵盖 Playbook、角色、模板、Vault 以及幂等自动化。
共 12 节,按顺序
- 120 分钟
什么是 Ansible
欢迎。如果你这辈子还没自动化配置过一台服务器,那你来对地方了。在动手运行任何东西之前,我们先把 Ansible 究竟是什么、人们为什么宁愿用它也不愿堆一大摞 shell 脚本、以及那几个会反复出现的词(控制节点、被管理节点、幂等)弄清楚。不用着急,这一课也用不上工作区。
Configuration managementAgentless automationIdempotencyControl nodeManaged nodesPlaybooks vs scripts - 225 分钟
Inventory 与 Ad Hoc 命令
你已经知道 Ansible 通过 SSH 连接机器,而且它描述的是期望达到的状态,不是一步步的操作过程。但在 Ansible 能跟任何机器说上话之前,它需要一本通讯录:一份你希望它管理的机器名单,外加某种分组办法,好让你能直接说“所有 web...
Inventory fileHost groupsAd hoc commandsAnsible pingAnsible -mAnsible -a - 330 分钟
你的第一个 Playbook
临时命令适合做一次快速检查,或者打一个一次性的补丁,但它撑不起真正的环境搭建。你得记住每条 ansible 命令的确切写法,每次都照着正确的顺序重新敲一遍,而团队里其他人根本不知道你运行过什么、为什么要运行。真正的自动化应该住在一个文件里:这个文件能读、能共享、能放心地一遍遍重新运行。它就是剧本...
Playbook structurePlaysHostsTasksBecomeAnsible-playbook command - 430 分钟
Task、Module 和 Handler
设想有一份剧本在管理一台 Web 服务器。里面有三个任务,各自改动一个不同的配置文件,而只要其中任意一个改动了,服务就得重启一次才能读到新配置。最直白的做法是把重启单独写成一个任务、每次都跑,可这很浪费:万一那三个配置任务其实什么都没改,你就白白重启了一个好端端的服务。另一种直白做法是给重启加上...
TasksModulesHandlersNotifyChanged_whenService restart pattern - 530 分钟
变量与 Facts
写一份剧本,把端口号、站点名字、软件包版本都直接敲进任务里,它能跑通,但只在你测试过的那一台机器上跑得通。把同一份剧本指向另一台 IP 网段不同或者内存大小不同的服务器,你要么每次运行之前都手动改一遍文件,要么就得接受它会悄无声息地做错事。这两种感觉都不该是自动化该有的样子。你真正想要的,是一份保持...
Variables in playbooksVars filesGroup_varsHost_varsFactsVariable precedence basics - 630 分钟
使用 Jinja2 的模板
把一个固定不变的文件复制到每台机器上,这套做法一直挺好用,直到某台机器需要换一个端口号、换一个主机名,或者需要一段只对部分服务器生效的配置。到那一步,你只剩两个都不怎么样的选择:给每台机器各留一份略有差别的文件,然后指望自己每次都记得把它们一起改;或者等 Ansible...
Template moduleJinja2 expressionsFiltersIf blocks in templatesFor loops in templates - 730 分钟
循环与条件语句
安装一个包的剧本 (playbook) 只需要一个任务。但安装十个包的剧本不该写成十个几乎一模一样、只有包名不同的任务;同样,只需要作用在部分机器上的剧本,也不该不加区分地把每个任务都对所有机器跑一遍。把同一个任务复制粘贴十遍,意味着改一处拼写错误也要改十遍;而让任务到处都跑,则意味着还得另写一堆逻...
Loop keywordLoop with dictsWhen conditionalsRegisterBlock and rescue basics - 835 分钟
Roles 与 Galaxy
迟早会遇到这种情况: 两个项目都需要一台 Web 服务器, 于是你有了两个剧本 (playbook), 两边都在安装 nginx, 都在下发同一份配置模板, 之后都要重启服务。把其中一个剧本里的任务复制到另一个里面, 同一份逻辑就有了两份, 从此得同时维护;...
Role structureTasks/main.ymlDefaultsTemplates folderInclude_roleAnsible-galaxy install - 925 分钟
Vault 与密钥
到目前为止你写下的所有东西,给谁看都无所谓。主机清单、模板、角色的默认变量,就算被陌生人读到也伤不到你。直到你写到创建数据库用户的那个任务,它需要一个密码。你把密码敲进...
Ansible-vault encryptAnsible-vault editVault password fileEncrypted variablesVault id labels - 1025 分钟
标签与调试
你的剧本 (playbook) 一开始只有六个任务,改一次跑一次很轻松。现在它变成了四个角色、五十个任务,跑一趟要三分钟,而你只是在改 nginx 配置里的一行。为了验证这一行就把整个剧本跑一遍,好比为了重刷一扇门的漆而把整栋房子拆掉重盖。更糟的是,真出问题时它挂在第 34...
Tags on tasks and roles--tags and --skip-tags--start-at-taskVerbose flagsDebug moduleAnsible-playbook --check --diff - 1125 分钟
Collections 与 Plugins
这门课里的每一个模块名字都带着一段前缀,你可能一直悄悄忽略它:ansible.builtin.copy、ansible.builtin.template、ansible.builtin.service。看起来像是多此一举的排场,其实不是。那段前缀是一个地址,一旦你能读懂它,三件事会同时不再神秘:为什...
CollectionsFQCNAnsible-galaxy collection installRequirements.yml for collectionsFilter plugins overviewLookup plugins overview - 1260 分钟
综合实战:多主机部署
到目前为止,每一课都是孤立地讲一样东西:这里一份主机清单,那里一个角色,一个模板,一个加密文件,几个标签。学的时候只能这么学,可你在真实工作里碰到它们时不是这个样子。真实的基础设施代码是这些东西同时出现在一个仓库里,而这个结业项目要练的本事是把它们接起来,不是那些零件本身。
Multi-play playbooksRoles in productionGroup_vars by environmentVault for secretsSerial and rolling updatesPutting it all together
用你的语言学习 Ansible
每一节课、测验和导师回复都以你的语言显示。AI 导师会用你提问的语言来回答。
Roles that use Ansible
See how hiring teams interview engineers on Ansible, in production-like environments.
Infrastructure Engineer
Hire infrastructure engineers who design systems your team can rely on. Interview them in real workspaces with Terraform, Ansible, cloud APIs and live failure scenarios.
See the interviewDevOps Engineer
Hire DevOps engineers who actually ship. Run live or take-home interviews in production-like Linux environments with Docker, Kubernetes, Terraform and CI/CD. See how they debug, automate, and work alongside AI.
See the interviewPlatform Engineer
Hire platform engineers who reduce friction for every team. Real golden-path templates, real internal CLIs, real service onboarding flows. We record every step.
See the interview