Slide 1

Slide 1 text

______________________________ / DevOps ⼈人⼀一定要知道的持續交付技巧 \ \ - Ansible & GitLab CI 實戰演練 / ------------------------------ \ \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || [ chusiang@DigitalOecanHsinchu ~ ] $ cat .profile # Author: 凍仁翔 / [email protected] # Blog: http://note.drx.tw # Modified: 2017-10-15 22:44

Slide 2

Slide 2 text

Ready? 要開始了了! 2

Slide 3

Slide 3 text

Before start .., Today we use 93 Docker containers. 3

Slide 4

Slide 4 text

關於我 • 凍仁翔 (@chusiang_lai)。 • 《凍仁的筆記》站長。 • DevOps Taiwan 志⼯工。 • 2 年年左右的 Ansible 使⽤用經驗。 • 5 年年以上的 IT 營運經驗。 • 第 8 屆 IT 邦幫忙鐵⼈人賽 DevOps 組冠軍。 4

Slide 5

Slide 5 text

Outline • DevOps ⼈人是什什麼? • 持續交付是什什麼? 5

Slide 6

Slide 6 text

Outline • DevOps ⼈人是什什麼? • 持續交付是什什麼? • Ansible 是什什麼? • 怎麼部署 Ansible 環境? • 怎麼操作 Ansible? 6

Slide 7

Slide 7 text

Outline • GitLab 是什什麼? • Pipeline 是什什麼? • 怎麼操作 GitLab CI? 7

Slide 8

Slide 8 text

Outline • GitLab 是什什麼? • Pipeline 是什什麼? • 怎麼操作 GitLab CI? • 怎麼⽤用 Ansible 和 GitLab CI 進⾏行行持續交付? • Q&A 8

Slide 9

Slide 9 text

Ⅰ. DevOps ⼈人是什什麼? 9

Slide 10

Slide 10 text

廣義的 DevOps 是什什麼? 10

Slide 11

Slide 11 text

DevOps 狹義的 DevOps 是什什麼? Dev Ops Infra 11

Slide 12

Slide 12 text

我⼼心中的 Dev ⼈人是什什麼? 等 Ops? 有事 On-call 沒事下班 Coding 12

Slide 13

Slide 13 text

我⼼心中的 Ops ⼈人是什什麼? 耗時 有事救火 沒事 On-call 敲指令 裝機器 改什什麼 常忘記 13

Slide 14

Slide 14 text

我⼼心中的 DevOps ⼈人是什什麼? 不⽤用 20 分 有事 On-call Coding 管機器 沒事讓 code "⾃自⼰己" 管機器 14

Slide 15

Slide 15 text

今天會⽤用到哪些 Tools? Git, GitLab GitLab CI Ansible Docker 15

Slide 16

Slide 16 text

今天會⽤用到哪些 License? LGPL MIT GPL Apache 16

Slide 17

Slide 17 text

可以⽤用到哪些 Tools 替代? Ansible Chef, Puppet, Slat Docker AWS, Vagrant GitLab CI, Jenkins CI, Drone CI Git, GitLab GitHub 17

Slide 18

Slide 18 text

Ⅱ. 持續交付是什什麼? 《Continuous Delivery》- https://goo.gl/r9vXFg 持續的、不間斷的、不鬆懈的。 投遞、傳送、交付、交貨。 18

Slide 19

Slide 19 text

利利⽤用⾃自動化的 建置、測試與部署 ,完美創造出可信賴 的軟體發佈 - Jez Humble & David Farley 《Continuous Delivery 中⽂文版》- https://goo.gl/SK745B 19

Slide 20

Slide 20 text

建置 測試 發佈 部署 ⾃自動化 20

Slide 21

Slide 21 text

建置 測試 發佈 部署 ⾃自動化 21

Slide 22

Slide 22 text

建置 測試 發佈 部署 ⾃自動化 22

Slide 23

Slide 23 text

建置 測試 發佈 部署 ⾃自動化 23

Slide 24

Slide 24 text

建置 測試 發佈 部署 ⾃自動化 24

Slide 25

Slide 25 text

建置 測試 發佈 部署 ⾃自動化 25

Slide 26

Slide 26 text

持續交付和持續部署有什什麼不同? Continuous Delivery Continuous Deployment auto auto manual Build Deploy Test Release auto auto auto Build Deploy Test Release 26

