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 改一下內容即可。