413
Better node.js software

Coscup

Embed Size (px)

DESCRIPTION

License by http://creativecommons.org/licenses/by-nc-nd/2.5/tw/

Citation preview

Page 1: Coscup

Better node.js software

www.princexml.com
Prince - Non-commercial License
This document was created with Prince, a great way of getting web content onto paper.
Page 2: Coscup

release practice using open

Page 3: Coscup

source tool

Page 4: Coscup

????????

Page 5: Coscup

Software release to production is such a hard practice, especially considering the business

Page 6: Coscup

impact and the quality of software . I will demonstrate how to use open source tools to

Page 7: Coscup

enhance a node.js web software release process and ensure the better release quality.

Page 8: Coscup

The open source tools I will mention will includes Jenkins, Git, Ubuntu dpkg system, node.js

Page 9: Coscup

language , ruby , rake, jshint , nodeunit, expresso , YETI, Selenium, and mongodb

Page 10: Coscup

?, ??????? 100+ ???? = =

Page 11: Coscup

Web Software release best

Page 12: Coscup

practice

Page 13: Coscup

Agenda

Page 14: Coscup

Who am I ?

Page 15: Coscup

Release engineering in Y! Shopping

Page 16: Coscup

Process

Page 17: Coscup

Testing

Page 18: Coscup

Deploy Tools

Page 19: Coscup

Configuration Management

Page 20: Coscup

Who am I ?

Page 21: Coscup

thegiive

Page 22: Coscup

• A open source lover

Page 23: Coscup

• Release manager of Taiwan Yahoo! Shopping site

Page 24: Coscup

• Continuous study on software development, release engineering and software quality

Page 25: Coscup

• Fall in love with Ruby, VIM, Puppet and Rake

Page 26: Coscup

• Trying to do more work rather than write more blog

Page 27: Coscup

Release engineering in Y! Shopping

Page 28: Coscup

Common image about release

Page 29: Coscup

engineer

Page 30: Coscup
Page 31: Coscup

Yahoo! Shopping release manager

Page 32: Coscup

integration hub for more complex software development teams, sitting at the cross between

Page 33: Coscup

development, product management, quality assurance and other engineering efforts, also known

Page 34: Coscup

as DevOps

Page 35: Coscup

DevOps

Page 36: Coscup
Page 37: Coscup

Release???1 : ???

Page 38: Coscup

??????????????

Page 39: Coscup

• RD Team ???? , PHP Team , .Net Team , Search Team

Page 40: Coscup

• User Team ???? , ?? Team , ?? Team , Search team

Page 41: Coscup
Page 42: Coscup

Release???1 : ???

Page 43: Coscup

?????

Page 44: Coscup
Page 45: Coscup

Release???2 : bug????

Page 46: Coscup

From Book "Beautiful Testing" Chaptor 2

Page 47: Coscup

TestROI : ????????

Page 48: Coscup
Page 49: Coscup

• ACPB : Average Cost of a Production Bug

Page 50: Coscup

• ACTB : Average Cost of a Test Bug

Page 51: Coscup

• TBN : Total Bug Number

Page 52: Coscup

• TDBC : Total Defect Bug Cost

Page 53: Coscup

Taiwan Shopping ? ACPB?????? Test ROI ???

Page 54: Coscup

Test ROI ??????????? testing ????

Page 55: Coscup

Release???2 : bug????

Page 56: Coscup
Page 57: Coscup

Release???3 : User????

Page 58: Coscup

• ??RD?bug?QA????????SE??????RM?????

Page 59: Coscup

• User ???? monitor script , ????????????

Page 60: Coscup

???? Release Manager , not release engineer

Page 61: Coscup
Page 62: Coscup

Release???4 : ??????

Page 63: Coscup

PHP Team

Page 64: Coscup

• Dev process : Scrum

Page 65: Coscup

• Source Code Management : Subversion

Page 66: Coscup

• Language : PHP and partial C++

Page 67: Coscup

• OS : Linux

Page 68: Coscup

.Net Team

Page 69: Coscup

• Dev process : Waterfall

Page 70: Coscup

• Source Code Management : VSS

Page 71: Coscup

• Language : ASP.Net and ASP

Page 72: Coscup

• OS : Windows

Page 73: Coscup

