SlideShare a Scribd company logo
[ chusiang@devops-taiwan ~ ] $ cat .profile
# Author: 凍仁翔 / chusiang@drx.tw
# Blog: http://note.drx.tw
# Modified: 2017-08-19 12:34
2/e
坐穩囉
要開始了了!
2
關於我
• 凍仁翔 (@chusiang_lai)。
• 《凍仁的筆記》作者。
• DevOps Taiwan 志⼯工。
• 1 年年以上的 Ansible 使⽤用經驗。
• 5 年年以上的 IT 維運經驗。
• 第 8 屆 IT 邦幫忙鐵⼈人賽
DevOps 組冠軍。
3
Outline
I. DevOps ⼈人是什什麼?
II. 持續交付是什什麼?
Outline
I. DevOps ⼈人是什什麼?
II. 持續交付是什什麼?
III. Ansible 是什什麼?
IV. 怎麼部署 Ansible 環境?
V. 怎麼操作 Ansible?
Outline
VI. GitLab CI 是什什麼?
VII. Pipeline 是什什麼?
VIII.怎麼操作 GitLab CI?
Outline
VI. GitLab CI 是什什麼?
VII. Pipeline 是什什麼?
VIII.怎麼操作 GitLab CI?
IX. 怎麼⽤用 Ansible 和 GitLab CI 進⾏行行持續交付?
X. Q&A
Ⅰ. DevOps ⼈人是什什麼?
8
前⼈人眼中的 DevOps 是什什麼?
Agile Tour 台中 by 正瑋 x Mina @ 2017.01.14
10
Agile Tour 台中 by 正瑋 x Mina @ 2017.01.14
11
我⼼心中的 Dev ⼈人是什什麼?
等 Ops?
有事 On-call 沒事下班
Coding
12
我⼼心中的 Ops ⼈人是什什麼?
耗時
有事救火 沒事 On-call
敲指令 裝機器

改什什麼 常忘記
13
我⼼心中的 DevOps ⼈人是什什麼?
不⽤用 20 分
有事 On-call
沒事讓 code

"⾃自⼰己" 管機器
Coding

管機器
14
今天會⽤用到哪些 Tools?
今天會⽤用到哪些 Tools?
Git, GitLab
GitLab CI Docker
Ansible
16
今⽇日⽤用到哪些 License?
LGPL
MIT Apache
GPL
17
可以⽤用到哪些 Tools 替代?
Git, GitLab
GitHub
GitLab CI
Jenkins CI
Docker
Vagrant
Ansible
Chef
18
Ⅱ. 持續交付是什什麼?
19
可以讓我們提早下班的玩意兒!
持續交付是什什麼?
《Continuous Delivery》- https://goo.gl/r9vXFg
持續的、不間斷的、不鬆懈的。
投遞、傳送、交付、交貨。
20
《Continuous Delivery 中⽂文版》- https://goo.gl/SK745B
利利⽤用⾃自動化的
建置、測試與部署
,完美創造出可信賴
的軟體發佈
- Jez Humble & David Farley
21
建置
測試
發佈
部署
⾃自動化
建置
測試
發佈
部署
⾃自動化
建置
測試
發佈
部署
⾃自動化
建置
測試
發佈
部署
⾃自動化
建置
測試
發佈
部署
⾃自動化
建置
測試
發佈
部署
⾃自動化
持續交付和持續部署有什什麼不同?
前者需⼿手動 Release ⾄至 Production,⽽而後者則⾃自動化之。
28
Continuous Delivery
Continuous Deployment
auto auto manual
Build Deploy Test Release
auto auto auto
Build Deploy Test Release
導入持續交付的好處是什什麼?
Before
需耗數 hr 交付
1 週以上

交付 1 次
發佈 ≒ 救火
⼈人為失誤 ↑
30
Code 還在本機?
推上 Git server?
組態設定對了了?
單元測試過了了?
持續交付過了了?
真 實 案 例例
R&D:我程式寫完了了!
我:(哪裡寫完了了?!)
After
交付 < 5 min
commit

即交付
即早發現

即早治療
⼈人為失誤 ↓
32
R&D:我程式寫完了了! 我:等 CD 過了了再說。
Code 還在本機?
推上 Git server?
組態設定對了了?
單元測試過了了?
持續交付過了了?
真 實 案 例例
案例例分析
提前預演變更更⼯工作,避免
每次變更更都變成例例外⼯工作!
《The Phoenix Project》
Amazon - https://goo.gl/visckK
Ⅲ. Ansible 是什什麼?
35
Ansible 取名⾃自知名⼩小說