Slide 27

Slide 27 text

持續交付和持續部署有什什麼不同? 前者需⼿手動 Release ⾄至 Production,⽽而後者則⾃自動化之。 Continuous Delivery Continuous Deployment auto auto manual Build Deploy Test Release auto auto auto Build Deploy Test Release 27

Slide 28

Slide 28 text

導入持續交付的好處是什什麼? 28

Slide 29

Slide 29 text

Before 需耗數 hr 交付 1 週以上 交付 1 次 ⼈人為失誤 ↑ 發佈 ≒ 救火 29

Slide 30

Slide 30 text

R&D:我程式寫完了了! 我:等 CD 過了了再說。 Code 還在本機? 推上 Git server? 組態設定對了了? 單元測試過了了? 持續交付過了了? 真 實 案 例例 R&D:我程式寫完了了! 我:(哪裡寫完了了?!) 30

Slide 31

Slide 31 text

After 交付 < 5 min commit 即交付 ⼈人為失誤 ↓ 即早發現 即早治療 31

Slide 32

Slide 32 text

R&D:我程式寫完了了! 我:等 CD 過了了再說。 Code 還在本機? 推上 Git server? 組態設定對了了? 單元測試過了了? 持續交付過了了? 真 實 案 例例 32

Slide 33

Slide 33 text

案例例分析 提前預演變更更⼯工作,避免 每次變更更都成為例例外⼯工作! 《The Phoenix Project》 Amazon - https://goo.gl/visckK 33

Slide 34

Slide 34 text

Ⅲ. Ansible 是什什麼? 34

Slide 35

Slide 35 text

Ansible 取名⾃自知名⼩小說
 《安德的遊戲》,是 虛構的超光速通訊技術。 有了了它我們就可以像 Ender 指揮戰艦般的操控伺服器。 電影海海報 - https://goo.gl/4xftZT 35

Slide 36

Slide 36 text

Ansible ⾃自 2013 年年創立, 於 2015 年年被 Red Hat 併購。 iThome - http://goo.gl/yJbWtz 36

Slide 37

Slide 37 text

在 GitHub 上擁有 25,884 顆星星、3,018 位協作者。 37

Slide 38

Slide 38 text

Ansible Tower 更更獲選 Linuxpilot 2017 Linux & OSS 最佳解決⽅方案
 ,擁有最佳系統⾃自動化管理理 ⽅方案之名。 Linuxpilot - https://goo.gl/mSxR4E 38

Slide 39

Slide 39 text

Ansible 和 Tower 有什什麼不同? https://www.ansible.com/blog/red-hat-ansible-automation-engine-vs-tower 39

Slide 40

Slide 40 text

我⼼心中的 Ansible 是什什麼? 1. 與 Puppet、SaltStack、Chef 並列列其四。 2. Python like 的組態設定⼯工具
 (Infrastructure as Code)。 40

Slide 41

Slide 41 text

Python Ansible SaltStack Ruby Chef Puppet vs 41

Slide 42

Slide 42 text

我⼼心中的 Ansible 是什什麼? 3. 不需 Agent,有 Python 和 SSH 就可以闖天下! 4. 容易易上⼿手。 5. 社群強⼤大,有商業公司⽀支援。 42

Slide 43

Slide 43 text

真實案例例 每週節省 26 hr 的⼯工時。 (6 x 3) x 2 - (5 x 1) x 2 = 26 hr 43

Slide 44

Slide 44 text

減少例例⾏行行性⼯工作⼈人⼒力力成本 0 350 700 1,050 1,400 Week Month Year 104 hr 26 hr 1,352 hr 44

Slide 45

Slide 45 text

節省企業開⽀支 0 125,000 250,000 375,000 500,000 Week Month Year $35,360 $8,840 $459,680 45

Slide 46

Slide 46 text

Ⅳ. 怎麼部署 Ansible 環境? 觀念念、安裝、設定 46

Slide 47

Slide 47 text

Ansible 是怎麼運作的? 透過 inventory 定義 Managed node,並藉由 SSH 與 Python 進⾏行行溝通。 47

Slide 48

Slide 48 text

怎麼安裝 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

Slide 49

Slide 49 text

怎麼設定 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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

Ⅴ. 怎麼操作 Ansible? Ad-Hoc command, Playbook* (Module) 51

