連接:https://pan.baidu.com/s/1A3Iq3gGkGS27L_Gt37_I0g
提取碼:ncy2
複製這段內容後打開百度網盤手機App,操做更方便哦html
[root@Ansible /]# tree /myroles/ /myroles/ ├── nginx.yaml #入口觸發配置文件 └── roles #playbook的原型配置目錄 └── nginx #nginx相關模組配置目錄 ├── files #copy模塊和script模塊的參數src默認會從這個文件夾查找 ├── handlers #用來存放notify的 ├── tasks #用來存放ansible模塊任務的 ├── templates #用來存放j2的 └── vars #用來存放變量的 7 directories, 1 file
[root@Ansible /]# mkdir -p /myroles/roles/nginx [root@Ansible /]# cat /myroles/nginx.yaml --- - hosts: all #執行的主機範圍 gather_facts: True #開啓系統內置變量 roles: #啓用roles原型配置 - nginx #執行nginx原型模組
[root@Ansible /]# mkdir -p /myroles/roles/nginx/tasks/ [root@Ansible /]# cat /myroles/roles/nginx/tasks/main.yaml --- - name: check alived #任務1的名字 ping: #執行ping模塊 - name: #任務2的名字 shell: ls / #執行shell模塊 register: ls_result #將執行結果保存給變量 - debug: var=ls_result #變量的值賦值給debug進行輸出
[root@Ansible /]# tree /myroles/ /myroles/ ├── nginx.yaml #nginx模組入口配置文件 └── roles └── nginx #nginx原型模組目錄 └── tasks └── main.yaml #nginx模組的tasks任務配置文件 3 directories, 2 files
[root@Ansible myroles]# pwd /myroles [root@Ansible myroles]# ansible-playbook nginx.yaml PLAY [all] ************************************************************************************* TASK [Gathering Facts] ************************************************************************* ok: [Web02] ok: [Web01] TASK [nginx : check alived] ******************************************************************** ok: [Web02] ok: [Web01] TASK [nginx : shell] *************************************************************************** changed: [Web01] changed: [Web02] TASK [nginx : debug] *************************************************************************** ok: [Web01] => { "ls_result": { "changed": true, "cmd": "ls /", "delta": "0:00:00.008101", "end": "2018-09-09 03:33:26.602832", "failed": false, "rc": 0, "start": "2018-09-09 03:33:26.594731", "stderr": "", "stderr_lines": [], "stdout": "bin\nboot\ndev\netc\nhome\nlib\nlib64\nmedia\nmnt\nopt\nproc\nroot\nrun\nsbin\nsrv\nsys\ntmp\nusr\nvar", "stdout_lines": [ "bin", "boot", "dev", "etc", "home", "lib", "lib64", "media", "mnt", "opt", "proc", "root", "run", "sbin", "srv", "sys", "tmp", "usr", "var" ] } } ok: [Web02] => { "ls_result": { "changed": true, "cmd": "ls /", "delta": "0:00:00.007408", "end": "2018-09-09 03:33:26.609171", "failed": false, "rc": 0, "start": "2018-09-09 03:33:26.601763", "stderr": "", "stderr_lines": [], "stdout": "bin\nboot\ndev\netc\nhome\nlib\nlib64\nmedia\nmnt\nopt\nproc\nroot\nrun\nsbin\nsrv\nsys\ntmp\nusr\nvar", "stdout_lines": [ "bin", "boot", "dev", "etc", "home", "lib", "lib64", "media", "mnt", "opt", "proc", "root", "run", "sbin", "srv", "sys", "tmp", "usr", "var" ] } } PLAY RECAP ************************************************************************************* Web01 : ok=4 changed=1 unreachable=0 failed=0 Web02 : ok=4 changed=1 unreachable=0 failed=0
ansible-playbook執行入口配置文件nginx.yaml後,它會自動在roles目錄下查找nginx目錄並進入後查找tasks任務目錄並執行main.yaml的任務配置文件java
#本配置和以前的roles配置等效 [root@Ansible /]# cat /service/scripts/test.yaml --- - hosts: all gather_facts: True tasks: #其實roles的本質就是將tasks任務單獨寫了。 - name: check alived #並在入口文件裏追加了roles去查找tasks配置文件路徑 ping: - name: shell: ls / register: ls_result - debug: var=ls_result
[root@Ansible nginx]# pwd /myroles/roles/nginx [root@Ansible nginx]# mkdir vars [root@Ansible nginx]# cat vars/main.yaml #vars模組的配置文件 --- my_name: yangwenbo phone: 17310658206 [root@Ansible nginx]# cat tasks/main.yaml #tasks模組的配置文件 --- - name: check alived ping: - name: shell: ls / register: ls_result - debug: var=ls_result - name: #添加對變量引用的任務編排 shell: echo my phone is {{ phone }} register: echo_result - debug: var=echo_result
[root@Ansible nginx]# tree /myroles/ /myroles/ ├── nginx.retry ├── nginx.yaml #nginx模組入口配置文件 └── roles └── nginx #nginx原型模組目錄 ├── tasks │ └── main.yaml #nginx模組的tasks任務配置文件 └── vars └── main.yaml #nginx模組的vars任務配置文件 5 directories, 5 files
[root@Ansible myroles]# pwd /myroles [root@Ansible myroles]# ansible-playbook nginx.yaml PLAY [all] ************************************************************************************* TASK [Gathering Facts] ************************************************************************* ok: [Web01] ok: [Web02] TASK [nginx : check alived] ******************************************************************** ok: [Web02] ok: [Web01] TASK [nginx : shell] *************************************************************************** changed: [Web02] changed: [Web01] TASK [nginx : debug] *************************************************************************** ok: [Web01] => { #中間省略。。。 ok: [Web02] => { #中間省略。。。 TASK [nginx : shell] *************************************************************************** changed: [Web01] changed: [Web02] TASK [nginx : debug] *************************************************************************** ok: [Web01] => { "echo_result": { "changed": true, "cmd": "echo my phone is 17310658206", "delta": "0:00:00.004659", "end": "2018-09-09 03:48:24.375861", "failed": false, "rc": 0, "start": "2018-09-09 03:48:24.371202", "stderr": "", "stderr_lines": [], "stdout": "my phone is 17310658206", "stdout_lines": [ "my phone is 17310658206" #輸出的結果 ] } } ok: [Web02] => { "echo_result": { "changed": true, "cmd": "echo my phone is 17310658206", "delta": "0:00:00.006155", "end": "2018-09-09 03:48:24.397609", "failed": false, "rc": 0, "start": "2018-09-09 03:48:24.391454", "stderr": "", "stderr_lines": [], "stdout": "my phone is 17310658206", "stdout_lines": [ "my phone is 17310658206" #輸出的結果 ] } } PLAY RECAP ************************************************************************************* Web01 : ok=6 changed=2 unreachable=0 failed=0 Web02 : ok=6 changed=2 unreachable=0 failed=0
roles模型裏使用copy,script模塊,默認從roles/nginx/files這裏面找linux
[root@Ansible nginx]# pwd /myroles/roles/nginx [root@Ansible nginx]# mkdir files [root@Ansible nginx]# cat files/test #files模組的配置文件 welcome to yunjisuan [root@Ansible nginx]# cat files/test.sh #files模組的配置文件 echo "My name is yangwenbo" >> /tmp/test [root@Ansible nginx]# chmod +x files/test.sh [root@Ansible nginx]# ll files/test.sh -rwxr-xr-x. 1 root root 41 Sep 9 04:11 files/test.sh [root@Ansible nginx]# cat tasks/main.yaml #tasks模組的配置文件 --- - name: check alived ping: - name: shell: ls / register: ls_result - debug: var=ls_result - name: shell: echo my phone is {{ phone }} register: echo_result - debug: var=echo_result - name: #添加copy模塊 copy: src=test dest=/root/ - name: #添加script模塊(自動在目標IP機器上執行腳本) script: test.sh
[root@Ansible nginx]# tree /myroles/ /myroles/ ├── nginx.retry ├── nginx.yaml └── roles └── nginx #nginx原型模組目錄 ├── files │ ├── test #nginx模組的files任務配置文件 │ └── test.sh #nginx模組的files的腳本 ├── tasks │ └── main.yaml #nginx模組的tasks任務配置文件 └── vars └── main.yaml #nginx模組的vars任務配置文件 5 directories, 6 files
[root@Ansible myroles]# ansible-playbook nginx.yaml PLAY [all] ************************************************************************************* TASK [Gathering Facts] ************************************************************************* ok: [Web01] ok: [Web02] TASK [nginx : check alived] ******************************************************************** ok: [Web01] ok: [Web02] TASK [nginx : shell] *************************************************************************** changed: [Web01] changed: [Web02] TASK [nginx : debug] *************************************************************************** ok: [Web01] => { #中間省略。。。 ok: [Web02] => { #中間省略。。。 TASK [nginx : shell] *************************************************************************** changed: [Web01] changed: [Web02] TASK [nginx : debug] *************************************************************************** ok: [Web01] => { #中間省略。。。 ok: [Web02] => { #中間省略。。。 TASK [nginx : copy] **************************************************************************** changed: [Web02] changed: [Web01] TASK [nginx : script] ************************************************************************** changed: [Web02] changed: [Web01] PLAY RECAP ************************************************************************************* Web01 : ok=8 changed=4 unreachable=0 failed=0 Web02 : ok=8 changed=4 unreachable=0 failed=0
[root@Web01 ~]# cat /root/test welcome to yunjisuan [root@Web01 ~]# cat /tmp/test My name is yangwenbo [root@Web02 ~]# cat /root/test welcome to yunjisuan [root@Web02 ~]# cat /tmp/test My name is yangwenbo
roles模型裏使用template模塊,默認從roles/nginx/template裏面找nginx
[root@Ansible nginx]# pwd /myroles/roles/nginx [root@Ansible nginx]# mkdir templates [root@Ansible nginx]# cat templates/test.j2 #templates模組的配置文件 myname is {{ my_name }},my phone is {{ phone }} #引用自定義變量 my ipaddress is {{ansible_all_ipv4_addresses[0]}} #引用內置變量 [root@Ansible nginx]# cat tasks/main.yaml #tasks模組的配置文件 --- - name: check alived ping: - name: shell: ls / register: ls_result - debug: var=ls_result - name: shell: echo my phone is {{ phone }} register: echo_result - debug: var=echo_result - name: copy: src=test dest=/root/ - name: script: test.sh - name: template: src=test.j2 dest=/root/test2 #下發可變配置文件
[root@Ansible nginx]# tree /myroles/ /myroles/ ├── nginx.retry ├── nginx.yaml └── roles └── nginx #nginx原型模組目錄 ├── files │ ├── test #nginx模組的files任務配置文件 │ └── test.sh #nginx模組的files的腳本 ├── tasks │ └── main.yaml #nginx模組的tasks任務配置文件 ├── templates │ └── test.j2 #nginx模組的templates任務配置文件 └── vars └── main.yaml #nginx模組的vars任務配置文件 5 directories, 6 files
[root@Ansible myroles]# pwd /myroles [root@Ansible myroles]# ansible-playbook nginx.yaml PLAY [all] ************************************************************************************* TASK [Gathering Facts] ************************************************************************* ok: [Web01] ok: [Web02] TASK [nginx : check alived] ******************************************************************** ok: [Web01] ok: [Web02] TASK [nginx : shell] *************************************************************************** changed: [Web01] changed: [Web02] TASK [nginx : debug] *************************************************************************** ok: [Web01] => { #中間省略。。。 ok: [Web02] => { #中間省略。。。 TASK [nginx : shell] *************************************************************************** changed: [Web01] changed: [Web02] TASK [nginx : debug] *************************************************************************** ok: [Web01] => { #中間省略。。。 ok: [Web02] => { #中間省略。。。 TASK [nginx : copy] **************************************************************************** ok: [Web02] ok: [Web01] TASK [nginx : script] ************************************************************************** changed: [Web01] changed: [Web02] TASK [nginx : template] ************************************************************************ changed: [Web02] changed: [Web01] PLAY RECAP ************************************************************************************* Web01 : ok=9 changed=4 unreachable=0 failed=0 Web02 : ok=9 changed=4 unreachable=0 failed=0
[root@Web01 ~]# cat /root/test2 myname is yangwenbo,my phone is 17310658206 my ipaddress is 192.168.200.74 [root@Web02 ~]# cat /root/test2 myname is yangwenbo,my phone is 17310658206 my ipaddress is 192.168.200.75
roles使用notify模塊,默認從roles/nginx/handles裏面找git
[root@Ansible nginx]# pwd /myroles/roles/nginx [root@Ansible nginx]# mkdir handlers [root@Ansible nginx]# cat handlers/main.yaml #handlers模組的配置文件 --- - name: start_nginx #定義handlers的動做類型 shell: /usr/local/nginx/sbin/nginx - name: stop_nginx #定義handlers的動做類型 shell: /usr/local/nginx/sbin/nginx -s stop - name: reload_nginx #定義handlers的動做類型 shell: /usr/local/nginx/sbin/nginx -s reload [root@Ansible nginx]# cat tasks/main.yaml #tasks模組的配置文件 --- - name: check alived ping: - name: shell: ls / register: ls_result - debug: var=ls_result - name: shell: echo my phone is {{ phone }} register: echo_result - debug: var=echo_result - name: copy: src=test dest=/root/ - name: script: test.sh - name: template: src=test.j2 dest=/root/test2 notify: start_nginx #執行template任務後下發通知給handlers執行start_nginx
[root@Ansible nginx]# tree /myroles/ /myroles/ ├── nginx.retry ├── nginx.yaml └── roles └── nginx #nginx原型模組目錄 ├── files │ ├── test #nginx模組的files任務配置文件 │ └── test.sh #nginx模組的files的腳本 ├── handlers │ └── main.yaml #nginx模組的handlers任務配置文件 ├── tasks │ └── main.yaml #nginx模組的tasks任務配置文件 ├── templates │ └── test.j2 #nginx模組的templates任務配置文件 └── vars └── main.yaml #nginx模組的vars任務配置文件 5 directories, 6 files
[root@Ansible myroles]# pwd /myroles [root@Ansible myroles]# ansible-playbook nginx.yaml PLAY [all] ************************************************************************************* TASK [Gathering Facts] ************************************************************************* ok: [Web02] ok: [Web01] TASK [nginx : check alived] ******************************************************************** ok: [Web01] ok: [Web02] TASK [nginx : shell] *************************************************************************** changed: [Web02] changed: [Web01] TASK [nginx : debug] *************************************************************************** ok: [Web01] => { #中間省略。。。 ok: [Web02] => { #中間省略。。。 TASK [nginx : shell] *************************************************************************** changed: [Web01] changed: [Web02] TASK [nginx : debug] *************************************************************************** ok: [Web01] => { #中間省略。。。 ok: [Web02] => { #中間省略。。。 TASK [nginx : copy] **************************************************************************** ok: [Web01] ok: [Web02] TASK [nginx : script] ************************************************************************** changed: [Web01] changed: [Web02] TASK [nginx : template] ************************************************************************ ok: [Web01] ok: [Web02] PLAY RECAP ************************************************************************************* Web01 : ok=9 changed=3 unreachable=0 failed=0 Web02 : ok=9 changed=3 unreachable=0 failed=0
特別提示:notify下發通知只有當以前的任務形成了變化那麼纔會被執行,若是沒有發生任何改變,則notify不會被執行。例如:web
[root@Ansible /]# cat /tmp/test.yaml #notify模組的配置文件 --- - hosts: Web01 gather_facts: True tasks: - name: copy: src=/tmp/test dest=/root/ #這步形成目標改變才能出發notify notify: start_nginx handlers: - name: start_nginx shell: /usr/local/nginx/sbin/nginx
#第一次執行/tmp/test.yaml [root@Ansible /]# ansible-playbook /tmp/test.yaml PLAY [Web01] *********************************************************************************** TASK [Gathering Facts] ************************************************************************* ok: [Web01] TASK [copy] ************************************************************************************ changed: [Web01] #發生了改變 RUNNING HANDLER [start_nginx] #觸了發notify ****************************************************************** changed: [Web01] PLAY RECAP ************************************************************************************* Web01 : ok=3 changed=2 unreachable=0 failed=0
#再次執行/tmp/test.yaml [root@Ansible /]# ansible-playbook /tmp/test.yaml PLAY [Web01] *********************************************************************************** TASK [Gathering Facts] ************************************************************************* ok: [Web01] TASK [copy] ************************************************************************************ ok: [Web01] #沒有形成任務改變,未觸發notify通知 PLAY RECAP ************************************************************************************* Web01 : ok=2 changed=0 unreachable=0 failed=0
因爲Jenkins是依賴於java的,因此先介紹java環境的搭建shell
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmlwindows
[root@Ansible yang]# pwd /yang [root@Ansible yang]# ls jdk-8u171-linux-x64.tar.gz [root@Ansible yang]# tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local/ [root@Ansible yang]# cd /usr/local/ [root@Ansible local]# mv jdk1.8.0_171 jdk [root@Ansible local]# /usr/local/jdk/bin/java -version #全路徑驗證java是否安裝成功 java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
[root@Ansible local]# sed -i.org '$a export JAVA_HOME=/usr/local/jdk/' /etc/profile [root@Ansible local]# sed -i.org '$a export PATH=$PATH:$JAVA_HOME/bin' /etc/profile [root@Ansible local]# sed -i.org '$a export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile [root@Ansible local]# tail -3 /etc/profile export JAVA_HOME=/usr/local/jdk/ export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar [root@Ansible local]# source /etc/profile [root@Ansible local]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
#下載jinkins [root@Ansible yang]# wget http://ftp-chi.osuosl.org/pub/jenkins/war-stable/2.107.2/jenkins.war [root@Ansible yang]# ls jenkins.war
#啓動jenkins並後臺運行 [root@Ansible ~]# nohup java -jar jenkins.war &> /tmp/jenkins.out & [root@Ansible yang]# netstat -antup | grep java | grep -v grep tcp6 0 0 :::8080 :::* LISTEN 1405/java tcp6 1 0 192.168.200.73:48132 52.202.51.185:443 CLOSE_WAIT 1405/java udp 0 0 192.168.200.73:54730 192.168.200.2:53 ESTABLISHED 1472/java udp6 0 0 :::5353 :::* 1405/java udp6 0 0 :::33848 :::* 1405/java
[root@Ansible ~]# cat .jenkins/secrets/initialAdminPassword a21db34167d442f1bb23ff335016b5d3
Jenkins的做用?瀏覽器
- 可視化管理服務器
- 持續構建,能夠直接去svn或者git上拉取代碼並下發到服務器上
- 可視化ansible
Jenkins監聽端口8080安全
- 啓動Jenkins方式:nohup java -jar jenkins.war &> /tmp/jenkins.out &
- 查看監聽端口:netstat -antup | grep java
- 訪問方式:http://192.168.200.73:8080
- Jenkins默認密碼路徑,須要到Jenkins所在的服務器進行查看:/root/.jenkins/secrets/initialAdminPassword
- Jenkins初始化配置:將服務器上的密碼複製過來到瀏覽器上提交後,靜心等待,出現以下界面
系統管理--->全局安全配置
系統管理--->系統設置--->找到Publish over SSH能夠添加對應的操做服務器
這就添加好一臺被管理的主機了。要繼續添加被管理的主機只須要重複以前的過程
需求,開發改完代碼上傳到svn上,而後運維打包最新版本代碼部署到業務服務器上。
svn的部署與應用請參考專題(一)
設置完畢後,應用保存。
在windows上對svn的yunjisuan項目進行版本提交後
選擇馬上構建項目
[root@Web01 /]# hostname -I 192.168.200.74 [root@Web01 /]# ls /tmp/test/ 新建文本文檔.txt
[root@Web01 /]# mkdir -p /www/{html,backup} [root@Web02 /]# mkdir -p /www/{html,backup} [root@Web01 /]# tree /www /www ├── backup #html網頁目錄的備份放置目錄 └── html #網頁目錄 2 directories, 0 files
#備份web服務器舊網頁目錄代碼,並將部署到服務器上的新代碼覆蓋到網頁目錄裏 cd /www /usr/bin/tar zcf html_$(date +%F-%H-%S).tar.gz html rm -rf html/* mv html_*.tar.gz backup/ mv /tmp/test/* /www/html/
[root@Web01 /]# tree /www /www ├── backup │ └── html_2018-09-11-06-53.tar.gz └── html ├── 123123.txt └── \346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt 2 directories, 3 files
[root@Web02 /]# tree /www /www ├── backup │ └── html_2018-09-11-06-53.tar.gz └── html ├── 123123.txt └── \346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt 2 directories, 3 files
右鍵點擊想要回滾的版本選擇Revert to this revision
此時你發現你的共享目錄裏的東西已經被回滾到了指定的版本。
最後咱們千萬別忘記了右鍵點擊共享目錄,將結果進行提交(SVN commit)
[root@Web01 /]# tree /www /www ├── backup │?? ├── html_2018-09-11-06-34.tar.gz │?? └── html_2018-09-11-06-53.tar.gz └── html └── 123123.txt 2 directories, 3 files
[root@Web02 /]# tree /www /www ├── backup │?? ├── html_2018-09-11-06-34.tar.gz │?? └── html_2018-09-11-06-53.tar.gz └── html └── 123123.txt 2 directories, 3 files
至此,測試成功!
最後進入安裝界面最下方勾選,安裝完成時重啓Jenkins
[root@Ansible /]# cat /myroles/roles/nginx/ansible-playbook/test.yaml #準備一個playbook的配置文件 --- - hosts: all tasks: - name: test jenkins ansible_playbook shell: echo "welcome to yunjisuan" >> /tmp/yunwei.txt
而後新建一個新的項目任務,進行配置
選擇馬上構建進行測試並查看構建的可視化輸出結果