Ansible的roles標準化與Jenkins持續集成(三)

Ansible的roles標準化與Jenkins持續集成(三)

連接:https://pan.baidu.com/s/1A3Iq3gGkGS27L_Gt37_I0g
提取碼:ncy2
複製這段內容後打開百度網盤手機App,操做更方便哦html

1. 使用roles標準化Playbook

1.1 建立roles基本原型的目錄結構

[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

1.2 入口觸發配置文件

[root@Ansible /]# mkdir -p /myroles/roles/nginx
[root@Ansible /]# cat /myroles/nginx.yaml 
---
- hosts: all             #執行的主機範圍
  gather_facts: True     #開啓系統內置變量
  roles:                 #啓用roles原型配置
  - nginx                #執行nginx原型模組

1.3 roles中tasks任務編排模組的使用

1.3.1 在nginx模組添加tasks任務配置文件

[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進行輸出

1.3.2 完成後的目錄結構以下所示

[root@Ansible /]# tree /myroles/
/myroles/
├── nginx.yaml    #nginx模組入口配置文件
└── roles
    └── nginx     #nginx原型模組目錄
        └── tasks
            └── main.yaml    #nginx模組的tasks任務配置文件

3 directories, 2 files

1.3.3 執行nginx.yaml入口配置文件查看結果

[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

1.4 roles中vars自定義變量模組的使用

1.4.1 在nginx模組添加vars任務配置文件

[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

1.4.2 完成後的目錄結構以下所示

[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

1.4.3 執行nginx.yaml入口配置文件查看結果

[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

1.5 使用copy,script模塊的標準化

roles模型裏使用copy,script模塊,默認從roles/nginx/files這裏面找linux

1.5.1 在nginx模組添加files任務配置文件

[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

1.5.2 完成後的目錄結構以下所示

[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

1.5.3 執行nginx.yaml入口配置文件

[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

1.5.4 查看執行結果

[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

1.6 roles中template模塊的使用

roles模型裏使用template模塊,默認從roles/nginx/template裏面找nginx

1.6.1 在nginx模組添加template任務配置文件

[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    #下發可變配置文件

1.6.2 完成後的目錄結構以下所示

[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

1.6.3 執行nginx.yaml入口配置文件

[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

1.6.4 查看執行結果

[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

1.7 roles中notify模塊的使用

roles使用notify模塊,默認從roles/nginx/handles裏面找git

1.7.1 在nginx模組添加template任務配置文件

[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

1.7.2 完成後的目錄結構以下所示

[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

1.7.3執行nginx.yaml入口配置文件

[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

1.7.4 tasks任務形成改變,觸發notify

[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

1.7.5 執行notify入口配置文件

#第一次執行/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

2. Jenkins環境搭建

因爲Jenkins是依賴於java的,因此先介紹java環境的搭建shell

2.1 使用官方的二進制包解壓安裝,官方二進制包的下載地址:

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmlwindows

2.2 安裝java(解壓,移動便可)

[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)

2.3 配置java環境變量/etc/profile

[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)

2.4 Jenkins的下載和運行

#下載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

2.5 而後咱們在瀏覽器上進行訪問:http://192.168.200.73:8080 出現以下界面

image_1cn1e8oqs1a69196p180qmnk1u734f.png-197.7kB

[root@Ansible ~]# cat .jenkins/secrets/initialAdminPassword
a21db34167d442f1bb23ff335016b5d3

3. Jenkins介紹和初始化配置

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初始化配置:將服務器上的密碼複製過來到瀏覽器上提交後,靜心等待,出現以下界面

3.1 安裝必要的插件

image_1cn1egkru200108s91r1lmulu96c.png-94kB

image_1cn1ek6q0k88n8o19kr4hm1h898c.png-350.3kB

image_1cn1eq1mq1ksmb9f1h6l9321923bs.png-58.4kB

3.2新添加一個用戶yunjisuan

image_1cn1ffske10h4g9ncrg1j0gorjcp.png-31.3kB

3.3查看Jenkins的權限(登陸用戶能夠作任何事情)

系統管理--->全局安全配置

image_1cn1fiig5opj14m310ek1gepd6.png-26.4kB

image_1cn1fl4o5cgc1t3v764drs1hpidj.png-77.3kB

image_1cn1fmpt87g31gc91rcc1lej6jie0.png-37.8kB

4. Jenkins實現命令結果的可視化

4.1 添加ssh方式的被管理服務器

系統管理--->系統設置--->找到Publish over SSH能夠添加對應的操做服務器

image_1cn3bf25p1s0014r31rnu150u6l419.png-58.5kB

image_1cn3bn8iumd25f314hi1ifehna1m.png-25.4kB

image_1cn3c2qe8fn81b9mgk2js23kl2g.png-30.6kB

image_1cn3c6r591hm1efetav1fpfpna30.png-20.7kB

image_1cn3cgcq6e00qhr1lm2s4km8r3d.png-33.8kB
這就添加好一臺被管理的主機了。要繼續添加被管理的主機只須要重複以前的過程

4.2 建立新任務

image_1cn3kna795lg1thf1a3e1vbb16lu4c.png-28.9kB

image_1cn3ksi0g1o931elbuuouhaokb5p.png-82.1kB

image_1cn3l0fbo1q821rvcld5j514e56m.png-21kB

image_1cn3lc3dnun21v38j7c1mmot377j.png-58.5kB

4.3 馬上構建任務並執行

image_1cn3lhib11epg1t5n1ake19m41dch8g.png-15.8kB

image_1cn3m3c981o09ent1h2p1h3nscj4p.png-23.3kB

image_1cn3m6baq1brcgd917705us6c56.png-12.2kB

image_1cn3mlvpo6vbjqotfbi9s1p2p.png-11.3kB

image_1cn3mo3u61gjd1lt2rs74al1jpl36.png-17.4kB

image_1cn3mtiii1kb6onic06oed8ac73.png-25.7kB

5. Jenkins+svn實現持續化集成

需求,開發改完代碼上傳到svn上,而後運維打包最新版本代碼部署到業務服務器上。
svn的部署與應用請參考專題(一)

5.1 設置svn的鏈接密碼,並進行代碼的部署測試

image_1cn3oc61k1ul01hpptbg14qt1o2528.png-12.8kB

image_1cn3od8rtkln1rb81juu1391aeb2l.png-15.8kB

image_1cn3of25l7g46qmipl75phf3h.png-12.4kB

image_1cn3sn2nsj5kqob5ejtkb1ttq3v.png-26kB

image_1cn3susv6gsn1e44sqf17p24m39c.png-13.4kB

image_1cn3tgqqj1p1feca1d0i18ftg5e59.png-18.6kB

image_1cn3tr8sg1mev1r9jo28k1ievp66.png-64.2kB

image_1cn3uc5h7rqplou1gc51osa1v7mfm.png-60.9kB

設置完畢後,應用保存。
在windows上對svn的yunjisuan項目進行版本提交後
選擇馬上構建項目

[root@Web01 /]# hostname -I
192.168.200.74 
[root@Web01 /]# ls /tmp/test/
新建文本文檔.txt

5.2 模擬真實環境web服務器的代碼部署和備份

5.2.1 模擬真實環境web服務器的代碼部署和備份

[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

5.2.2 在jenkins上設置Web01,Web02兩臺服務器做爲項目的構建目標

image_1cn4101h11seb1m271obk6e5t8q5p.png-27.5kB

image_1cn413la21s2nup4sn1tm2mm67m.png-31.9kB

5.2.3將如下shell腳本代碼複製到構建目標的Exec command裏

#備份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/

image_1cn418k07jsh8efdml7a1po383.png-9.6kB

5.2.4 選擇馬上構建進行測試

[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

5.3 模擬真實環境,開發進行代碼回滾

image_1cn41q44jt5h1q311hhlbp21gp3a0.png-5.9kB

5.3.1 右鍵點擊共享目錄選擇TortoiseSVN--->Show log

image_1cn41tul91ve15kp1kce1p9r1mnvad.png-45.4kB
右鍵點擊想要回滾的版本選擇Revert to this revision

image_1cn4206821unj144l8og1657ir7aq.png-22.1kB

image_1cn420ura1u241k6raml1nnr1h0gbn.png-30kB

此時你發現你的共享目錄裏的東西已經被回滾到了指定的版本。
最後咱們千萬別忘記了右鍵點擊共享目錄,將結果進行提交(SVN commit)

5.3.2 從新進行jenkins項目構建,並檢查部署狀況

[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

至此,測試成功!

6. Jenkins實現ansible可視化

6.1 安裝jenkins ansible插件,啓動ansible插件

image_1cn42dfl718n411l31nq81hfp1amoc4.png-24.6kB

image_1cn42ftg9d121kpq1ba21vn516jtd1.png-38.6kB

image_1cn42lqc7l0f1a2dthm1fc01kvide.png-27.7kB
最後進入安裝界面最下方勾選,安裝完成時重啓Jenkins

image_1cn42q0oqmak17jq137uupa1la3fb.png-60.8kB

6.2 系統管理--->全局工具配置---->配置ansible

image_1cn42t40v1dmk1i0q13v61rv01g23ho.png-17.3kB

image_1cn42u5ru1fokd6jf6na71mitil.png-30.2kB

image_1cn42vb461pfemcm214s0uop1j2.png-27.4kB

image_1cn434ohv9uv8i1s401fuld0tjv.png-33.4kB

6.3 新建一個項目任務,使用ansible進行構建,跑個shell和copy模塊

6.3.1 新建一個叫作ansible_test的新項目任務

image_1cn43a9g2ln6p1t1m0tb3n1o4mkc.png-42.7kB

6.3.2 進入項目的配置裏。構建一個基於ansible的任務

image_1cn43f94hr2913tri4igi71u3okp.png-63.7kB

image_1cn44dq3a1d9s1a28c6c1rfj124l6.png-73.1kB

6.3.3 而後點擊馬上構建功能,並查看輸出結果

image_1cn44inlf1vqm19kp1u3abef13aamj.png-37.8kB

6.3.4 新建一個項目任務,使用ansible-playbook進行構建

[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

而後新建一個新的項目任務,進行配置
image_1cn45c3pbfdmk4n1uurtlje1jng.png-25.4kB

image_1cn45emk3mvvmv81nv1l6qmg6nt.png-38.8kB

image_1cn45nqemdatpht1an31ogn1paisq.png-57.8kB

選擇馬上構建進行測試並查看構建的可視化輸出結果

image_1cn45slnu52pbql1o4d5sr1h30t7.png-41.8kB

相關文章
相關標籤/搜索