????????????? ... ?????? 100??

Page 74: Coscup

release ?release 2000 ??

Page 75: Coscup

item

Page 76: Coscup

??????

Page 77: Coscup
Page 78: Coscup

Release quality ??

Page 79: Coscup
Page 80: Coscup

Y axies stands for ehnancement number / release number

Page 81: Coscup

Throughput ??

Page 82: Coscup

Y axies stands for

Page 83: Coscup

release item / release number

Page 84: Coscup

User ?? , ???????

Page 85: Coscup

??Release Quality ??????

Page 86: Coscup

• 2011 Q4 24? release ??, ? 12??(02:00 ~ 06:00) release

Page 87: Coscup

• ???? user ?? manager ?????

Page 88: Coscup

??????????????? , ??????? release ???????, ????? 6???

Page 89: Coscup

?? release qulaity ???user ???????????

Page 90: Coscup

• 2012 Q2 11? release ??, ? 0??(02:00 ~ 06:00) release

Page 91: Coscup

• 2012 Q2? 1??07:30 release

Page 92: Coscup

????????

Page 93: Coscup
Page 94: Coscup

Process

Page 95: Coscup

Communication : No Surprise !

Page 96: Coscup

• ???????????, ?????????????????????? briefing and retrospective , ??????? 18%

Page 97: Coscup

• Communication ???? 9???

Page 98: Coscup
Page 99: Coscup

???????

Page 100: Coscup

?????????

Page 101: Coscup

• ????

Page 102: Coscup

• ???

Page 103: Coscup

• double confirm ??????????

Page 104: Coscup

??

Page 105: Coscup

• ????

Page 106: Coscup

• ?? 30min ??, 30???????????? 20000 NTD

Page 107: Coscup

??????

Page 108: Coscup

• ?????? sharing information ?????

Page 109: Coscup

????????

Page 110: Coscup

?????????

Page 111: Coscup

• Information syncing : 40%

Page 112: Coscup

• Discussion : 30%

Page 113: Coscup

• decision making : 30%

Page 114: Coscup

?????

Page 115: Coscup

• Information sync : 5% => ?????????

Page 116: Coscup

• Discussion : 15%

Page 117: Coscup

• decision making : 10%

Page 118: Coscup

Convention over configuration

Page 119: Coscup

Release??

Page 120: Coscup

• Release ????? ???????????

Page 121: Coscup

• ??????? release ??

Page 122: Coscup

• ????????? release

Page 123: Coscup

• Release ???????? release briefing

Page 124: Coscup

• Release ??? Code Freeze

Page 125: Coscup

• ???? cost , ?????? retrospective

Page 126: Coscup

??????????? sync ??

Page 127: Coscup

• ???? Release Plan

Page 128: Coscup

• ????????? Plan ??

Page 129: Coscup

◦ Item ????,???? , ????

Page 130: Coscup

◦ Item ?????? , ???? , ????

Page 131: Coscup

◦ ??????? item ????????????

Page 132: Coscup

release briefing ?????

Page 133: Coscup

• Information sync : 5% => information double confirm

Page 134: Coscup

• Discussion : 15% => ???? sync , ??????????

Page 135: Coscup

• decision making : 10% => ??sync??????????????

Page 136: Coscup

???????

Page 137: Coscup

• ???????? ??? release????? ????email

Page 138: Coscup

• ????????????????? , ????????????

Page 139: Coscup

• ????? , ???? surprise , ???????

Page 140: Coscup
Page 141: Coscup

Testing

Page 142: Coscup

Release Manager ???

Page 143: Coscup

• Unit Test : nodeunit , YETI

Page 144: Coscup

• Automation : Selenium

Page 145: Coscup

• CI ( Continuous Integration ) : Jenkins

Page 146: Coscup

????????????????

Page 147: Coscup
Page 148: Coscup

Unit Test ?????

Page 149: Coscup

?? code ???? , 100% RD ???

Page 150: Coscup
Page 151: Coscup

Automation

Page 152: Coscup

• ??????? SLA (Service-level agreement)

Page 153: Coscup

• ???? ?? automation coverage rate ??? SLA ? 100%

Page 154: Coscup

• ?? release ?????? automation

Page 155: Coscup

• Presentation layer ? coverage rate ???? 100% , ???????