《安德的遊戲》,是
虛構的超光速通訊裝置。
有了了它我們就可以像 Ender

指揮戰艦般的操控伺服器。
電影海海報 - https://goo.gl/4xftZT
36
Ansible ⾃自 2013 年年創立,

於 2015 年年被 Red Hat 併購。
iThome - http://goo.gl/yJbWtz
37
Ansible Tower

更更獲選 Linuxpilot 2017

Linux & OSS 最佳解決⽅方案,
擁有最佳系統⾃自動化管理理⽅方案

之名。
Linuxpilot - https://goo.gl/mSxR4E
38
我⼼心中的 Ansible 是什什麼?
1. 與 Puppet、SaltStack、Chef 並列列其四。
2. Python like 的組態設定⼯工具

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

通常會⽤用來來設定 ssh 或 winrm 的連線資訊。
51
$ 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
Ⅴ. 怎麼操作 Ansible?
52
Ad-Hoc command, Playbook* (Module)
and
53
Playbooks
Ad-Hoc
commands
Ad-Hoc
commands
簡短指令
⼀一般的 command line 是什什麼?
• 這裡的 command line 為 Linux Shell 底下的指令操作,
以下為 ping 和 echo 的操作的結果。
55
$ 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
怎麼⽤用 Ad-Hoc commands?
ansible <host-pattern> [-m module_name] [-a args] [options]
• host-pattern: all, server1, server1:server2, server_group.
56
$ 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 ⽂文件。
劇本
Playbooks
Playbooks 是什什麼?
• 比 Shell Script 更更結構
化的腳本語⾔言,是⼀一鍵
部署的好物。
• 使⽤用 YAML 格式,簡單
易易讀。
Baby Playbook Onesie - http://goo.gl/GKJvXn
58
Playbooks 是什什麼?
• 通常會有 Play, Task,
Module 和 handler 等。
• 整合 Jinja2 的 template
系統,可使⽤用變數、判
斷式、迴圈等表達式。
Baby Playbook Onesie - http://goo.gl/GKJvXn
59
Playbooks 是什什麼?
• ⼀一份 Playbook 可以有多個 Play、多個 Task 和多個 Module。
• 此例例⽤用到了了 Play × 1, Task × 2 和 Module × 2 (command, apt)。

























60
$ 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
Playbooks 是什什麼?
• 執⾏行行 playbook。
61
$ 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
• 執⾏行行 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
Playbooks 是什什麼?
62
TASK [setup]:被執⾏行行的 managed node 有哪些
PLAY RECAP:總結 (ok / changed / failed )
• 透過動作 (Play) 對特定 Managed node 進⾏行行操控,通常包含 Task 和 Module。
• 此例例⽤用到了了 Play × 1, Task × 2 和 Module × 2 (command, apt)。

























Plays 是什什麼?
63
$ 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
• 藉由各種不同的模組 (Module)、迴圈和判斷式等組合來來完成各種任務 (Task)。
• 此例例⽤用到了了 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
Tasks 是什什麼?
64
Task 1
Task 2
• 最⼩小的操作⽅方法 (Method),好比 Python 的內建函式。
• 此例例⽤用到了了 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
Modules 是什什麼?
65
Module
Ⅵ. GitLab CI 是什什麼?
66
GitLab 是什什麼?
集 Git Repository、Docker Registry、Issue tracking、Code Review、
CI 和 CD 於⼀一⾝身的現代平台。
GitLab CI 可以做什什麼?
Unit Test Integration Test Delivery DeploymentBuildSyntax Check
Ⅶ. Pipeline 是什什麼?
69
管道 (線)?⽣生產線?傻傻分不清楚?!
Ch 5. 部署流⽔水線解析
Ch 6. 建置與部署的腳本化
Ch 7. 提交階段
Ch 8. ⾃自動化驗測試
Ch 9. 非功能性需求測試
Ch 10. 應⽤用程式的部署與發佈
書中的 Pipeline 是什什麼?
《Continuous Delivery》- https://goo.gl/r9vXFg
70
原始
程式碼
應⽤用程式
設置
提交階段
編譯
單元測試
程式碼分析
組裝 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
原始
程式碼
應⽤用程式
設置
提交階段
編譯
單元測試
程式碼分析
組裝 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
– Chu-Siang Lai
「Pipeline 好比⽣生產線,導入⾃自動化後
,⾃自然顯現的軟體發佈流程。」
GitLab Pipelines ⼜又是什什麼?
圖像化的軟體發佈⽣生產線。
User Story
1. commit 即交付。
2. 收到 develop commit 後,即部署⾄至 stg.demo.drx.tw

