Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
1
______________________________
/ DevOps ⼈人⼀一定要知道的持續交付技巧 
 - Ansible & GitLab CI 實戰演練 /
------------------------------

 ...
Ready?
要開始了了!
2
Before start ..,
Today we use 93
Docker containers.
3
關於我
• 凍仁翔 (@chusiang_lai)。
• 《凍仁的筆記》站長。
• DevOps Taiwan 志⼯工。
• 2 年年左右的 Ansible 使⽤用經驗。
• 5 年年以上的 IT 營運經驗。
• 第 8 屆 IT 邦幫忙鐵⼈人...
Outline
• DevOps ⼈人是什什麼?
• 持續交付是什什麼?
5
Outline
• DevOps ⼈人是什什麼?
• 持續交付是什什麼?
• Ansible 是什什麼?
• 怎麼部署 Ansible 環境?
• 怎麼操作 Ansible?
6
Outline
• GitLab 是什什麼?
• Pipeline 是什什麼?
• 怎麼操作 GitLab CI?
7
Outline
• GitLab 是什什麼?
• Pipeline 是什什麼?
• 怎麼操作 GitLab CI?
• 怎麼⽤用 Ansible 和 GitLab CI 進⾏行行持續交付?
• Q&A
8
Ⅰ. DevOps ⼈人是什什麼?
9
廣義的 DevOps 是什什麼?
10
DevOps
狹義的 DevOps 是什什麼?
Dev Ops
Infra
11
我⼼心中的 Dev ⼈人是什什麼?
等 Ops?
有事 On-call 沒事下班
Coding
12
我⼼心中的 Ops ⼈人是什什麼?
耗時
有事救火 沒事 On-call
敲指令 裝機器
改什什麼 常忘記
13
我⼼心中的 DevOps ⼈人是什什麼?
不⽤用 20 分
有事 On-call
Coding
管機器
沒事讓 code
"⾃自⼰己" 管機器
14
今天會⽤用到哪些 Tools?
Git, GitLab
GitLab CI
Ansible
Docker
15
今天會⽤用到哪些 License?
LGPL
MIT
GPL
Apache
16
可以⽤用到哪些 Tools 替代?
Ansible
Chef, Puppet, Slat
Docker
AWS, Vagrant
GitLab CI,
Jenkins CI,
Drone CI
Git, GitLab
GitHub
17
Ⅱ. 持續交付是什什麼?
《Continuous Delivery》- https://goo.gl/r9vXFg
持續的、不間斷的、不鬆懈的。
投遞、傳送、交付、交貨。
18
利利⽤用⾃自動化的
建置、測試與部署
,完美創造出可信賴
的軟體發佈
- Jez Humble & David Farley
《Continuous Delivery 中⽂文版》- https://goo.gl/SK745B
19
建置
測試
發佈
部署
⾃自動化
20
建置
測試
發佈
部署
⾃自動化
21
建置
測試
發佈
部署
⾃自動化
22
建置
測試
發佈
部署
⾃自動化
23
建置
測試
發佈
部署
⾃自動化
24
建置
測試
發佈
部署
⾃自動化
25
持續交付和持續部署有什什麼不同?
Continuous Delivery
Continuous Deployment
auto auto manual
Build Deploy Test Release
auto auto auto
Build...
持續交付和持續部署有什什麼不同?
前者需⼿手動 Release ⾄至 Production,⽽而後者則⾃自動化之。
Continuous Delivery
Continuous Deployment
auto auto manual
Build...
導入持續交付的好處是什什麼?
28
Before
需耗數 hr 交付
1 週以上
交付 1 次
⼈人為失誤 ↑
發佈 ≒ 救火
29
R&D:我程式寫完了了! 我:等 CD 過了了再說。
Code 還在本機?
推上 Git server?
組態設定對了了?
單元測試過了了?
持續交付過了了?
真 實 案 例例
R&D:我程式寫完了了!
我:(哪裡寫完了了?!)
30
After
交付 < 5 min
commit
即交付
⼈人為失誤 ↓
即早發現
即早治療
31
R&D:我程式寫完了了! 我:等 CD 過了了再說。
Code 還在本機?
推上 Git server?
組態設定對了了?
單元測試過了了?
持續交付過了了?
真 實 案 例例
32
案例例分析
提前預演變更更⼯工作,避免
每次變更更都成為例例外⼯工作!
《The Phoenix Project》
Amazon - https://goo.gl/visckK
33
Ⅲ. Ansible 是什什麼?
34
Ansible 取名⾃自知名⼩小說

《安德的遊戲》,是
虛構的超光速通訊技術。
有了了它我們就可以像 Ender
指揮戰艦般的操控伺服器。
電影海海報 - https://goo.gl/4xftZT
35
Ansible ⾃自 2013 年年創立,
於 2015 年年被 Red Hat 併購。
iThome - http://goo.gl/yJbWtz
36
在 GitHub 上擁有 25,884 顆星星、3,018 位協作者。
37
Ansible Tower
更更獲選 Linuxpilot 2017
Linux & OSS 最佳解決⽅方案

,擁有最佳系統⾃自動化管理理
⽅方案之名。
Linuxpilot - https://goo.gl/mSxR4E
38
Ansible 和 Tower 有什什麼不同?
https://www.ansible.com/blog/red-hat-ansible-automation-engine-vs-tower
39
我⼼心中的 Ansible 是什什麼?
1. 與 Puppet、SaltStack、Chef 並列列其四。
2. Python like 的組態設定⼯工具

