ansible 是一個基於 python 的工具,在 CI/CD 的世界挺受歡迎,可以做的事情很多,網路上很多 ansible 教學了,我這邊筆記一下一些比較常用的東西
deploy.yml
- hosts: localhost vars: NAME: chan tasks: - name: echo name command: "echo {{ NAME }}" - name: echo age from outside command: "echo {{ AGE }}" - name: echo name from env command: "echo {{ lookup('env', 'LBJ') }}"
這是一個最基礎的 ansible playbook 架構,只要把命令寫好,ansible 就會照 task name 一個一個執行,上面我的範例第一個是 echo 本地設定的 NAME
,第二個 AGE
會從外部導入,第三個 LBJ
是抓取環境變數,因此要正確執行的話要這樣下
$ export LBJ=GOAT $ ansible-playbook deploy.yml -e "AGE=40" -v
執行後可以依序看到 NAME
、AGE
、LBJ
的變數結果相繼印出,基本上架構瞭解,做的事情只是從 tasks 去變化,搭配 ansible 本身強大的 modules 可以幾乎沒有事情辦不到,也可以使用 role
來做群組管理,但如果想要簡單部署,接下來示範如何把上面的工作打散
/a.yml
- hosts: localhost vars: TARGET: a vars_files: - ./vars/var.yml tasks: - include_tasks: ./tasks/deploy.yml - name: echo self stuff command: "echo this is {{ TARGET }}"
/vars/var.yml
NAME: chan
/tasks/deploy.yml
- name: echo name command: "echo {{ NAME }}" - name: echo age from outside command: "echo {{ AGE }}"
這樣的設定,如果要生另一個類似的流程只要複製 a.yml 改一下內容即可。