,並進⾏行行測試。
3. 收到 master commit 後,即部署到 prd.demo.drx.tw

,但需先部署⾄至 stg.demo.drx.tw,並通過測試。
Continuous Delivery with Ansible x GitLab CI (2e)
Continuous Delivery with Ansible x GitLab CI (2e)
Continuous Delivery with Ansible x GitLab CI (2e)
Ⅷ. 怎麼操作 GitLab CI?
79
在專案底下建立 .gitlab-ci.yml,當程式碼上傳⾄至 GitLab 即會觸發 GitLab CI。
• 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
怎麼觸發 GitLab CI?
81
Trigger by git push.
從 Pipelines 看觸發狀狀態。
詳細觸發資訊。
Ⅸ. 怎麼⽤用 Ansible 和 GitLab CI 進⾏行行持續交付?
84
在 GitLab CI,⽤用 Ansible (Docker Containers) 跑 Playbooks 即可。
85
AnsibleGitLab CIDocker
https://hub.docker.com/r/chusiang/ansible/
0
$ 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 87
1
TestDelivery DeploymentBuild
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
88
2
TestDelivery DeploymentBuild
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
89
3
TestDelivery DeploymentBuild
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
90
4
TestDelivery DeploymentBuild
DeliveryBuild Test Deployment
1. package deb file.
91
DeliveryBuild Test Deployment
2. $ ansible-playbook deploy.yml
1. package deb file.
92
DeliveryBuild Test Deployment
2. $ ansible-playbook deploy.yml
1. package deb file.
3. $ ansible-playbook test.yml
93
DeliveryBuild Test Deployment
2. $ ansible-playbook deploy.yml
1. package deb file.
3. $ ansible-playbook test.yml
4. $ ansible-playbook 

-i production deploy.yml
94
https://gitlab.com/chusiang/coscup2017-cd-demo
5
Build stage
6
TestDelivery DeploymentBuild
Deploy, Test and
Release stages
7
DeliveryBuild Test Deployment
Pipelines
8
火⼒力力展⽰示
Live Demo
99
Demo 環境為 Control Machine (Alpine 3.6) + Managed node*2 (Ubuntu 16.04)。
透過 GitLab CI 和 Ansible 操控 Managed node
100
https://youtu.be/QHim_JxB4ZY
– Chu-Siang Lai
「持續交付是⼀一段⼈人類與企業的進化史。」
我的 Pipeline 進化史
Unit Test Integration Test Delivery DeploymentBuildSyntax Check
Unit Test Delivery DeploymentBuildSyntax Check
Unit TestDelivery DeploymentBuildSyntax Check
Delivery DeploymentBuildSyntax Check
BuildSyntax Check
Build
https://devopsdays.tw/
DevOps Taiwan
https://www.facebook.com/groups/DevOpsTaiwan/
https://devopstaiwan.slack.com/
https://gitter.im/DevOpsTW/
Ansible Taiwan
https://telegram.me/ansible_tw
https://github.com/ansible-tw
http://ansible.tw
http://萍⽔水相逢.tw
107
Q & A
嚴禁拍打餵食
108
END
Continuous Delivery with Ansible x GitLab CI (2e)
Continuous Delivery with Ansible x GitLab CI (2e)

More Related Content

What's hot

Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
Bo-Yi Wu
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧
Chu-Siang Lai
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
Wen-Tien Chang
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Chu-Siang Lai
 
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
scott liao
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
Bo-Yi Wu
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用
謝 宗穎
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
Shengyou Fan
 
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人
Fred Chien
 
Vagrant教學
Vagrant教學Vagrant教學
Vagrant教學
Onnie Fong
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南
Shengyou Fan
 
20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門
azole Lai
 
AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginner
azole Lai
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
Paul Chao
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTree
Chu-Siang Lai
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
Na Lee
 
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
Bo-Yi Wu
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
Miles Chou
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
Bo-Yi Wu
 

What's hot (20)

Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
 
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人
 
Vagrant教學
Vagrant教學Vagrant教學
Vagrant教學
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南
 
20150604 docker 新手入門
20150604 docker 新手入門20150604 docker 新手入門
20150604 docker 新手入門
 
AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginner
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTree
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
 
Phpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniterPhpconf 2011 introduction_to_codeigniter
Phpconf 2011 introduction_to_codeigniter
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 

Similar to Continuous Delivery with Ansible x GitLab CI (2e)

Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
勇浩 赖
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
Max Lai
 
FHIR Server 安裝與使用
FHIR Server 安裝與使用FHIR Server 安裝與使用
FHIR Server 安裝與使用
Lorex L. Yang
 