(Infrastructure as Code)。
40
Python
Ansible
SaltStack
Ruby
Chef
Puppet
vs
41
我⼼心中的 Ansible 是什什麼?
3. 不需 Agent,有 Python 和 SSH 就可以闖天下!
4. 容易易上⼿手。
5. 社群強⼤大,有商業公司⽀支援。
42
真實案例例
每週節省 26 hr 的⼯工時。
(6 x 3) x 2 - (5 x 1) x 2 = 26 hr
43
減少例例⾏行行性⼯工作⼈人⼒力力成本
0
350
700
1,050
1,400
Week Month Year
104 hr
26 hr
1,352 hr
44
節省企業開⽀支
0
125,000
250,000
375,000
500,000
Week Month Year
$35,360
$8,840
$459,680
45
Ⅳ. 怎麼部署 Ansible 環境?
觀念念、安裝、設定
46
Ansible 是怎麼運作的?
透過 inventory 定義 Managed node,並藉由 SSH 與 Python 進⾏行行溝通。
47
怎麼安裝 Ansible?
• 只需在 Control Machine (主控端) 安裝 Ansible;
Managed node 則需 Python 2.5+ 和 SSH。
$ sudo apt-get install ansible # ...
怎麼設定 Ansible?
• 藉由 ansible.cfg 來來設定 inventory (host file) 檔案路路徑、
Managed node (被控端) 使⽤用者名稱、SSH ⾦金金鑰 … 等。
$ vim ansible.cfg
...
inventory 是什什麼?
• 定義 Managed node (被控端) 位址與群組的主機清冊,

通常會⽤用來來設定 ssh 或 winrm 的連線資訊。
$ vim hosts
1 # 在同⼀一主機的不同 Port 跑 ssh ser...
Ⅴ. 怎麼操作 Ansible?
Ad-Hoc command, Playbook* (Module)
51
and Playbooks
Ad-Hoc
commands
52
Ad-Hoc
commands
簡短指令
53
⼀一般的 command line 是什什麼?
• 這裡的 command line 為 Linux Shell 底下的指令操作,
以下為 ping 和 echo 的操作的結果。
$ ping localhost
PING localhost ...
怎麼⽤用 Ad-Hoc commands?
ansible <host-pattern> [-m module_name] [-a args] [options]
• host-pattern: all, server1, server1:se...
劇本
Playbooks
56
57
Playbooks 是什什麼?
• 比 Shell Script 更更結構
化的腳本語⾔言,是⼀一鍵
部署的好物。
• 使⽤用 YAML 格式,簡單
易易讀。
Baby Playbook Onesie - http://goo.gl/GK...
58
Playbooks 是什什麼?
• 通常會有 Play, Task,
Module 和 handler 等。
• 整合 Jinja2 的 template
系統,可使⽤用變數、判
斷式、迴圈等表達式。
Baby Playbook Ones...
59
Playbooks 是什什麼?
• ⼀一份 Playbook 可以有多個 Play、多個 Task 和多個 Module。
• 此例例⽤用到了了 Play × 1, Task × 2 和 Module × 2 (command, apt)...
60
Playbooks 是什什麼?
• 執⾏行行 playbook。
$ ansible-playbook example2.yml
PLAY [a sample playbook.] ****************************...
61
• 執⾏行行 playbook。
Playbooks 是什什麼?
$ ansible-playbook example2.yml
PLAY [a sample playbook.] ****************************...
62
• 透過動作 (Play) 對特定 Managed node 進⾏行行操控,通常包含 Task 和 Module。
• 此例例⽤用到了了 Play × 1, Task × 2 和 Module × 2 (command, apt)。


...
63
• 藉由各種不同的模組 (Module)、迴圈和判斷式等組合來來完成各種任務 (Task)。
• 此例例⽤用到了了 Play × 1, Task × 2 和 Module × 2 (command, apt)。













...
64
• 最⼩小的操作⽅方法 (Method),好比 Python 的內建函式。
• 此例例⽤用到了了 Play × 1, Task × 2 和 Module × 2 (command, apt)。






















...
實戰演練 1
65
練習環境為 Control Machine (Ubuntu 16.04) + Managed node*2 (Ubuntu 16.04)。
透過 Ansible 和 Jupyter 操控 Managed node
66
$ docker run -P -d 
chusiang/ansible-jupyter:ubuntu-16.04
67
# 建立 Control Machine。
$ docker run -p 8888:8888 -d 
chusiang/ansible-jupyter:ubuntu-16.04
# 建立 Managed node 1。
$ docker ru...
怎麼⽤用 Jupyter 上的 Ansible 操控 Managed node?
透過 ansible.cfg 和 inventory 將兩兩者串串接。
69
70
Ⅵ. GitLab 是什什麼?
71
GitLab 是什什麼?
集 Git Repository、Docker Registry、Issue tracking、Code Review、
CI 和 CD 於⼀一⾝身的現代平台。
72
回顧 Ansible 和 Tower 的 Ecosystems
https://www.ansible.com/blog/red-hat-ansible-automation-engine-vs-tower
73
今天我們⽤用 GitLab 進⾏行行協作
https://www.ansible.com/blog/red-hat-ansible-automation-engine-vs-tower
GITLAB
74
⽤用 GitLab CI 實作 Pipeline
Unit Test Integration Test Delivery DeploymentBuildSyntax Check
75
Ⅶ. Pipeline 是什什麼?
管道 (線)?⽣生產線?傻傻分不清楚?!
76
Ch 5. 部署流⽔水線解析
Ch 6. 建置與部署的腳本化
Ch 7. 提交階段
Ch 8. ⾃自動化驗測試
Ch 9. 非功能性需求測試
Ch 10. 應⽤用程式的部署與發佈
書中的 Pipeline 是什什麼?
《Continuous D...
原始
程式碼
應⽤用程式
設置
提交階段
編譯
單元測試
程式碼分析
組裝 binaries
驗收階段
設置環境
部署 binaries
冒煙測試
驗收測試
UAT 階段
設置環境
部署 binaries
冒煙測試
探索性測試
⽣生產⼒力力測試...
原始
程式碼
應⽤用程式
設置
提交階段
編譯
單元測試
程式碼分析
組裝 binaries
驗收階段
設置環境
部署 binaries
冒煙測試
驗收測試
UAT 階段
設置環境
部署 binaries
冒煙測試
探索性測試
⽣生產⼒力力測試...
– Chu-Siang Lai
「Pipeline 好比⽣生產線,導入⾃自動化後
,⾃自然顯現的軟體發佈流程。」
80
GitLab Pipelines ⼜又是什什麼?
圖像化的軟體發佈⽣生產線。
81
82
DeployBuild Test Release
83
84
Ⅷ. 怎麼操作 GitLab CI?
在專案底下建立 .gitlab-ci.yml,當程式碼上傳⾄至 GitLab 即會觸發 GitLab CI。
85
• YAML 語法。
• 此例例⼤大致可分為 stage × 1 和 job × 1。





