Page 156: Coscup
Page 157: Coscup

Continuous Integration

Page 158: Coscup

• ??????? Unit Test and Automation , ???????

Page 159: Coscup

• CI ????????????? Unit Test , Automation

Page 160: Coscup

• ?????? CI ? auto build ??

Page 161: Coscup
Page 162: Coscup

Deploy Tool

Page 163: Coscup

???SE/Ops ??? Deploy Tool

Page 164: Coscup

??: ???? Yinst/Igor

Page 165: Coscup

Use os level package system

Page 166: Coscup

• Debian/Ubuntu : dpkg

Page 167: Coscup

• RedHat/Centos/Fedora : rpm

Page 168: Coscup

• FreeBSD : port

Page 169: Coscup

• Windows : MSI

Page 170: Coscup

Don't use language level package system , ????????? relay on ???????? server

Page 171: Coscup

• Webservr : apache, nginx

Page 172: Coscup

• Cache : memcached , redis

Page 173: Coscup

• SQL : MySQL , PosgreSQL , MongoDB

Page 174: Coscup

????? Deploy Script

Page 175: Coscup

?????????? script ? deploy code

Page 176: Coscup

1 apt-get install npm

Page 177: Coscup

2 apt-get install pip

Page 178: Coscup

3 apt-get install rubygem

Page 179: Coscup

4 apt-get install nginx #web server

Page 180: Coscup

5 apt-get install memcached #cache server

Page 181: Coscup

6 npm install -g express # Web framework

Page 182: Coscup

7 npm install -d

Page 183: Coscup

8 pip install pykml

Page 184: Coscup

9 gem install amqp # node.js has no rabbitmq client , so use ruby XD

Page 185: Coscup

10 apt-get install rabbitmq-server # rabbitmq server

Page 186: Coscup

11 wget http://mydev.server/mycode_package.tgz # get my code from dev server

Page 187: Coscup

12 tar zxcf mycode_package.tgz # unpack the code package

Page 188: Coscup

• ???? hybrid ?? package system , package dependency ?????

Page 189: Coscup

• SE/Ops team ?? language package system ??? , ???? RD ????

Page 190: Coscup

?? Deploy Script

Page 191: Coscup

????? package system , ?????? package version

Page 192: Coscup

1 apt-get install nginx=0.1.19-1

Page 193: Coscup

2 apt-get install memcached=1.4.13-0ubuntu2

Page 194: Coscup

3 apt-get install node-express=2.5.9-1

Page 195: Coscup

4 apt-get install pykml=0.0.3

Page 196: Coscup

5 apt-get install ruby-amqp=0.9.5-1.

Page 197: Coscup

6 apt-get install rabbitmq-server=2.8.4-1

Page 198: Coscup

7 apt-get install mycode_package=1.2.3 # ???? code ?? package

Page 199: Coscup

??

Page 200: Coscup

• SE/Ops team ??????? deploy ???

Page 201: Coscup

• CI server ????

Page 202: Coscup

???? pkg version

Page 203: Coscup

Production System ? ???? pkg system ? depentency

Page 204: Coscup
Page 205: Coscup

How to pack your package

Page 206: Coscup

• ?? code ????? (Code,Config,template)

Page 207: Coscup

• ??? code ??? prodcut ????? (??,??????,???,????)

Page 208: Coscup

• ????????? (??lib ,??lib ,?? config , ??config )

Page 209: Coscup

• ???????????? ( 100? , 10? , 1? , ???? , ???? )

Page 210: Coscup
Page 211: Coscup

???? Framework ???

Page 212: Coscup
Page 213: Coscup

Change Management

Page 214: Coscup

??? code ???????

Page 215: Coscup

• mycode-1.2.3.zip : ?????? change ???? ???? readme

Page 216: Coscup

PKG list : ?? SE/Ops ?????

Page 217: Coscup

• Upgrade : functionA-config-1.2.3-2012.07.08

Page 218: Coscup

• Upgrade : Member-template-2.3.2-2012.07.11

Page 219: Coscup

• Donwgrade : functionC-code-3.2.1-2012.03.05

Page 220: Coscup

• Upgrade : ShoppingCart-lib-100W-1.2.3-2012.07.20

Page 221: Coscup