Slide 52

Slide 52 text

and Playbooks Ad-Hoc commands 52

Slide 53

Slide 53 text

Ad-Hoc commands 簡短指令 53

Slide 54

Slide 54 text

⼀一般的 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

Slide 55

Slide 55 text

怎麼⽤用 Ad-Hoc commands? ansible [-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

Slide 56

Slide 56 text

劇本 Playbooks 56

Slide 57

Slide 57 text

57 Playbooks 是什什麼? • 比 Shell Script 更更結構 化的腳本語⾔言,是⼀一鍵 部署的好物。 • 使⽤用 YAML 格式,簡單 易易讀。 Baby Playbook Onesie - http://goo.gl/GKJvXn

Slide 58

Slide 58 text

58 Playbooks 是什什麼? • 通常會有 Play, Task, Module 和 handler 等。 • 整合 Jinja2 的 template 系統,可使⽤用變數、判 斷式、迴圈等表達式。 Baby Playbook Onesie - http://goo.gl/GKJvXn

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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 )

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

實戰演練 1 65

Slide 66

Slide 66 text

練習環境為 Control Machine (Ubuntu 16.04) + Managed node*2 (Ubuntu 16.04)。 透過 Ansible 和 Jupyter 操控 Managed node 66

Slide 67

Slide 67 text

$ docker run -P -d \ chusiang/ansible-jupyter:ubuntu-16.04 67

Slide 68

Slide 68 text

# 建立 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

Slide 69

Slide 69 text

怎麼⽤用 Jupyter 上的 Ansible 操控 Managed node? 透過 ansible.cfg 和 inventory 將兩兩者串串接。 69

Slide 70

Slide 70 text

70

Slide 71

Slide 71 text

Ⅵ. GitLab 是什什麼? 71

Slide 72

Slide 72 text

GitLab 是什什麼? 集 Git Repository、Docker Registry、Issue tracking、Code Review、 CI 和 CD 於⼀一⾝身的現代平台。 72

Slide 73

Slide 73 text

回顧 Ansible 和 Tower 的 Ecosystems https://www.ansible.com/blog/red-hat-ansible-automation-engine-vs-tower 73

Slide 74

Slide 74 text

今天我們⽤用 GitLab 進⾏行行協作 https://www.ansible.com/blog/red-hat-ansible-automation-engine-vs-tower GITLAB 74

Slide 75

Slide 75 text

⽤用 GitLab CI 實作 Pipeline Unit Test Integration Test Delivery Deployment Build Syntax Check 75

Slide 76

Slide 76 text

Ⅶ. Pipeline 是什什麼? 管道 (線)?⽣生產線?傻傻分不清楚?! 76

Slide 77

Slide 77 text

Ch 5. 部署流⽔水線解析 Ch 6. 建置與部署的腳本化 Ch 7. 提交階段 Ch 8. ⾃自動化驗測試 Ch 9. 非功能性需求測試 Ch 10. 應⽤用程式的部署與發佈 書中的 Pipeline 是什什麼? 《Continuous Delivery》- https://goo.gl/r9vXFg 77

Slide 78

Slide 78 text

原始 程式碼 應⽤用程式 設置 提交階段 編譯 單元測試 程式碼分析 組裝 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

Slide 79

Slide 79 text

原始 程式碼 應⽤用程式 設置 提交階段 編譯 單元測試 程式碼分析 組裝 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

Slide 80

Slide 80 text

– Chu-Siang Lai 「Pipeline 好比⽣生產線,導入⾃自動化後 ,⾃自然顯現的軟體發佈流程。」 80

Slide 81

Slide 81 text

GitLab Pipelines ⼜又是什什麼? 圖像化的軟體發佈⽣生產線。 81

Slide 82

Slide 82 text

82

Slide 83

Slide 83 text

Deploy Build Test Release 83

Slide 84

Slide 84 text

84

Slide 85

Slide 85 text

Ⅷ. 怎麼操作 GitLab CI? 在專案底下建立 .gitlab-ci.yml,當程式碼上傳⾄至 GitLab 即會觸發 GitLab CI。 85

Slide 86

Slide 86 text

• 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

Slide 87

Slide 87 text

怎麼觸發 GitLab CI? Trigger by git push. 87

Slide 88

Slide 88 text

從 Pipelines 看觸發狀狀態。 88

Slide 89