怎麼寫 .gitlab-ci.yml?
$ vim .gitlab-ci.yml
1 stages:
2 - bu...
怎麼觸發 GitLab CI?
Trigger by git push.
87
從 Pipelines 看觸發狀狀態。
88
詳細觸發資訊。
89
Ⅸ. 怎麼⽤用 Ansible 和 GitLab CI 進⾏行行持續交付?
在 GitLab CI,⽤用 Ansible (Docker Containers) 跑 Playbooks 即可。
90
AnsibleGitLab CIDocker
91
使⽤用者故事
⾝身為開發團隊的⼀一員,我想要每次提交
時,都會依照不同的分⽀支,⾃自動部署到
不同的環境,並進⾏行行些簡易易的測試,

因為我們不想程式寫到⼀一半,還要

下⼀一堆指令,操作⼀一堆機器。
92
Git server GitLab
CI server Build Deploy Test
Engineer
93
Develop
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
94
Master
https://hub.docker.com/r/chusiang/ansible/
0
95
https://gitlab.com/chusiang/coscup2017-cd-demo
1
96
Build stage
2
TestDeploy ReleaseBuild
97
Deploy, Test and
Release stages
3
DeployBuild Test Release
98
Pipelines
4
99
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
Coding & Git Commit
100
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
Git Push
Coding & Git Commit
101
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
.gitlab-ci.yml
102
$ vim .gitlab-ci.yml
1 stages:
2 - build
3 - deploy
4 - test
5 - release
6
7 build_binary:
8 image: ubuntu:16.04
9 stage: ...
22
23 deploy_to_dev:
24 image: chusiang/ansible:alpine-3.6
25 stage: deploy
26 script:
27 - ls
28 - cd ansible-playbooks/
...
38
39 test_dev:
40 image: chusiang/ansible:alpine-3.6
41 stage: test
42 script:
43 - cd ansible-playbooks/
44 - echo "${VA...
53
54 release_to_prd:
55 image: chusiang/ansible:alpine-3.6
56 stage: release
57 script:
58 - cd ansible-playbooks/
59 - e...
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
.gitlab-ci.yml
107
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
Package deb file
108
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
Play deploy.yml
109
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
Play test.yml
110
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
Play deploy.yml
111
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
Feedback
112
Customer
Git server GitLab
CI server Build Deploy Test Release
Engineer
113
火⼒力力展⽰示
Live Demo
114
Demo 環境為 Control Machine (Alpine 3.6) + Managed node*2 (Ubuntu 16.04)。
透過 GitLab CI 和 Ansible 操控 Managed node
115
https://youtu.be/QHim_JxB4ZY
116
實戰演練 2
117
https://gitlab.com/chusiang/
continuous-delivery-
workshop
118
– Chu-Siang Lai
「持續交付是⼀一段⼈人類與企業的進化史。」
119
我的 Pipeline 進化史
Unit Test Integration Test Delivery DeploymentBuildSyntax Check
Unit Test Delivery DeploymentBuildSyntax C...
今天提到的 DevOps 是什什麼?
121
※ 此圖出⾃自 Chen Cheng-Wei 的 Effective DevOps 簡報 (https://www.slideshare.net/warfan/effective-devops-78979993)。
• 提到 DevOps 到底在談些什什麼玩意兒? by Chen Cheng-Wei - https://goo.gl/7YTeKD
• Continuous Delivery - 敏捷開發的最後⼀一哩路路 by Miles - https:/...
圖片來來源
• 《Continuous Delivery》 | Amazon.com - https://www.amazon.com/dp/0321601912
• 《Continuous Delivery 中⽂文版》 | 天瓏網路路書店 -...
https://www.facebook.com/groups/DevOpsTaiwan/
https://devopstw.club/
DevOps Taiwan
https://gitter.im/DevOpsTW/
125
Ansible Taiwan
https://telegram.me/ansible_tw
https://github.com/ansible-tw
http://ansible.tw
126
http://萍⽔水相逢.tw
127
Q & A
嚴禁拍打餵食
128
END
129
Upcoming SlideShare
Loading in …5
×

Continuous Delivery Workshop with Ansible x GitLab CI

505 views

Published on

# DevOps 人一定要知道的持續交付技巧 - Ansible & GitLab CI 實戰演練

> Mirror from https://speakerdeck.com/chusiang/continuous-delivery-workshop-with-ansible-x-gitlab-ci

Ansible 是個與 Puppet, Salt, Chef 並列其四的 Infrastructure as Code 組態設定工具,其簡單易用的特性讓人愛不釋手;GitLab 是業界常見的 Git 私有版本控制服務,搭配其 GitLab CI 更能建立屬於自己的發佈流程。

本次凍仁將藉由工作坊的形式,帶領大家一探持續交付的世界和自動化的威力!

* 活動網址: https://www.meetup.com/DigitalOceanHsinchu/events/243518189/
* Gist note: https://gist.github.com/chusiang/56843a737b8c3931c1736d6939a4e172

#Ansible #GitLab #DevOps #Workshop

Published in: Technology
  • Be the first to comment

Continuous Delivery Workshop with Ansible x GitLab CI

  1. 1. 1 ______________________________ / DevOps ⼈人⼀一定要知道的持續交付技巧 - Ansible & GitLab CI 實戰演練 / ------------------------------ ^__^ (oo)_______ (__) )/ ||----w | || || [ chusiang@DigitalOecanHsinchu ~ ] $ cat .profile # Author: 凍仁翔 / chusiang@drx.tw # Blog: http://note.drx.tw # Modified: 2017-10-15 22:44
  2. 2. Ready? 要開始了了! 2
  3. 3. Before start .., Today we use 93 Docker containers. 3
  4. 4. 關於我 • 凍仁翔 (@chusiang_lai)。 • 《凍仁的筆記》站長。 • DevOps Taiwan 志⼯工。 • 2 年年左右的 Ansible 使⽤用經驗。 • 5 年年以上的 IT 營運經驗。 • 第 8 屆 IT 邦幫忙鐵⼈人賽 DevOps 組冠軍。 4
  5. 5. Outline • DevOps ⼈人是什什麼? • 持續交付是什什麼? 5
  6. 6. Outline • DevOps ⼈人是什什麼? • 持續交付是什什麼? • Ansible 是什什麼? • 怎麼部署 Ansible 環境? • 怎麼操作 Ansible? 6
  7. 7. Outline • GitLab 是什什麼? • Pipeline 是什什麼? • 怎麼操作 GitLab CI? 7
  8. 8. Outline • GitLab 是什什麼? • Pipeline 是什什麼? • 怎麼操作 GitLab CI? • 怎麼⽤用 Ansible 和 GitLab CI 進⾏行行持續交付? • Q&A 8
  9. 9. Ⅰ. DevOps ⼈人是什什麼? 9
  10. 10. 廣義的 DevOps 是什什麼? 10
  11. 11. DevOps 狹義的 DevOps 是什什麼? Dev Ops Infra 11
  12. 12. 我⼼心中的 Dev ⼈人是什什麼? 等 Ops? 有事 On-call 沒事下班 Coding 12
  13. 13. 我⼼心中的 Ops ⼈人是什什麼? 耗時 有事救火 沒事 On-call 敲指令 裝機器 改什什麼 常忘記 13
  14. 14. 我⼼心中的 DevOps ⼈人是什什麼? 不⽤用 20 分 有事 On-call Coding 管機器 沒事讓 code "⾃自⼰己" 管機器 14
  15. 15. 今天會⽤用到哪些 Tools? Git, GitLab GitLab CI Ansible Docker 15
  16. 16. 今天會⽤用到哪些 License? LGPL MIT GPL Apache 16
  17. 17. 可以⽤用到哪些 Tools 替代? Ansible Chef, Puppet, Slat Docker AWS, Vagrant GitLab CI, Jenkins CI, Drone CI Git, GitLab GitHub 17
  18. 18. Ⅱ. 持續交付是什什麼? 《Continuous Delivery》- https://goo.gl/r9vXFg 持續的、不間斷的、不鬆懈的。 投遞、傳送、交付、交貨。 18
  19. 19. 利利⽤用⾃自動化的 建置、測試與部署 ,完美創造出可信賴 的軟體發佈 - Jez Humble & David Farley 《Continuous Delivery 中⽂文版》- https://goo.gl/SK745B 19
  20. 20. 建置 測試 發佈 部署 ⾃自動化 20
  21. 21. 建置 測試 發佈 部署 ⾃自動化 21
  22. 22. 建置 測試 發佈 部署 ⾃自動化 22
  23. 23. 建置 測試 發佈 部署 ⾃自動化 23
  24. 24. 建置 測試 發佈 部署 ⾃自動化 24
  25. 25. 建置 測試 發佈 部署 ⾃自動化 25
  26. 26. 持續交付和持續部署有什什麼不同? Continuous Delivery Continuous Deployment auto auto manual Build Deploy Test Release auto auto auto Build Deploy Test Release 26
  27. 27. 持續交付和持續部署有什什麼不同? 前者需⼿手動 Release ⾄至 Production,⽽而後者則⾃自動化之。 Continuous Delivery Continuous Deployment auto auto manual Build Deploy Test Release auto auto auto Build Deploy Test Release 27
  28. 28. 導入持續交付的好處是什什麼? 28
  29. 29. Before 需耗數 hr 交付 1 週以上 交付 1 次 ⼈人為失誤 ↑ 發佈 ≒ 救火 29
  30. 30. R&D:我程式寫完了了! 我:等 CD 過了了再說。 Code 還在本機? 推上 Git server? 組態設定對了了? 單元測試過了了? 持續交付過了了? 真 實 案 例例 R&D:我程式寫完了了! 我:(哪裡寫完了了?!) 30
  31. 31. After 交付 < 5 min commit 即交付 ⼈人為失誤 ↓ 即早發現 即早治療 31
  32. 32. R&D:我程式寫完了了! 我:等 CD 過了了再說。 Code 還在本機? 推上 Git server? 組態設定對了了? 單元測試過了了? 持續交付過了了? 真 實 案 例例 32
  33. 33. 案例例分析 提前預演變更更⼯工作,避免 每次變更更都成為例例外⼯工作! 《The Phoenix Project》 Amazon - https://goo.gl/visckK 33
  34. 34. Ⅲ. Ansible 是什什麼? 34
  35. 35. Ansible 取名⾃自知名⼩小說
 《安德的遊戲》,是 虛構的超光速通訊技術。 有了了它我們就可以像 Ender 指揮戰艦般的操控伺服器。 電影海海報 - https://goo.gl/4xftZT 35
  36. 36. Ansible ⾃自 2013 年年創立, 於 2015 年年被 Red Hat 併購。 iThome - http://goo.gl/yJbWtz 36
  37. 37. 在 GitHub 上擁有 25,884 顆星星、3,018 位協作者。 37
  38. 38. Ansible Tower 更更獲選 Linuxpilot 2017 Linux & OSS 最佳解決⽅方案
 ,擁有最佳系統⾃自動化管理理 ⽅方案之名。 Linuxpilot - https://goo.gl/mSxR4E 38
  39. 39. Ansible 和 Tower 有什什麼不同? https://www.ansible.com/blog/red-hat-ansible-automation-engine-vs-tower 39
  40. 40. 我⼼心中的 Ansible 是什什麼? 1. 與 Puppet、SaltStack、Chef 並列列其四。 2. Python like 的組態設定⼯工具
 (Infrastructure as Code)。 40
  41. 41. Python Ansible SaltStack Ruby Chef Puppet vs 41
  42. 42. 我⼼心中的 Ansible 是什什麼? 3. 不需 Agent,有 Python 和 SSH 就可以闖天下! 4. 容易易上⼿手。 5. 社群強⼤大,有商業公司⽀支援。 42
  43. 43. 真實案例例 每週節省 26 hr 的⼯工時。 (6 x 3) x 2 - (5 x 1) x 2 = 26 hr 43
  44. 44. 減少例例⾏行行性⼯工作⼈人⼒力力成本 0 350 700 1,050 1,400 Week Month Year 104 hr 26 hr 1,352 hr 44
  45. 45. 節省企業開⽀支 0 125,000 250,000 375,000 500,000 Week Month Year $35,360 $8,840 $459,680 45
  46. 46. Ⅳ. 怎麼部署 Ansible 環境? 觀念念、安裝、設定 46
  47. 47. Ansible 是怎麼運作的? 透過 inventory 定義 Managed node,並藉由 SSH 與 Python 進⾏行行溝通。 47
  48. 48. 怎麼安裝 Ansible? • 只需在 Control Machine (主控端) 安裝 Ansible; Managed node 則需 Python 2.5+ 和 SSH。 $ sudo apt-get install ansible # Debian, Ubuntu. $ sudo yum install ansible # RHEL, CentOS. $ brew install ansible # Mac OS X (homebrew). $ sudo pip install ansible # Python (pip). 48
  49. 49. 怎麼設定 Ansible? • 藉由 ansible.cfg 來來設定 inventory (host file) 檔案路路徑、 Managed node (被控端) 使⽤用者名稱、SSH ⾦金金鑰 … 等。 $ vim ansible.cfg 1 [defaults] 2 inventory = hosts # 指定 inventory 路路徑。 3 4 remote_user = docker # 遠端登入的使⽤用者名稱。 5 6 #private_key_file = ~/.ssh/id_rsa 7 8 host_key_checking = False # 不檢查 ssh ⾦金金鑰。 49
  50. 50. inventory 是什什麼? • 定義 Managed node (被控端) 位址與群組的主機清冊,
 通常會⽤用來來設定 ssh 或 winrm 的連線資訊。 $ vim hosts 1 # 在同⼀一主機的不同 Port 跑 ssh server。 2 3 [staging] 4 stg.demo.drx.tw ansible_ssh_host=demo.drx.tw ansible_ssh_port=10022 5 6 [production] 7 prd.demo.drx.tw ansible_ssh_host=demo.drx.tw ansible_ssh_port=20022 50
  51. 51. Ⅴ. 怎麼操作 Ansible? Ad-Hoc command, Playbook* (Module) 51
  52. 52. and Playbooks Ad-Hoc commands 52
  53. 53. Ad-Hoc commands 簡短指令 53
  54. 54. ⼀一般的 command line 是什什麼? • 這裡的 command line 為 Linux Shell 底下的指令操作, 以下為 ping 和 echo 的操作的結果。 $ ping localhost PING localhost (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.037 ms --- localhost ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.037/0.037/0.037/0.000 ms $ echo Hello World Hello World 54
  55. 55. 怎麼⽤用 Ad-Hoc commands? ansible <host-pattern> [-m module_name] [-a args] [options] • host-pattern: all, server1, server1:server2, server_group. $ ansible all -m ping localhost | SUCCESS => { "changed": false, "ping": "pong" } $ ansible all -m command -a "echo Hello World" localhost | SUCCESS | rc=0 >> Hello World # 各個 Module 的詳細說明請參參考官⽅方 All Modules ⽂文件。 55
  56. 56. 劇本 Playbooks 56
  57. 57. 57 Playbooks 是什什麼? • 比 Shell Script 更更結構 化的腳本語⾔言,是⼀一鍵 部署的好物。 • 使⽤用 YAML 格式,簡單 易易讀。 Baby Playbook Onesie - http://goo.gl/GKJvXn
  58. 58. 58 Playbooks 是什什麼? • 通常會有 Play, Task, Module 和 handler 等。 • 整合 Jinja2 的 template 系統,可使⽤用變數、判 斷式、迴圈等表達式。 Baby Playbook Onesie - http://goo.gl/GKJvXn
  59. 59. 59 Playbooks 是什什麼? • ⼀一份 Playbook 可以有多個 Play、多個 Task 和多個 Module。 • 此例例⽤用到了了 Play × 1, Task × 2 和 Module × 2 (command, apt)。
 
 
 
 
 
 
 
 
 
 
 
 
 $ vim example.yml 1 --- 2 - name: a sample playbook 3 hosts: all 4 tasks: 5 - name: Hello World 6 command: echo "Hello World" 7 - name: Install Vim 8 become: true 9 apt: 10 name: vim
  60. 60. 60 Playbooks 是什什麼? • 執⾏行行 playbook。 $ ansible-playbook example2.yml PLAY [a sample playbook.] ******************************************* TASK [setup]********************************************************* ok: [stg.demo.drx.tw] TASK [Hello World] ************************************************** changed: [stg.demo.drx.tw] TASK [Install Vim] ************************************************** changed: [stg.demo.drx.tw] => (item=[u'vim']) PLAY RECAP ********************************************************** stg.demo.drx.tw : ok=1 changed=2 unreachable=0 failed=0
  61. 61. 61 • 執⾏行行 playbook。 Playbooks 是什什麼? $ ansible-playbook example2.yml PLAY [a sample playbook.] ******************************************* TASK [setup]********************************************************* ok: [stg.demo.drx.tw] TASK [Hello World] ************************************************** changed: [stg.demo.drx.tw] TASK [Install Vim] ************************************************** changed: [stg.demo.drx.tw] => (item=[u'vim']) PLAY RECAP ********************************************************** stg.demo.drx.tw : ok=1 changed=2 unreachable=0 failed=0 TASK [setup]:被執⾏行行的 managed node 有哪些 PLAY RECAP:總結 (ok / changed / failed )
  62. 62. 62 • 透過動作 (Play) 對特定 Managed node 進⾏行行操控,通常包含 Task 和 Module。 • 此例例⽤用到了了 Play × 1, Task × 2 和 Module × 2 (command, apt)。
 
 
 
 
 
 
 
 
 
 
 
 
 Plays 是什什麼? $ vim example.yml 1 --- 2 - name: a sample playbook 3 hosts: all 4 tasks: 5 - name: Hello World 6 command: echo "Hello World" 7 - name: Install Vim 8 become: true 9 apt: 10 name: vim Play
  63. 63. 63 • 藉由各種不同的模組 (Module)、迴圈和判斷式等組合來來完成各種任務 (Task)。 • 此例例⽤用到了了 Play × 1, Task × 2 和 Module × 2 (command, apt)。
 
 
 
 
 
 
 
 
 
 
 
 
 Tasks 是什什麼? $ vim example.yml 1 --- 2 - name: a sample playbook 3 hosts: all 4 tasks: 5 - name: Hello World 6 command: echo "Hello World" 7 - name: Install Vim 8 become: true 9 apt: 10 name: vim Task 1 Task 2
  64. 64. 64 • 最⼩小的操作⽅方法 (Method),好比 Python 的內建函式。 • 此例例⽤用到了了 Play × 1, Task × 2 和 Module × 2 (command, apt)。
 
 
 
 
 
 
 
 
 
 
 
 
 Modules 是什什麼? $ vim example.yml 1 --- 2 - name: a sample playbook 3 hosts: all 4 tasks: 5 - name: Hello World 6 command: echo "Hello World" 7 - name: Install Vim 8 become: true 9 apt: 10 name: vim Module
  65. 65. 實戰演練 1 65
  66. 66. 練習環境為 Control Machine (Ubuntu 16.04) + Managed node*2 (Ubuntu 16.04)。 透過 Ansible 和 Jupyter 操控 Managed node 66
  67. 67. $ docker run -P -d chusiang/ansible-jupyter:ubuntu-16.04 67
  68. 68. # 建立 Control Machine。 $ docker run -p 8888:8888 -d chusiang/ansible-jupyter:ubuntu-16.04 # 建立 Managed node 1。 $ docker run -p 10022:22 -d chusiang/ansible-managed-node:ubuntu-16.04 # 建立 Managed node 2。 $ docker run -p 20022:22 -d chusiang/ansible-managed-node:ubuntu-16.04 # 查看 Managed node 的 ssh port。 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ...... 68
  69. 69. 怎麼⽤用 Jupyter 上的 Ansible 操控 Managed node? 透過 ansible.cfg 和 inventory 將兩兩者串串接。 69
  70. 70. 70
  71. 71. Ⅵ. GitLab 是什什麼? 71
  72. 72. GitLab 是什什麼? 集 Git Repository、Docker Registry、Issue tracking、Code Review、 CI 和 CD 於⼀一⾝身的現代平台。 72
  73. 73. 回顧 Ansible 和 Tower 的 Ecosystems https://www.ansible.com/blog/red-hat-ansible-automation-engine-vs-tower 73
  74. 74. 今天我們⽤用 GitLab 進⾏行行協作 https://www.ansible.com/blog/red-hat-ansible-automation-engine-vs-tower GITLAB 74
  75. 75. ⽤用 GitLab CI 實作 Pipeline Unit Test Integration Test Delivery DeploymentBuildSyntax Check 75
  76. 76. Ⅶ. Pipeline 是什什麼? 管道 (線)?⽣生產線?傻傻分不清楚?! 76
  77. 77. Ch 5. 部署流⽔水線解析 Ch 6. 建置與部署的腳本化 Ch 7. 提交階段 Ch 8. ⾃自動化驗測試 Ch 9. 非功能性需求測試 Ch 10. 應⽤用程式的部署與發佈 書中的 Pipeline 是什什麼? 《Continuous Delivery》- https://goo.gl/r9vXFg 77
  78. 78. 原始 程式碼 應⽤用程式 設置 提交階段 編譯 單元測試 程式碼分析 組裝 binaries 驗收階段 設置環境 部署 binaries 冒煙測試 驗收測試 UAT 階段 設置環境 部署 binaries 冒煙測試 探索性測試 ⽣生產⼒力力測試階段 設置環境 部署 binaries 冒煙測試 執⾏行行⽣生產⼒力力測試 ⽣生產環境 設置環境 部署 binaries 冒煙測試 版本控制 ⾃自動發佈⾃自動發佈 ⼀一鍵發佈 ⼀一鍵發佈 Binary 儲存庫 binaries metadata 程式碼 應⽤用程式設置 binaries metadata binaries binaries metadata metadata Adapted from “Continuous Delivery” © Dave Farley and Jez Humble 2010 Translated by Chu-Siang Lai 2017 78
  79. 79. 原始 程式碼 應⽤用程式 設置 提交階段 編譯 單元測試 程式碼分析 組裝 binaries 驗收階段 設置環境 部署 binaries 冒煙測試 驗收測試 UAT 階段 設置環境 部署 binaries 冒煙測試 探索性測試 ⽣生產⼒力力測試階段 設置環境 部署 binaries 冒煙測試 執⾏行行⽣生產⼒力力測試 ⽣生產環境 設置環境 部署 binaries 冒煙測試 版本控制 ⾃自動發佈⾃自動發佈 ⼀一鍵發佈 ⼀一鍵發佈 Binary 儲存庫 binaries metadata 程式碼 應⽤用程式設置 binaries metadata binaries binaries metadata metadata Adapted from “Continuous Delivery” © Dave Farley and Jez Humble 2010 Translated by Chu-Siang Lai 2017 79
  80. 80. – Chu-Siang Lai 「Pipeline 好比⽣生產線,導入⾃自動化後 ,⾃自然顯現的軟體發佈流程。」 80
  81. 81. GitLab Pipelines ⼜又是什什麼? 圖像化的軟體發佈⽣生產線。 81
  82. 82. 82
  83. 83. DeployBuild Test Release 83
  84. 84. 84
  85. 85. Ⅷ. 怎麼操作 GitLab CI? 在專案底下建立 .gitlab-ci.yml,當程式碼上傳⾄至 GitLab 即會觸發 GitLab CI。 85
  86. 86. • YAML 語法。 • 此例例⼤大致可分為 stage × 1 和 job × 1。
 
 
 
 
 
 
 
 
 
 
 怎麼寫 .gitlab-ci.yml? $ vim .gitlab-ci.yml 1 stages: 2 - build 3 4 build_binary: 5 image: ubuntu:16.04 6 stage: build 7 script: 8 - chmod 755 penguin-htdocs/DEBIAN 9 - dpkg -b penguin-htdocs 10 tags: 11 - docker 86
  87. 87. 怎麼觸發 GitLab CI? Trigger by git push. 87
  88. 88. 從 Pipelines 看觸發狀狀態。 88
  89. 89. 詳細觸發資訊。 89
  90. 90. Ⅸ. 怎麼⽤用 Ansible 和 GitLab CI 進⾏行行持續交付? 在 GitLab CI,⽤用 Ansible (Docker Containers) 跑 Playbooks 即可。 90
  91. 91. AnsibleGitLab CIDocker 91
  92. 92. 使⽤用者故事 ⾝身為開發團隊的⼀一員,我想要每次提交 時,都會依照不同的分⽀支,⾃自動部署到 不同的環境,並進⾏行行些簡易易的測試,
 因為我們不想程式寫到⼀一半,還要
 下⼀一堆指令,操作⼀一堆機器。 92
  93. 93. Git server GitLab CI server Build Deploy Test Engineer 93 Develop
  94. 94. Customer Git server GitLab CI server Build Deploy Test Release Engineer 94 Master
  95. 95. https://hub.docker.com/r/chusiang/ansible/ 0 95
  96. 96. https://gitlab.com/chusiang/coscup2017-cd-demo 1 96
  97. 97. Build stage 2 TestDeploy ReleaseBuild 97
  98. 98. Deploy, Test and Release stages 3 DeployBuild Test Release 98
  99. 99. Pipelines 4 99
  100. 100. Customer Git server GitLab CI server Build Deploy Test Release Engineer Coding & Git Commit 100
  101. 101. Customer Git server GitLab CI server Build Deploy Test Release Engineer Git Push Coding & Git Commit 101
  102. 102. Customer Git server GitLab CI server Build Deploy Test Release Engineer .gitlab-ci.yml 102
  103. 103. $ vim .gitlab-ci.yml 1 stages: 2 - build 3 - deploy 4 - test 5 - release 6 7 build_binary: 8 image: ubuntu:16.04 9 stage: build 10 script: 11 # For fix bad permissions of control directory on GitLab CI. 12 - chmod 755 penguin-htdocs/DEBIAN 13 14 # build deb. 15 - dpkg -b penguin-htdocs 16 artifacts: 17 expire_in: 1 week 18 paths: 19 - penguin-htdocs.deb 20 tags: 21 - docker 22 5 TestDeploy ReleaseBuild 103
  104. 104. 22 23 deploy_to_dev: 24 image: chusiang/ansible:alpine-3.6 25 stage: deploy 26 script: 27 - ls 28 - cd ansible-playbooks/ 29 - echo "${VAULT_KEY}" > secret.txt 30 - ansible-playbook deploy.yml 31 - rm -f secret.txt 32 only: 33 - master@chusiang/coscup2017-cd-demo 34 - develop@chusiang/coscup2017-cd-demo 35 - tags@chusiang/coscup2017-cd-demo 36 tags: 37 - docker 38 6 TestDeploy ReleaseBuild 104
  105. 105. 38 39 test_dev: 40 image: chusiang/ansible:alpine-3.6 41 stage: test 42 script: 43 - cd ansible-playbooks/ 44 - echo "${VAULT_KEY}" > secret.txt 45 - ansible-playbook test.yml 46 - rm -f secret.txt 47 only: 48 - master@chusiang/coscup2017-cd-demo 49 - develop@chusiang/coscup2017-cd-demo 50 - tags@chusiang/coscup2017-cd-demo 51 tags: 52 - docker 53 7 TestDeploy ReleaseBuild 105
  106. 106. 53 54 release_to_prd: 55 image: chusiang/ansible:alpine-3.6 56 stage: release 57 script: 58 - cd ansible-playbooks/ 59 - echo "${VAULT_KEY}" > secret.txt 60 - ansible-playbook -i production deploy.yml 61 - rm -f secret.txt 62 only: 63 - master@chusiang/coscup2017-cd-demo 64 - tags@chusiang/coscup2017-cd-demo 65 tags: 66 - docker 67 8 TestDeploy ReleaseBuild 106
  107. 107. Customer Git server GitLab CI server Build Deploy Test Release Engineer .gitlab-ci.yml 107
  108. 108. Customer Git server GitLab CI server Build Deploy Test Release Engineer Package deb file 108
  109. 109. Customer Git server GitLab CI server Build Deploy Test Release Engineer Play deploy.yml 109
  110. 110. Customer Git server GitLab CI server Build Deploy Test Release Engineer Play test.yml 110
  111. 111. Customer Git server GitLab CI server Build Deploy Test Release Engineer Play deploy.yml 111
  112. 112. Customer Git server GitLab CI server Build Deploy Test Release Engineer Feedback 112
  113. 113. Customer Git server GitLab CI server Build Deploy Test Release Engineer 113
  114. 114. 火⼒力力展⽰示 Live Demo 114
  115. 115. Demo 環境為 Control Machine (Alpine 3.6) + Managed node*2 (Ubuntu 16.04)。 透過 GitLab CI 和 Ansible 操控 Managed node 115
  116. 116. https://youtu.be/QHim_JxB4ZY 116
  117. 117. 實戰演練 2 117
  118. 118. https://gitlab.com/chusiang/ continuous-delivery- workshop 118
  119. 119. – Chu-Siang Lai 「持續交付是⼀一段⼈人類與企業的進化史。」 119
  120. 120. 我的 Pipeline 進化史 Unit Test Integration Test Delivery DeploymentBuildSyntax Check Unit Test Delivery DeploymentBuildSyntax Check Unit TestDelivery DeploymentBuildSyntax Check Delivery DeploymentBuildSyntax Check BuildSyntax Check Build 120
  121. 121. 今天提到的 DevOps 是什什麼? 121
  122. 122. ※ 此圖出⾃自 Chen Cheng-Wei 的 Effective DevOps 簡報 (https://www.slideshare.net/warfan/effective-devops-78979993)。
  123. 123. • 提到 DevOps 到底在談些什什麼玩意兒? by Chen Cheng-Wei - https://goo.gl/7YTeKD • Continuous Delivery - 敏捷開發的最後⼀一哩路路 by Miles - https://goo.gl/UhpAfG • Ansible Documentation - http://docs.ansible.com/ansible/intro_installation.html • 《Ansible: Up and Running》- https://www.ansible.com/ansible-book • 現代 IT ⼈人⼀一定要知道的 Ansible ⾃自動化組態技巧 / 3e - https://goo.gl/vHyVDt • 現代 IT ⼈人⼀一定要知道的 Ansible ⾃自動化組態技巧系列列⽂文章 - https://goo.gl/EOjs4I • Getting started with GitLab CI | GitLab Documentation - https://goo.gl/NctsCk • Demo project of COSCUP 2017 - https://gitlab.com/chusiang/coscup2017-cd-demo 參參考⽂文獻 123
  124. 124. 圖片來來源 • 《Continuous Delivery》 | Amazon.com - https://www.amazon.com/dp/0321601912 • 《Continuous Delivery 中⽂文版》 | 天瓏網路路書店 - https://goo.gl/SK745B • DevOps Services & Continuous Delivery - https://goo.gl/jswxch • 《The Phoenix Project》 | Amazon.com - https://goo.gl/visckK • Resenha: Harry Potter e a Pedra Filosofal, de J.K. Rowling | Acrobata das Letras
 - https://goo.gl/R34tSA • Brown Book Icon | SoftIcons.com - https://goo.gl/U9U2am • Always Agile Consulting · Introducing Continuous Delivery - https://goo.gl/2Nhtcr • 5 CI/CD Strategies for Faster Software Deployments and Better Automation | snap
 - https://goo.gl/UZPf5e 124
  125. 125. https://www.facebook.com/groups/DevOpsTaiwan/ https://devopstw.club/ DevOps Taiwan https://gitter.im/DevOpsTW/ 125
  126. 126. Ansible Taiwan https://telegram.me/ansible_tw https://github.com/ansible-tw http://ansible.tw 126
  127. 127. http://萍⽔水相逢.tw 127
  128. 128. Q & A 嚴禁拍打餵食 128
  129. 129. END 129

×