• Upgrade : WS-stock-lib-200W-3.2.1-2012.07.21

Page 222: Coscup

Package pack script ???

Page 223: Coscup

Script best practice

Page 224: Coscup

• ???

Page 225: Coscup

• ? package ???? source code version ???

Page 226: Coscup

• Version ??????

Page 227: Coscup

• Package ????? package server

Page 228: Coscup

• Readme ???????? svn log

Page 229: Coscup

Package Version 2.3.1-2012.08.12

Page 230: Coscup

[thegiive v123] add some slides change

Page 231: Coscup

[RD2 v121] change function a

Page 232: Coscup

Configuration Management

Page 233: Coscup

debconf

Page 234: Coscup

???? config package

Page 235: Coscup

• mypkg-config.2.2.3-2012.07.17

Page 236: Coscup

• ?????? config ? ????? readme

Page 237: Coscup

?????? config ??

Page 238: Coscup

1 echo "mypkg mypkg/use_memached boolean true"|debconf-set-selections

Page 239: Coscup

2 echo "mypkg mypkg/ws_host string ws1.coscup.org"|debconf-set-selections

Page 240: Coscup

3 echo "mypkg mypkg/title string coscup"|debconf-set-selections

Page 241: Coscup

4 debian_frontend=noninteractive dpkg-reconfigure

Page 242: Coscup

package ??? postinst

Page 243: Coscup

1 db_get mypkg/use_memached

Page 244: Coscup

2 echo $RET #??? debconf ?????

Page 245: Coscup

3 do_config_change($RET)

Page 246: Coscup

??????SE/Ops?????

Page 247: Coscup

Cache Server ???SE?????? disable cache

Page 248: Coscup

1 echo "mypkg mypkg/use_memached boolean false"|debconf-set-selections

Page 249: Coscup

2 debian_frontend=noninteractive dpkg-reconfigure

Page 250: Coscup

WS1.coscup.org ??????SE???? WS2.coscup.org

Page 251: Coscup

1 echo "mypkg mypkg/ws_host string ws2.coscup.org"|debconf-set-selections

Page 252: Coscup

2 debian_frontend=noninteractive dpkg-reconfigure

Page 253: Coscup

???? title , SE ????? XD

Page 254: Coscup

1 echo "mypkg mypkg/title string coscup.org"|debconf-set-selections

Page 255: Coscup

2 debian_frontend=noninteractive dpkg-reconfigure

Page 256: Coscup

• ????RD ???SE?Daily work?????? RD , SE ??????

Page 257: Coscup

• ?? incident ??? , SE ????config ???? , RD??? SE?????

Page 258: Coscup

?? mobile login server ??

Page 259: Coscup

• ?? mobile loging server ?????????????????

Page 260: Coscup

• ?????????? RD ???????RD,SE,??????

Page 261: Coscup

• ???? config change , ????? mobile login ?? Web?? login ??

Page 262: Coscup
Page 263: Coscup

Debconf ????...???

Page 264: Coscup

????????deploy script

Page 265: Coscup

1 # pkg

Page 266: Coscup

2 export debian_frontend=noninteractive

Page 267: Coscup

3 apt-get install -y nginx=0.1.19-1

Page 268: Coscup

4 apt-get install -y memcached=1.4.13-0ubuntu2

Page 269: Coscup

5 apt-get install -y node-express=2.5.9-1

Page 270: Coscup

6 apt-get install -y pykml=0.0.3

Page 271: Coscup

7 apt-get install -y ruby-amqp=0.9.5-1.

Page 272: Coscup

8 apt-get install -y rabbitmq-server=2.8.4-1

Page 273: Coscup

9 apt-get install -y mycode_package=1.2.3

Page 274: Coscup

10 # config

Page 275: Coscup

11 echo "mypkg mypkg/use_memached boolean true"|debconf-set-selections

Page 276: Coscup

12 echo "mypkg mypkg/ws_host string ws1.coscup.org"|debconf-set-selections

Page 277: Coscup

13 echo "mypkg mypkg/title string coscup"|debconf-set-selections

Page 278: Coscup

14 dpkg-reconfigure

Page 279: Coscup

• ??????? script ? deploy ?????????? , VM , Cloud instance

Page 280: Coscup

• script ???? non-interactive mode ? disable ??????? step

