本月在公司內(nèi)部做了一次 Ansible 的入門工作坊悼嫉。本文即對這次工作坊的設計過程進行一次總結(jié)。其他技術(shù)類的工作坊也可以參考拼窥。
設計過程大概過程如下文所述戏蔑。
首先,我們需要確定參加本次工作坊的受眾鲁纠。他們是否具有最基本的前提总棵。本次工作坊的受眾有開發(fā)、測試改含、運維情龄,還有畢業(yè)生。但是他們都會使用 shell捍壤。這已經(jīng)滿足最基本的前提骤视。同時,了解受眾后了鹃觉,也就可以因材施教专酗。
第二,分析工作坊的內(nèi)容盗扇。Ansible 是一款上手非常容易的自動化運維工具笼裳。它的特點就是實操性非常強唯卖,不需要理解 Ansible 背后的概念就可以使用的工具。
筆者根據(jù)受眾和教學內(nèi)容的特點躬柬,得出本次工作坊的目標(教學目標):
- 知道 Ansible 是什么拜轨,并知道它的作用。
- 了解如何查文檔允青。
- 能部署一個 Spring Boot 應用橄碾。
是不是很簡單?其實不然颠锉。整個工作坊沒有一個人能完成所有的任務法牲。同時發(fā)現(xiàn)有運維和開發(fā)基礎的同學會做得更快。
那接下來怎么實現(xiàn)這個目標呢琼掠?筆者使用的是任務驅(qū)動的方法拒垃。也就是受眾通過做一個個任務,在任務中完成學習瓷蛙。同時悼瓮,教師可以任務過程穿插講相關(guān)的知識點。
以下為任務列表:
- 執(zhí)行
ansible-playbook -i hosts playbook.yml
成功 - 創(chuàng)建用戶 apps 及用戶組 apps:
- 創(chuàng)建以下文件夾艰猬,并設置文件夾的用戶和組為 apps:
/apps横堡,/apps/hello,/apps/hello/bin冠桃,/apps/hello/logs - 將 helloworld-0.0.2.jar copy 到 /apps/hello/bin 目錄下命贴,設置該 jar 文件的用戶和用戶組為 apps
- 使用 template 模塊將 app.service copy 到目標服務器的 /etc/systemd/system 中,并重命名 hello.service :
- 啟動 hello 服務
- 監(jiān)聽 hello 服務是否啟動成功
- 為目標機器安裝 JDK 1.8:
- 在本地倉庫中創(chuàng)建 roles 目錄
- clone 代碼:https://github.com/geerlingguy/ansible-role-java 到 roles 目錄中
- 在 playbook.yml 文件中加入 ansible-role-java 的role
- 創(chuàng)建自定義 role: hello role
- 進入 roles 目錄:cd roles
- 使用命令生成 role 模板:
ansible-galaxy init hello
- 將 hello 的部署邏輯(在 playbook.yml 中)寫入到 hello role 中
- 將 hello 部署到多臺機器
- 需要修改 hosts 文件
- 多環(huán)境部署
任務的設計并不是隨意的食听,而是有意的胸蛛。比如:
- 任務1:受眾拿到練習代碼后,執(zhí)行命令樱报,一定會報錯葬项。這時,教師可以講解 Ansible 部署時需要確定“部署位置”和“部署邏輯”肃弟。順便擴展一下:其它的自動化部署工具玷室,也需要確定這兩部分。
- 任務2:受眾在創(chuàng)建用戶時笤受,一定會失敗穷缤。因為用戶組還沒有創(chuàng)建。
- 任務3:重復創(chuàng)建多個文件夾箩兽,由于新手不懂
with_items
可以遍歷創(chuàng)建文件夾津肛,所以,新手寫出來的代碼會很多重復的汗贫。有悟性的同學身坐,會想辦法減少這種重復秸脱。 - 任務5: 由于 app.service 模板中使用了未定義的變量,所以部蛇,此任務用戶也沒有辦法一次運行成功摊唇,而是需要學習在 playbook.yml 中定義變量,才能運行成功涯鲁。
可以看到這些任務中充滿了“陷阱”巷查。本文就不一一列出所有的陷阱。這些陷阱能達到以下效果:
- 在多次出現(xiàn)錯誤時抹腿,受眾會學會自己看日志岛请,查文檔,找原因警绩。
- 受眾可以在這個不斷遇到問題崇败,解決問題的過程中, 體會到真實的開發(fā)是怎樣的肩祥。
- 激發(fā)受眾的自主思考(最重要)后室。
采用任務驅(qū)動的方式,還能規(guī)避受眾能力參差不齊的問題搭幻,因為能力好的同學可以幫助能力差的同學咧擂。
后記
很久沒有做老師了逞盆,稍微找回了當年做老師的感覺檀蹋。