Slide 89 text

詳細觸發資訊。 89

Slide 90

Slide 90 text

Ⅸ. 怎麼⽤用 Ansible 和 GitLab CI 進⾏行行持續交付? 在 GitLab CI,⽤用 Ansible (Docker Containers) 跑 Playbooks 即可。 90

Slide 91

Slide 91 text

Ansible GitLab CI Docker 91

Slide 92

Slide 92 text

使⽤用者故事 ⾝身為開發團隊的⼀一員,我想要每次提交 時,都會依照不同的分⽀支,⾃自動部署到 不同的環境,並進⾏行行些簡易易的測試,
 因為我們不想程式寫到⼀一半,還要
 下⼀一堆指令,操作⼀一堆機器。 92

Slide 93

Slide 93 text

Git server GitLab CI server Build Deploy Test Engineer 93 Develop

Slide 94

Slide 94 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer 94 Master

Slide 95

Slide 95 text

https://hub.docker.com/r/chusiang/ansible/ 0 95

Slide 96

Slide 96 text

https://gitlab.com/chusiang/coscup2017-cd-demo 1 96

Slide 97

Slide 97 text

Build stage 2 Test Deploy Release Build 97

Slide 98

Slide 98 text

Deploy, Test and Release stages 3 Deploy Build Test Release 98

Slide 99

Slide 99 text

Pipelines 4 99

Slide 100

Slide 100 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer Coding & Git Commit 100

Slide 101

Slide 101 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer Git Push Coding & Git Commit 101

Slide 102

Slide 102 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer .gitlab-ci.yml 102

Slide 103

Slide 103 text

$ 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 Test Deploy Release Build 103

Slide 104

Slide 104 text

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 Test Deploy Release Build 104

Slide 105

Slide 105 text

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 Test Deploy Release Build 105

Slide 106

Slide 106 text

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 Test Deploy Release Build 106

Slide 107

Slide 107 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer .gitlab-ci.yml 107

Slide 108

Slide 108 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer Package deb file 108

Slide 109

Slide 109 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer Play deploy.yml 109

Slide 110

Slide 110 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer Play test.yml 110

Slide 111

Slide 111 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer Play deploy.yml 111

Slide 112

Slide 112 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer Feedback 112

Slide 113

Slide 113 text

Customer Git server GitLab CI server Build Deploy Test Release Engineer 113

Slide 114

Slide 114 text

火⼒力力展⽰示 Live Demo 114

Slide 115

Slide 115 text

Demo 環境為 Control Machine (Alpine 3.6) + Managed node*2 (Ubuntu 16.04)。 透過 GitLab CI 和 Ansible 操控 Managed node 115

Slide 116

Slide 116 text

https:/ /youtu.be/QHim_JxB4ZY 116

Slide 117

Slide 117 text

實戰演練 2 117

Slide 118

Slide 118 text

https://gitlab.com/chusiang/ continuous-delivery- workshop 118

Slide 119

Slide 119 text

– Chu-Siang Lai 「持續交付是⼀一段⼈人類與企業的進化史。」 119

Slide 120

Slide 120 text

我的 Pipeline 進化史 Unit Test Integration Test Delivery Deployment Build Syntax Check Unit Test Delivery Deployment Build Syntax Check Unit Test Delivery Deployment Build Syntax Check Delivery Deployment Build Syntax Check Build Syntax Check Build 120

Slide 121

Slide 121 text

今天提到的 DevOps 是什什麼? 121

Slide 122

Slide 122 text

※ 此圖出⾃自 Chen Cheng-Wei 的 Effective DevOps 簡報 (https://www.slideshare.net/warfan/effective-devops-78979993)。

Slide 123

Slide 123 text

• 提到 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

Slide 124

Slide 124 text

圖片來來源 • 《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

Slide 125

Slide 125 text

https://www.facebook.com/groups/DevOpsTaiwan/ https://devopstw.club/ DevOps Taiwan https://gitter.im/DevOpsTW/ 125

Slide 126

Slide 126 text

Ansible Taiwan https://telegram.me/ansible_tw https://github.com/ansible-tw http://ansible.tw 126

Slide 127

Slide 127 text

http://萍⽔水相逢.tw 127

Slide 128

Slide 128 text

Q & A 嚴禁拍打餵食 128

Slide 129

Slide 129 text

END 129