Page 281: Coscup

• ?? CI server ?? auto build , auto config

Page 282: Coscup

deploy script ?? version

Page 283: Coscup

control

Page 284: Coscup

?? tag ??? deploy , rollback

Page 285: Coscup

7??1? release ? tag ? v2012_07_01 , 7??2? release ? tag ? v2012_07_02

Page 286: Coscup

1 # ???1? release

Page 287: Coscup

2 git tag v2012_07_01

Page 288: Coscup

3 exec_deploy_script

Page 289: Coscup

4 # ???2? release

Page 290: Coscup

5 git tag v2012_07_02

Page 291: Coscup

6 exec_deploy_script

Page 292: Coscup

? v2012_07_02 release ??????? rollback ??????(v2012_07_01)

Page 293: Coscup

1 git checkout v2012_07_01

Page 294: Coscup

2 exec_deploy_script

Page 295: Coscup

?? git diff ?????? change

Page 296: Coscup

????7??2? release ?????

Page 297: Coscup

1 git diff v2012_07_01 v2012_07_02

Page 298: Coscup

2 #git diff output

Page 299: Coscup

3 .....

Page 300: Coscup

4 -apt-get install -y mycode_package=1.2.3

Page 301: Coscup

5 +apt-get install -y mycode_package=1.3.1

Page 302: Coscup

6 -echo "mypkg mypkg/use_memached boolean true"|debconf-set-selections

Page 303: Coscup

7 +echo "mypkg mypkg/use_memached boolean false"|debconf-set-selections

Page 304: Coscup

8 .....

Page 305: Coscup

9 -echo "mypkg mypkg/title string coscup"|debconf-set-selections

Page 306: Coscup

10 +echo "mypkg mypkg/title string coscup.org"|debconf-set-selections

Page 307: Coscup

11 .....

Page 308: Coscup

• package ????? , config management ????change ???

Page 309: Coscup

• ?? RD ??????? diff ???????????

Page 310: Coscup

?? git branch ?????

Page 311: Coscup

• ?? git ??? branch ???????? deploy script

Page 312: Coscup

• ???????? alpha , beta , staging , production ?? branch

Page 313: Coscup

??? alpha ???????? beta ??? git merge

Page 314: Coscup

1 git checkout beta

Page 315: Coscup

2 git merge alpha

Page 316: Coscup

3 ...solve confict...

Page 317: Coscup

4 git commit

Page 318: Coscup

One More Thing

Page 319: Coscup

Deploy System : Puppet

Page 320: Coscup
Page 321: Coscup

• Open source deploy system written by Ruby

Page 322: Coscup

• Client Server ????????? pure client

Page 323: Coscup

• Config is language, built by Ruby DSL !!!

Page 324: Coscup

• ??? template system ???? perfect configuration manage System

Page 325: Coscup

• ???OS ? package system , ???????? OS ????

Page 326: Coscup

• From Wikipedia ????: Google, Zynga, Sun, Wikipedia, Dell, Twitter...

Page 327: Coscup

Puppet Node config

Page 328: Coscup

In module

Page 329: Coscup

1 class ntpd {

Page 330: Coscup

2 package { "ntp": ensure => installed, }

Page 331: Coscup

3 file { "/etc/ntp.conf": owner => root, group => root,

Page 332: Coscup

4 require => package["ntp"] }

Page 333: Coscup

5 @service { "ntpd": ensure => running, enable => true,

Page 334: Coscup

6 subscribe => File["/etc/ntp.conf"] }

Page 335: Coscup

7 }

Page 336: Coscup

8 class ci{ package { "jenkins" : ensure => installed,} }

Page 337: Coscup

9 class Webservr{ package { "nginx" : ensure => installed,} }

Page 338: Coscup

In main config

Page 339: Coscup

1 node basenode { include ntpd }

Page 340: Coscup

2 node 'ci.coscup.org' inherits basenode {

Page 341: Coscup

3 include ci

Page 342: Coscup

4 }

Page 343: Coscup

5 node 'web.example.com' inherits basenode {

Page 344: Coscup

6 include webserver

Page 345: Coscup

7 }

Page 346: Coscup

Puppet Package config

Page 347: Coscup

?? Package ??

Page 348: Coscup

1 package {'vim': ensure => 'installed' }

