目的
代碼發布系統
代碼發布:把本地的代碼通過某些方式弄到線上,可以供別人訪問
部署
前戲
ansible 批量在遠程主機上執行命令
puppet ruby
ansible
saltstack
python開發
openpyxl 操作excel表格 讀寫
git 版本控制
celery 異步,延時任務,定時任務的一個芹菜
ansible
1、安裝epel源
yum install -y wget # 安裝wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo # 下載epel源文件
2、安裝ansible
yum install ansible -y
ansible命令格式
Usage: ansible <host-pattern> [options]
-a MODULE_ARGS, --args=MODULE_ARGS # 模塊的參數
-C, --check # 會去執行,但是不做任何的改變,干跑,白跑
-f FORKS, --forks=FORKS # 指定進程數,做並發
--list-hosts #列出主機
-m MODULE_NAME # 模塊名稱
--syntax-check #檢查語法
-k, --ask-pass ask for connection password #指定密碼
查看ansible生成的配置文件
rpm -ql ansible
/etc/ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles
10.0.0.132
10.0.0.133
10.0.0.134
ssh認證方式
-
密碼
-
秘鑰
ssh-keygen # 生成秘鑰
ssh-copy-id root@10.0.0.132 # 將秘鑰文件復制到遠程主機
ping 走的是icmp協議
ansible的第一個命令
ansible 10.0.0.132 -m ping
ansible 10.0.0.133 -m ping
ansible 10.0.0.134 -m ping
ansible all -m ping # 所有機器,hosts文件里面
ansible 10.0.0.133,10.0.0.132 -m ping # 部分機器
## 分組信息
[web]
10.0.0.132
10.0.0.133
[db]
10.0.0.133
10.0.0.134
[cache]
10.0.0.134
## www[001:006].example.com 從www001到www006
ansible web --list-hosts # 用來獲取符合條件的主機
ansible web -m ping # 探測組內的機器
ansible web,db -m ping # 獲取db和web的並集
ansible 'web:&db' -m ping # 獲取db和web的交集
ansible 'web:!db' -m ping # 獲取db和web的差集,在web中但是不在db中的
ansible 'web:db' -m ping # 獲取db和web的並集
弱口令校驗
密碼要符合的規則
-
必須有大寫字母,小寫字母,數字,特殊字符
-
密碼必須12位以上
-
密碼需要三個一換
host-pattern的格式
-
單個的主機
-
單個組
-
多個組
-
交集
-
‘web:&db’
-
-
並集
-
‘web:db’
-
web,db
-
-
差集
-
‘web:!db’
-
-
-
所有的機器 all
-
多個主機
-
獲取模塊幫助信息
Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
-j, --json #以json的方式返回所有模塊的信息
-l # 列出所有的模塊
-s, --snippet # 以片段式顯示模塊的幫助信息
# 顯示全部信息
ansible-doc -l |wc -l #統計ansible的模塊
command
chdir #切換目錄
creates # 如果存在,就不執行,如果不存在,就執行
removes # 如果不存在,就不執行,如果存在,就執行
ansible web -m command -a "pwd"
ansible web -m command -a "ls /tmp"
ansible web -m command -a "chdir=/tmp pwd" # 切換目錄,一般做編譯安裝
ansible web -m command -a "creates=/tmp pwd" # 不被執行,因為/tmp已經存在,
ansible web -m command -a "creates=/tmp2 pwd" # 被執行,因為/tmp2目錄不存在
ansible web -m command -a "creates=/tmp2 mkdir /data" # 會被執行,因為/tmp2目錄不存在
ansible web -m command -a "removes=/tmp2 pwd" # 不被執行,因為/tmp2目錄不存在
ansible web -m command -a "removes=/tmp pwd" # 會被執行,因為/tmp已經存在,
補充
#查看用戶創建成功與否
1.ll /home
2.tail -1 /etc/passwd
3.tail /etc/shadow
4.id alex
echo "alex3714" |passwd --stdin alex # 給用戶設置密碼,不需要二次確認
[root@localhost ~]# name=alex
[root@localhost ~]# echo "$name"
alex
[root@localhost ~]# echo '$name'
$name
shabang
shell
ansible web -m shell -a "echo 'alex'|passwd --stdin alex" # 給用戶設置密碼
ansible 10.0.0.132 -m shell -a "bash a.sh" # 執行shell腳本
ansible 10.0.0.132 -m shell -a "./a.sh"
ansible 10.0.0.132 -m shell -a "/root/a.sh"
ansible 10.0.0.132 -m shell -a "/root/a.py" # 執行python腳本
ansible 10.0.0.132 -m shell -a "python a.py"
# shell 腳本
script
ansible db -m script -a "/root/a.sh" # 執行的是本地的腳本,管控機上的腳本
ansible db -m script -a "creates=/root/a.sh /root/a.sh" # 判斷是遠程主機是否存在,如果存在,就不執行,如果不存在,就執行
ansible db -m script -a "removes=/root/a.sh /root/a.sh" # 判斷的主機是否存在,如果存在,就執行,如果不存在,就不執行
copy
backup # 創建備份文件,以時間戳結尾
content # 直接寫內容
dest # 目標地址
group #文件的屬組
mode # 文件的權限W 2 R 4 X 1
owner #文件的屬主
src # 原文件
ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh" # 復制文件
ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755" # 復制文件,並修改文件的權限
ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755 owner=alex" #復制文件,修改文件的權限,屬主,根據md5值來判斷
ansible db -m copy -a "src=/etc/init.d dest=/tmp/" # 復制文件夾
ansible db -m copy -a "src=/etc/init.d/ dest=/tmp/" # 復制文件夾下面的所有文件
ansible db -m copy -a "src=/etc/init.d dest=/tmp/ owner=alex " # 復制文件夾,並改變文件夾的屬性,文件夾的文件的屬性也會跟着改變
ansible db -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私語' dest=/tmp/a.sh" # 直接寫文字,覆蓋寫入,要慎用
ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755 owner=alex backup=yes" #備份文件,如果遠程機器上沒有要備份的文件,即使指定了backup=yes 也不會去備份文件
file
access_time # 訪問事件
group # 屬組
mode #權限
owner #屬主
path #路徑
src # 原文件,link和hard的時候使用
state:
directory 文件夾
file
touch 空文件
link 軟連接
hard 硬鏈接
absent 刪除
ansible db -m file -a "path=/tmp/baoyuan state=directory" # 創建一個目錄
ansible db -m file -a "path=/tmp/baoyuan state=directory owner=alex mode=644" # 創建一個目錄,並制定屬主,權限
ansible db -m file -a "path=/tmp/baoyuan.txt state=touch owner=alex mode=644" # 創建一個文件,並制定屬主,權限
ansible db -m file -a "path=/tmp/f src=/etc/fstab state=link" # 創建一個軟連接
ansible db -m file -a "path=/tmp/f state=absent" # 刪除
補充
軟連接 windows的快捷方式 ln —s 原文件 目標文件 源文件改變,目標文件也改變 可以跨越分區 原文件刪除,鏈接失效
硬鏈接 指向同一個硬盤的地址 ln 原文件 目標文件 原文件改變,目標文件也改變 不可以跨域分區 原文件刪除,不會受影響
復制
內容總結
-
ansible 安裝,epel源
-
ansible 里面ping 走的是ssh
-
host-pattern的格式
-
單個的ip
-
多個的ip
-
單個組
-
多個組
-
交集
-
‘web:&db’
-
-
並集
-
‘web:db’
-
‘web,db’
-
-
差集
-
‘web:!db’
-
-
-
-
command 執行命令 不支持特殊字符 $ < > | ; &
-
chdir 切換目錄,一般是編譯安裝
-
creates 判斷是否存在,如果存在,就不執行,如果不存在,就執行
-
removes 判斷是否存在,如果存在,就執行,如果不存在,就不執行
-
-
shell 執行遠程機器上的shell腳本或者python腳本
-
chdir 切換目錄,一般是編譯安裝
-
creates 判斷是否存在,如果存在,就不執行,如果不存在,就執行
-
removes 判斷是否存在,如果存在,就執行,如果不存在,就不執行
-
-
script 執行本地腳本,執行管控機上的腳本
-
chdir 切換目錄,一般是編譯安裝
-
creates 判斷遠程主機是否存在,如果存在,就不執行,如果不存在,就執行
-
removes 判斷遠程主機是否存在,如果存在,就執行,如果不存在,就不執行
-
-
copy 將本地的文件復制到遠程主機上
-
src 原文件
-
dest 目標文件
-
owner 屬主
-
group 屬組
-
mode 權限
-
backup 備份
-
content 直接寫內容,覆蓋寫
-
-
file 在遠程主機上創建文件,文件夾,軟連接,硬鏈接
-
path 目錄
-
src
-
link
-
hard
-
-
owner
-
group
-
mode
-
state
-
directory 文件夾
-
touch 文件
-
link 軟連接
-
hard 硬鏈接
-
absent 刪除
-
file
-
-
-