如何设计 Ansible 的入门工作坊

本月在公司内部做了一次 Ansible 的入门工作坊。本文即对这次工作坊的设计过程进行一次总结。其他技术类的工作坊也可以参考。

设计过程大概过程如下文所述。

首先,我们需要确定参加本次工作坊的受众。他们是否具有最基本的前提。本次工作坊的受众有开发、测试、运维,还有毕业生。但是他们都会使用 shell。这已经满足最基本的前提。同时,了解受众后了,也就可以因材施教。

第二,分析工作坊的内容。Ansible 是一款上手非常容易的自动化运维工具。它的特点就是实操性非常强,不需要理解 Ansible 背后的概念就可以使用的工具。

笔者根据受众和教学内容的特点,得出本次工作坊的目标(教学目标):

  1. 知道 Ansible 是什么,并知道它的作用。

  2. 了解如何查文档。

  3. 能部署一个 Spring Boot 应用。

是不是很简单?其实不然。整个工作坊没有一个人能完成所有的任务。同时发现有运维和开发基础的同学会做得更快。

那接下来怎么实现这个目标呢?笔者使用的是任务驱动的方法。也就是受众通过做一个个任务,在任务中完成学习。同时,教师可以任务过程穿插讲相关的知识点。

以下为任务列表:

  1. 执行 ansible-playbook-i hosts playbook.yml 成功

  2. 创建用户 apps 及用户组 apps:

  • user 模块: https://docs.ansible.com/ansible/latest/modules/usermodule.html

  • group 模块: https://docs.ansible.com/ansible/latest/modules/groupmodule.html

  • 创建以下文件夹,并设置文件夹的用户和组为 apps:/apps,/apps/hello,/apps/hello/bin,/apps/hello/logs

    • file 模块: https://docs.ansible.com/ansible/latest/modules/file_module.html

  • 将 helloworld-0.0.2.jar copy 到 /apps/hello/bin 目录下,设置该 jar 文件的用户和用户组为 apps

    • copy模块: https://docs.ansible.com/ansible/latest/modules/copy_module.html

  • 使用 template 模块将 app.service copy 到目标服务器的 /etc/systemd/system 中,并重命名 hello.service :

    • template 模块: https://docs.ansible.com/ansible/latest/modules/template_module.html

  • 启动 hello 服务

    • service 模块: https://docs.ansible.com/ansible/latest/modules/service_module.html

  • 监听 hello 服务是否启动成功

    • wait_for 模块: https://docs.ansible.com/ansible/latest/modules/waitfor_module.html

  • 为目标机器安装 JDK 1.8:

    1. 在本地仓库中创建 roles 目录

    2. clone 代码:https://github.com/geerlingguy/ansible-role-java 到 roles 目录中

    3. 在 playbook.yml 文件中加入 ansible-role-java 的role

  • 创建自定义 role: hello role

    1. 进入 roles 目录:cd roles

    2. 使用命令生成 role 模板: ansible-galaxy init hello

    3. 将 hello 的部署逻辑(在 playbook.yml 中)写入到 hello role 中

  • 将 hello 部署到多台机器

    • 需要修改 hosts 文件

  • 多环境部署

  • 任务的设计并不是随意的,而是有意的。比如:

    • 任务1:受众拿到练习代码后,执行命令,一定会报错。这时,教师可以讲解 Ansible 部署时需要确定“部署位置”和“部署逻辑”。顺便扩展一下:其它的自动化部署工具,也需要确定这两部分。

    • 任务2:受众在创建用户时,一定会失败。因为用户组还没有创建。

    • 任务3:重复创建多个文件夹,由于新手不懂 with_items可以遍历创建文件夹,所以,新手写出来的代码会很多重复的。有悟性的同学,会想办法减少这种重复。

    • 任务5:由于 app.service 模板中使用了未定义的变量,所以,此任务用户也没有办法一次运行成功,而是需要学习在 playbook.yml 中定义变量,才能运行成功。

    可以看到这些任务中充满了“陷阱”。本文就不一一列出所有的陷阱。这些陷阱能达到以下效果:

    1. 在多次出现错误时,受众会学会自己看日志,查文档,找原因。

    2. 受众可以在这个不断遇到问题,解决问题的过程中, 体会到真实的开发是怎样的。

    3. 激发受众的自主思考(最重要)。

    采用任务驱动的方式,还能规避受众能力参差不齐的问题,因为能力好的同学可以帮助能力差的同学。

    后记

    很久没有做老师了,稍微找回了当年做老师的感觉。

    本次工作坊的练习代码:https://github.com/zacker330/ansible-workshop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值