Ansible 101
Ansible 101Ansible 101
Ansible 101
YI-CHING WU
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922
Earou Huang
 
Django step0
Django step0Django step0
Django step0
永昇 陳
 
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?
Andy Dai
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
Philip Zheng
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略
Lucien Lee
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
netdbncku
 
Wxpython In Action
Wxpython In ActionWxpython In Action
Wxpython In Action
智锋 范
 
02.uliweb开发入门
02.uliweb开发入门02.uliweb开发入门
02.uliweb开发入门
modou li
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
czzz1
 
[students AI workshop] Pytorch
[students AI workshop]  Pytorch[students AI workshop]  Pytorch
[students AI workshop] Pytorch
Tzu-Wei Huang
 
Is it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationIs it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automation
Chu-Siang Lai
 
為什麼 App 卡卡的
為什麼 App 卡卡的為什麼 App 卡卡的
為什麼 App 卡卡的
鈺翔 林
 
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CI
Zero Huang
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
Wei-Yuan Chang
 
用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验
Leo Zhou
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless
Rick Hwang
 

Similar to Continuous Delivery with Ansible x GitLab CI (2e) (20)

Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
FHIR Server 安裝與使用
FHIR Server 安裝與使用FHIR Server 安裝與使用
FHIR Server 安裝與使用
 
Ansible 101
Ansible 101Ansible 101
Ansible 101
 
CICD Workshop 20180922
CICD Workshop 20180922CICD Workshop 20180922
CICD Workshop 20180922
 
Django step0
Django step0Django step0
Django step0
 
該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?該怎麼樣(認真的)部署你的 Python Web 應用程式?
該怎麼樣(認真的)部署你的 Python Web 應用程式?
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
 
Wxpython In Action
Wxpython In ActionWxpython In Action
Wxpython In Action
 
02.uliweb开发入门
02.uliweb开发入门02.uliweb开发入门
02.uliweb开发入门
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
 
[students AI workshop] Pytorch
[students AI workshop]  Pytorch[students AI workshop]  Pytorch
[students AI workshop] Pytorch
 
Is it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationIs it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automation
 
為什麼 App 卡卡的
為什麼 App 卡卡的為什麼 App 卡卡的
為什麼 App 卡卡的
 
Bitbucket pipeline CI
Bitbucket pipeline CIBitbucket pipeline CI
Bitbucket pipeline CI
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
 
用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless
 

More from Chu-Siang Lai

My DevOps Tour 2.3
My DevOps Tour 2.3My DevOps Tour 2.3
My DevOps Tour 2.3
Chu-Siang Lai
 
The System Engineer in Agile Team
The System Engineer in Agile TeamThe System Engineer in Agile Team
The System Engineer in Agile Team
Chu-Siang Lai
 
My DevOps Tour 0.1
My DevOps Tour 0.1My DevOps Tour 0.1
My DevOps Tour 0.1
Chu-Siang Lai
 
See the Agile from Mindset
See the Agile from MindsetSee the Agile from Mindset
See the Agile from Mindset
Chu-Siang Lai
 
Writing skills for Information Technology
Writing skills for Information TechnologyWriting skills for Information Technology
Writing skills for Information Technology
Chu-Siang Lai
 
My DevOps Tour 1.0
My DevOps Tour 1.0My DevOps Tour 1.0
My DevOps Tour 1.0
Chu-Siang Lai
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Chu-Siang Lai
 
Automate with Ansible basic (2/e, English)
Automate with Ansible basic (2/e, English)Automate with Ansible basic (2/e, English)
Automate with Ansible basic (2/e, English)
Chu-Siang Lai
 
helloTux 2012
helloTux 2012helloTux 2012
helloTux 2012
Chu-Siang Lai
 
Unity & Googlizer
Unity & GooglizerUnity & Googlizer
Unity & Googlizer
Chu-Siang Lai
 
使用 Multi-sites 技術快速建置多 Drupal 網站
使用 Multi-sites 技術快速建置多 Drupal 網站使用 Multi-sites 技術快速建置多 Drupal 網站
使用 Multi-sites 技術快速建置多 Drupal 網站
Chu-Siang Lai
 
歡迎來到 Ubuntu 9.10 Release Party (台中)
歡迎來到 Ubuntu 9.10 Release Party (台中)歡迎來到 Ubuntu 9.10 Release Party (台中)
歡迎來到 Ubuntu 9.10 Release Party (台中)
Chu-Siang Lai
 
無痛入門 Chromecast
無痛入門 Chromecast無痛入門 Chromecast
無痛入門 Chromecast
Chu-Siang Lai
 
