Slide 1

Slide 1 text

JENKINS & DOCKER INTEGRATION ASH WU @ AGILE MEETUP DEC 2014

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

KKTIX 導入 Docker 的 故事…

Slide 5

Slide 5 text

Continuous Integration

Slide 6

Slide 6 text

CONTINUOUS INTEGRATION Continuous integration (CI) is the practice, in software engineering, of merging all developer working copies with a shared mainline several times a day. It was first named and proposed by Grady Booch in his method,[1] who did not advocate integrating several times a day. It was adopted as part of extreme programming (XP), which did advocate multiple integrations a day, perhaps as many as tens a day. The main aim of CI is to prevent integration problems, referred to as "integration hell" in early descriptions of XP. CI isn't universally accepted as an improvement over frequent integration, so it is important to distinguish between the two as there is disagreement about the virtues of each…… http://en.wikipedia.org/wiki/Continuous_integration

Slide 7

Slide 7 text

測試

Slide 8

Slide 8 text

自動化測試

Slide 9

Slide 9 text

QA 的測試,代表的是 QA 對這個產品負責  自動化測試,代表的是你對 你自己寫的程式負責。

Slide 10

Slide 10 text

為什麼要寫測試?

Slide 11

Slide 11 text

•  有了測試,就不會修 A 壞 B •  出現過的 bug 不會再出現 •  重構、加新功能、修 bug 的時候更 有信心 •  QA 時間縮短,deploy 頻率增加

Slide 12

Slide 12 text

第一、男子漢在緊要關頭,要當仁不讓! 第二、現在就是緊要關頭! 第三、我們就是男子漢!  - 功夫棒球

Slide 13

Slide 13 text

第一、工程師在重要專案,要寫測試! 第二、現在就是重要專案! 第三、我們就是工程師!

Slide 14

Slide 14 text

爛測試比沒測試好

Slide 15

Slide 15 text

Continuous Integration

Slide 16

Slide 16 text

http://xkcd.com/303/

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

CI SERVICES

Slide 19

Slide 19 text

SELF-HOSTED CI http://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software

Slide 20

Slide 20 text

JENKINS •  Since 2004 •  Open source •  Java •  Support CVS, SVN, Git, HG… •  LOTS of plugins. 

Slide 21

Slide 21 text

JENKINS BUILD TRIGGER 1. 手動 2. 有人 push master branch 3. 有人發 github pull request https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

CI OF KKTIX •  KKTIX 是用 Rails & Go 搭建 •  有單元測試,也有整合測試 •  測試時會用到許多資源與服務

Slide 26

Slide 26 text

Disk

Slide 27

Slide 27 text

Port

Slide 28

Slide 28 text

Postgres

Slide 29

Slide 29 text

Redis

Slide 30

Slide 30 text

Elasticsearch

Slide 31

Slide 31 text

Selenium

Slide 32

Slide 32 text

靈異現象

Slide 33

Slide 33 text

不利平行化測試

Slide 34

Slide 34 text

你以為我要開始講 Docker 了對不對?

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

新需求 QA 環境

Slide 37

Slide 37 text

GITHUB-FLOW

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

Disk

Slide 41

Slide 41 text

Port

Slide 42

Slide 42 text

Postgres

Slide 43

Slide 43 text

Redis

Slide 44

Slide 44 text

Elasticsearch

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

為什麼不改程式來解決?

Slide 47

Slide 47 text

很麻煩

Slide 48

Slide 48 text

程式碼越多,執行效能越差

Slide 49

Slide 49 text

程式碼越多,bug 數量越多

Slide 50

Slide 50 text

你以為我終於要開始 講 Docker 了對不對?

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

http://blog.docker.com

Slide 55

Slide 55 text

Develop, Ship and Run Any Application, Anywhere

Slide 56

Slide 56 text

DOCKER USE CASE 1.  開發環境 (http://www.fig.sh/) 2.  Open source project •  https://github.com/stucki/docker-cyanogenmod •  https://github.com/discourse/discourse_docker 3.  伺服器部署 •  https://coreos.com/ •  http://aws.amazon.com/ecs/ •  https://cloud.google.com/container-engine/

Slide 57

Slide 57 text

DOCKER BASICS •  Image (frozen app) •  Container •  1 image > multiple running container •  No init •  Process finished, container stopped.

Slide 58

Slide 58 text

HOW TO CREATE DOCKER IMAGE •  docker pull 取得 image > docker run 某個 image 做修改 > docker commit 成新的 image (https://registry.hub.docker.com) •  寫 Dockerfile 執行 docker build (FROM ubuntu/12:04)

Slide 59

Slide 59 text

DOCKER CONTAINER •  expose •  add / copy •  volume •  attach / detach •  pause / unpause •  link between containers

Slide 60

Slide 60 text

MY PLAN

Slide 61

Slide 61 text

JENKINS MASTER-SLAVES

Slide 62

Slide 62 text

JENKINS DOCKER PLUGIN https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin

Slide 63

Slide 63 text

ACTUALLY YOU CAN RUNNING…

Slide 64

Slide 64 text

ACTUALLY YOU CAN RUNNING…

Slide 65

Slide 65 text

ACTUALLY YOU CAN RUNNING…

Slide 66

Slide 66 text

ACTUALLY YOU CAN RUNNING…

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

KKTIX/TEST

Slide 69

Slide 69 text

KKTIX/1337

Slide 70

Slide 70 text

KKTIX/QA

Slide 71

Slide 71 text

QA ENVIRONMENT •  使用 volume 讓 container 和 host 共享 目錄 •  Nginx 透過 subdomain 判斷連到哪一個 container 的 document root •  聽 port 的都改成聽 unix domain socket 免除處理 port 的困擾 •  Port 轉 socket 可用 socat ( http://www.dest-unreach.org/socat/ )

Slide 72

Slide 72 text

HIPCHAT BOT INTEGRATION

Slide 73

Slide 73 text

No content

Slide 74

Slide 74 text

No content

Slide 75

Slide 75 text

No content

Slide 76

Slide 76 text

CONCLUSION •  如果還沒開始寫測試,趕快寫。現 在,馬上。 •  有寫測試還沒有 CI, 可以試著用用 看 CI •  已經有 run CI 的可以導入 Docker 讓測試環境單純化,做平行化測試

Slide 77

Slide 77 text

No content