Page 349: Coscup

2 package { "apache2": ensure => '2.2.22-1ubuntu1' }

Page 350: Coscup

3 package { 'mysql': ensure => installed,

Page 351: Coscup

4 provider => 'msi',

Page 352: Coscup

5 source => 'N:/packages/mysql-xxx.msi',

Page 353: Coscup

6 install_options => { 'INSTALLDIR' => 'C:\mysql-5.5' }, }

Page 354: Coscup

??????? Deploy Script

Page 355: Coscup

• Debian / Ubuntu : Apt-get

Page 356: Coscup

• RedHat / Fedora / CentOS : yum

Page 357: Coscup

• FreeBSD : port

Page 358: Coscup

• MacOS : macport

Page 359: Coscup

• Windows : msi

Page 360: Coscup

• Gentoo : portage

Page 361: Coscup

Puppet Template System

Page 362: Coscup

Configure Management ??? : ERB

Page 363: Coscup

??????? config file

Page 364: Coscup

1 $server_name = 'domain.coscup.org'

Page 365: Coscup

2 $server_port = 80

Page 366: Coscup

3 file {"/usr/conf/nginx.conf": mode => "664",

Page 367: Coscup

4 content => template("nginx/config.erb"), }

Page 368: Coscup

template

Page 369: Coscup

1 server {

Page 370: Coscup

2 listen <%= $server_port%>;

Page 371: Coscup

3 server_name <%= $server_name %>;

Page 372: Coscup

4 .....

Page 373: Coscup

5 }

Page 374: Coscup

Pure ruby config menas

Page 375: Coscup

1 Given I run "ssh localhost -p 2222" interactively

Page 376: Coscup

2 And I type "apache2ctl configtest"

Page 377: Coscup

3 And the exit status should be 0

Page 378: Coscup

• We can write unit test ... so we can TDD

Page 379: Coscup

• We can write rspec and cucumber ... so we can BDD

Page 380: Coscup

• We can commit our config in Hudson... so we can CI our config

Page 381: Coscup

??? Deploy Script ??

Page 382: Coscup

1 class web{ package { "nginx": ensure => '0.1.19-1' } }

Page 383: Coscup

2 class cache{ package { "memcached" : ensure => '1.4.13-0ubuntu2' }}

Page 384: Coscup

3 class kml_lib{ package { "pykml" : ensure =>'0.0.3' }}

Page 385: Coscup

4 class message_quene{

Page 386: Coscup

5 package { "ruby-amqp" : ensure => '0.9.5-1' }

Page 387: Coscup

6 package { "rabbitmq-server": ensure => '2.8.4-1' }

Page 388: Coscup

7 }

Page 389: Coscup

8 class code_package{

Page 390: Coscup

9 include kml_lib

Page 391: Coscup

10 include message_quene

Page 392: Coscup

11 package { "node-express" : ensure => '2.5.9-1' }

Page 393: Coscup

12 package { "mycode" : ensure => '1.2.3' }

Page 394: Coscup

13 }

Page 395: Coscup

14 node "w1.coscup.com" {

Page 396: Coscup

15 include web

Page 397: Coscup

16 include cache

Page 398: Coscup

17 include code_package

Page 399: Coscup

18 }

Page 400: Coscup

Q & A

Page 401: Coscup

Puppet Config

Page 402: Coscup

?? Command

Page 403: Coscup

1 exec { 'remove file' : command => 'rm /tmp/pup/etd' , path => '/bin' }

Page 404: Coscup

?? Windows Command

Page 405: Coscup

1 exec { 'wincommand': command => 'C:\Windows\..\powershell.exe -executionpolicy remotesigned -file C:\test.ps1', }

Page 406: Coscup

?? file

Page 407: Coscup

1 file{'/tmp/pup': ensure => 'directory'}

Page 408: Coscup

2 file{ '/tmp/pup/et': ensure => 'present', content => 'look at me',

Page 409: Coscup

3 require => File['/tmp/pup']}

Page 410: Coscup

4 file { "/etc/ntp.conf": owner => root, group => root,

Page 411: Coscup

5 mode => 0644, source => "puppet:///ntpd/ntp.conf",

Page 412: Coscup

6 require => package["ntp"]

Page 413: Coscup

7 }