Ubuntu 藍星侵略計劃
Ubuntu 藍星侵略計劃Ubuntu 藍星侵略計劃
Ubuntu 藍星侵略計劃
Chu-Siang Lai
 
Intro of Network, WiFi on Ubuntu
Intro of Network, WiFi on UbuntuIntro of Network, WiFi on Ubuntu
Intro of Network, WiFi on Ubuntu
Chu-Siang Lai
 

More from Chu-Siang Lai (15)

My DevOps Tour 2.3
My DevOps Tour 2.3My DevOps Tour 2.3
My DevOps Tour 2.3
 
The System Engineer in Agile Team
The System Engineer in Agile TeamThe System Engineer in Agile Team
The System Engineer in Agile Team
 
My DevOps Tour 0.1
My DevOps Tour 0.1My DevOps Tour 0.1
My DevOps Tour 0.1
 
See the Agile from Mindset
See the Agile from MindsetSee the Agile from Mindset
See the Agile from Mindset
 
Writing skills for Information Technology
Writing skills for Information TechnologyWriting skills for Information Technology
Writing skills for Information Technology
 
My DevOps Tour 1.0
My DevOps Tour 1.0My DevOps Tour 1.0
My DevOps Tour 1.0
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
 
Automate with Ansible basic (2/e, English)
Automate with Ansible basic (2/e, English)Automate with Ansible basic (2/e, English)
Automate with Ansible basic (2/e, English)
 
helloTux 2012
helloTux 2012helloTux 2012
helloTux 2012
 
Unity & Googlizer
Unity & GooglizerUnity & Googlizer
Unity & Googlizer
 
使用 Multi-sites 技術快速建置多 Drupal 網站
使用 Multi-sites 技術快速建置多 Drupal 網站使用 Multi-sites 技術快速建置多 Drupal 網站
使用 Multi-sites 技術快速建置多 Drupal 網站
 
歡迎來到 Ubuntu 9.10 Release Party (台中)
歡迎來到 Ubuntu 9.10 Release Party (台中)歡迎來到 Ubuntu 9.10 Release Party (台中)
歡迎來到 Ubuntu 9.10 Release Party (台中)
 
無痛入門 Chromecast
無痛入門 Chromecast無痛入門 Chromecast
無痛入門 Chromecast
 
Ubuntu 藍星侵略計劃
Ubuntu 藍星侵略計劃Ubuntu 藍星侵略計劃
Ubuntu 藍星侵略計劃
 
Intro of Network, WiFi on Ubuntu
Intro of Network, WiFi on UbuntuIntro of Network, WiFi on Ubuntu
Intro of Network, WiFi on Ubuntu
 

Recently uploaded

DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
Edward Kuo
 
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
Yen-lung Tsai
 
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
Yen-lung Tsai
 
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
Yen-lung Tsai
 
下载软件看app观看【网芷:ht28.co】带反差小姨子开房>>>[网趾:ht28.co】]<<<
下载软件看app观看【网芷:ht28.co】带反差小姨子开房>>>[网趾:ht28.co】]<<<下载软件看app观看【网芷:ht28.co】带反差小姨子开房>>>[网趾:ht28.co】]<<<
下载软件看app观看【网芷:ht28.co】带反差小姨子开房>>>[网趾:ht28.co】]<<<
arrogancepchzxp
 
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
Yen-lung Tsai
 

Recently uploaded (6)

DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
DevOpsDays Taipei 2024 DevOps加入Biz讓DevOps在企業價值定位
 
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
【炎龍老師的 AI 模組課程】03 和 AI PK 誰比較會認 IVE 成員: Contrastive Learning、人臉辨識
 
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
【炎龍老師的 AI 模組課程】01 用全連結神經網路打造手寫辨識 AI: AI 原理與 MNIST 數據集
 
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
【炎龍老師的 AI 模組課程】04 打造自己的 ChatGPT: 文字生成 AI 的原理、LLM 為什麼這麼厲害、OpenAI API
 
下载软件看app观看【网芷:ht28.co】带反差小姨子开房>>>[网趾:ht28.co】]<<<
下载软件看app观看【网芷:ht28.co】带反差小姨子开房>>>[网趾:ht28.co】]<<<下载软件看app观看【网芷:ht28.co】带反差小姨子开房>>>[网趾:ht28.co】]<<<
下载软件看app观看【网芷:ht28.co】带反差小姨子开房>>>[网趾:ht28.co】]<<<
 
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
【炎龍老師的 AI 模組課程】02 用遷移式學習做八哥辨識: CNN 的原理、用名門 CNN 模型作遷移式學習
 

Continuous Delivery with Ansible x GitLab CI (2e)