SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Jenkins	
  entwined	
  with	
  deployment	
  	
  
and	
  pragma>sm	
  
	
  
	
  
	
  
Eric	
  Ritchie	
  
DevOps	
  Engineer	
  
Novadex	
  	
  
	
  
+49	
  (0)	
  7142	
  /	
  788905-­‐0	
  
eric.ritchie@novadex.com	
  
	
  
	
  	
  
	
  
Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  
Eric	
  Ritchie	
  bids	
  you	
  welcome!	
  
Never	
  heard	
  of	
  him?	
  
Aside	
  from	
  looking	
  like	
  this,	
  he	
  is:	
  
§  currently	
  working	
  as	
  DevOps	
  Engineer	
  and	
  	
  
System	
  Administrator	
  at	
  Novadex	
  GmbH	
  
§  a	
  Zend	
  Framework	
  and	
  PHP	
  ZCE	
  &	
  MySQL	
  DBA	
  
§  a	
  Linux	
  System	
  Administrator	
  with	
  18	
  years	
  experience	
  
§  a	
  PHP	
  developer	
  since	
  version	
  3.0.18	
  (or	
  so)	
  
§  known	
  to	
  speak	
  at	
  a	
  conference	
  or	
  two	
  
	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

2	
  
LeaerMaschine:	
  Custom-­‐tailored	
  Communica>on	
  
Personalized	
  data	
  stream	
  	
  

Cross-­‐Channel	
  Output	
  

Data	
  protec>on	
  

Security	
   Content	
  management	
  
E-­‐commerce	
  integra>on	
  

CRM	
  integra>on	
  

Portal	
  Op>on	
  

Campaign	
  management	
  

Collabora>on	
  

	
  
	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

3	
  
What	
  I	
  read	
  in	
  a	
  book	
  once…	
  

„DevOPs	
  should	
  aim	
  for	
  10	
  deployments	
  per	
  day“	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

4	
  
Novadex’s	
  key	
  tool:	
  Jenkins	
  
§ 

Great	
  for	
  Con?nuous	
  Integra?on	
  

§ 

Can	
  hide	
  complex	
  processes	
  behind	
  a	
  nice	
  buDon	
  

§ 

Deployment	
  remains	
  one	
  of	
  those	
  complex	
  processes	
  
§ 
§ 

Requires	
  a	
  lot	
  of	
  scrip>ng/manual	
  work	
  
This	
  risks	
  our	
  deployment	
  goal	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

5	
  
An	
  example	
  of	
  that	
  scrip>ng	
  
	
  <target	
  name="package">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <echo	
  message="...using	
  UPSTREAM_BUILD_NUMBER	
  received	
  from	
  triggering	
  job	
  for	
  packagenaming.	
  UPSTREAM_BUILD_NUMBER	
  is	
  [${UPSTREAM_BUILD_NUMBER}]"/>	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐	
  leaermaschine-­‐complete	
  packaging	
  -­‐-­‐>	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐	
  wipe	
  the	
  dir	
  from	
  possible	
  previous	
  copy	
  opera>on	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <delete	
  includeemptydirs="true">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <fileset	
  dir="${package.contents.basedir}"	
  includes="**/*"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <fileset	
  dir="${package.basedir}/DEBIAN"	
  includes="**/*"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </delete>	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐	
  prepare	
  debian	
  control	
  file	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <copy	
  todir="${package.basedir}/DEBIAN"	
  overwrite="true">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <fileset	
  file="resource/package/test/control"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <filterset	
  begintoken="[["	
  endtoken="]]">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <filter	
  token="version"	
  value="${UPSTREAM_BUILD_NUMBER}-­‐1"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <filter	
  token="name"	
  value="leaermaschine-­‐complete"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <filter	
  token="depends"	
  value=""/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <filter	
  token="descrip>on"	
  value="Complete	
  Leaermaschine	
  applica>on"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </filterset>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </copy>	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐	
  copy	
  pos>nstalla>on	
  script	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <copy	
  file="${basedir}/resource/package/test/pos>nst_lm"	
  tofile="${package.basedir}/DEBIAN/pos>nst"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <chmod	
  file="${package.basedir}/DEBIAN/pos>nst"	
  perm="775"/>	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  <copy	
  todir="${package.contents.basedir}">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <fileset	
  dir="${export.basedir}">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <snip>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </fileset>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </copy>	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  <exec	
  executable="sudo"	
  dir="${working.basedir}"	
  failonerror="true">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <arg	
  line="sudo	
  dpkg	
  -­‐b	
  ${package.basedir}	
  ${dist.basedir}/leaermaschine-­‐complete_${UPSTREAM_BUILD_NUMBER}-­‐1_all.deb"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </exec>	
  
	
  	
  	
  	
  </target>	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

6	
  
Deployment	
  v1.x?	
  
§ 

Applica?on	
  bundled	
  into	
  a	
  .deb	
  package	
  
§ 
§ 

§ 

As	
  shown	
  on	
  the	
  previous	
  slide	
  (yeah,	
  that’s	
  what	
  it	
  did)	
  
Shell	
  scrip>ng	
  available	
  for	
  in	
  deployment	
  manipula>ons	
  

SCP’d	
  to	
  target	
  machine,	
  installed	
  via	
  SSH	
  exec	
  	
  
§ 

Need	
  to	
  set	
  up	
  SSL	
  cer>ficates	
  to	
  allow	
  password	
  free	
  access	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

7	
  
Problems?	
  
§ 

Who	
  is	
  comfortable	
  with	
  bash	
  shell	
  scrip?ng?	
  

§ 

What	
  happens	
  when	
  something	
  goes	
  wrong?	
  	
  
§ 

§ 

Not	
  really	
  all	
  that	
  cluster	
  friendly	
  
§ 

§ 

Each	
  version	
  of	
  the	
  .deb	
  package	
  is	
  cached	
  	
  

Need	
  to	
  grant	
  unlimited	
  access	
  to	
  live	
  servers,	
  argh!	
  
§ 

§ 

Ok,	
  we	
  have	
  Chef/Puppet	
  if	
  we	
  like	
  overkill	
  

Disk	
  cluDer	
  
§ 

§ 

Ever	
  tried	
  to	
  roll	
  back	
  a	
  copied	
  .deb	
  package	
  in	
  a	
  hurry?	
  

Remember	
  that	
  SSL	
  cer>ficate	
  we	
  installed?	
  	
  

What	
  if	
  we	
  need	
  to	
  support	
  Red	
  Hat	
  also?	
  
§ 

Hypothe>cal	
  in	
  the	
  case	
  of	
  Novadex,	
  but	
  s>ll	
  a	
  valid	
  problem.	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

8	
  
Enter	
  Zend	
  Server	
  deployment	
  (and	
  me)	
  
Cluster/Cloud	
  ready,	
  plaxorm	
  agnos>c,	
  PHP	
  scrip>ng	
  
and	
  version	
  handling	
  with	
  integrated	
  roll	
  back.	
  

Yes,	
  I	
  used	
  to	
  work	
  for	
  Zend	
  ;)	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

9	
  
Tale	
  of	
  the	
  liale	
  known	
  tool:	
  zs-­‐manage	
  
§ 

We	
  all	
  have	
  heard	
  about	
  the	
  Web	
  API,	
  right?	
  
§ 

§ 

We	
  have	
  had	
  command	
  line	
  deployment	
  tools	
  since	
  day	
  one	
  	
  
§ 

§ 

But	
  nobody	
  knew	
  about	
  them,	
  which	
  is	
  a	
  pity	
  

zs-­‐manage	
  has	
  many	
  advantages	
  
§ 
§ 
§ 

§ 

You	
  may	
  be	
  forgiven	
  for	
  thinking	
  it	
  is	
  a	
  new	
  thing	
  

Can	
  leverage	
  all	
  deployment	
  features	
  
Does	
  not	
  rely	
  on	
  SSL	
  cer>ficates	
  for	
  security	
  
Same	
  commands	
  for	
  local/cluster/cloud	
  deployment	
  

But	
  beware,	
  there	
  are	
  some	
  caveats	
  
§ 

Pragma>sm	
  to	
  follow...	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

10	
  
Let’s	
  empower	
  Jenkins…	
  
	
  <!-­‐-­‐	
  retrieve	
  the	
  app.id	
  for	
  the	
  applica>on,	
  specified	
  by	
  app.name.	
  may	
  be	
  empty	
  if	
  app	
  hasn't	
  already	
  deployed	
  	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <exec	
  executable="bash"	
  dir="${basedir}"	
  outputproperty="app.id"	
  errorproperty="err"	
  failonerror="true">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <arg	
  value="-­‐c"	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <arg	
  value="/usr/local/zend/bin/zs-­‐manage	
  app-­‐get-­‐status	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐N	
  ${zs.api.name}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐U	
  ${zs.url}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐K	
  ${zs.api.key}	
  2&gt;&amp;1	
  |	
  grep	
  &quot;APPINFOs.*${app.name}.*&quot;	
  |	
  awk	
  '{print	
  $2}'"	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  </exec>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <if>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  <equals	
  arg1="${app.id}"	
  arg2=""	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  <then>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <echo	
  message="Couldn't	
  determine	
  app.id	
  for	
  app.name	
  '${app.name}'	
  -­‐	
  preparing	
  ini>al	
  deployment	
  of	
  applica>on	
  ..."	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐	
  deploy	
  applica>on	
  via	
  zend	
  server	
  command	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <exec	
  executable="/usr/local/zend/bin/zs-­‐manage"	
  dir="/tmp"	
  failonerror="true">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <arg	
  line="app-­‐deploy	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐u	
  &quot;NDX_ENV=${zs.ndx.env}&quot;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐c	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐b	
  hap://${app.name}/	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐a	
  ${app.name}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐p	
  ${zs.package.des>na>ondir}/${zs.package.name}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐N	
  ${zs.api.name}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐K	
  ${zs.api.key}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐U	
  ${zs.url}"	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </exec>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  </then>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  <else>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <echo	
  message="app.name	
  '${app.name}',	
  app.id	
  is	
  ${app.id}	
  -­‐	
  preparing	
  the	
  update	
  of	
  applica>on	
  ..."	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐	
  update	
  applica>on	
  via	
  zend	
  server	
  command	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <exec	
  executable="/usr/local/zend/bin/zs-­‐manage"	
  dir="/tmp"	
  failonerror="true">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <arg	
  line="app-­‐update	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐u	
  &quot;NDX_ENV=${zs.ndx.env}&quot;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐i	
  ${app.id}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐p	
  ${zs.package.des>na>ondir}/${zs.package.name}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐N	
  ${zs.api.name}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐K	
  ${zs.api.key}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐U	
  ${zs.url}"	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </exec>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  </else>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </if>	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

11	
  
Crea>ng	
  the	
  package	
  to	
  be	
  deployed	
  
§ 

We	
  have	
  a	
  choice	
  
§ 
§ 
§ 

§ 

Zend	
  Studio	
  -­‐	
  a	
  manual	
  process	
  
zdpack	
  -­‐	
  Zend	
  standard	
  
zip	
  -­‐	
  needs	
  no	
  introduc>on	
  

Novadex	
  have	
  used	
  zip	
  at	
  ?mes	
  
§ 

But	
  currently	
  use	
  the	
  following	
  code	
  

	
  	
  	
  	
  	
  	
  	
  	
  <exec	
  executable="/usr/local/zend/bin/zdpack"	
  dir="${working.basedir}"	
  failonerror="true">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐	
  NOTE:	
  name	
  of	
  the	
  created	
  package	
  is	
  the	
  name	
  specified	
  in	
  deployment.xml	
  name-­‐tag	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <arg	
  line="pack	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐src-­‐dir=${package.contents.basedir}	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐scripts-­‐dir=${basedir}/resource/zs_deploy_new/scripts	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐package-­‐descriptor=${working.basedir}/deployment.xml	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐-­‐output-­‐dir=${working.basedir}"	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  </exec>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐	
  rename	
  created	
  package	
  to	
  reflect	
  version	
  of	
  package	
  contents	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <move	
  file="${working.basedir}/${app.name}.zpk"	
  tofile="${working.basedir}/${zs.package.name}"	
  overwrite="true"/>	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐	
  copy	
  the	
  new	
  package	
  from	
  temp	
  loca>on	
  to	
  package	
  directory	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <copy	
  file="${working.basedir}/${zs.package.name}"	
  todir="${zs.package.des>na>ondir}"	
  overwrite="true"/>	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

12	
  
Sadly,	
  size	
  does	
  maaer	
  
§ 

You	
  don’t	
  leave	
  your	
  doors	
  unlocked	
  when	
  you	
  leave	
  home	
  
§ 

§ 

Web	
  API	
  could	
  be	
  an	
  aDack	
  vector	
  	
  
§ 
§ 

§ 

Most	
  admins	
  are	
  equally	
  careful	
  with	
  their	
  servers	
  

Which	
  is	
  why	
  Zend	
  take	
  steps	
  to	
  secure	
  it	
  
Web	
  API	
  calls	
  must	
  be	
  signed	
  with,	
  amongst	
  other	
  informa>on,	
  a	
  >mestamp	
  

To	
  help	
  prevent	
  replay	
  aDacks,	
  calls	
  must	
  complete	
  within	
  300	
  seconds	
  
§ 
§ 

This	
  security	
  feature	
  can	
  shoot	
  us	
  in	
  the	
  foot	
  
In	
  short,	
  the	
  network	
  speed	
  determines	
  our	
  maximum	
  packet	
  size	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

13	
  
Working	
  around	
  the	
  size	
  issue	
  
§ 

No	
  perfect	
  solu?ons,	
  yet	
  
§ 

§ 

I	
  am	
  working	
  on	
  Zend	
  ;)	
  

But	
  we	
  can	
  apply	
  some	
  pragma?sm	
  
§ 
§ 
§ 
§ 
§ 
§ 

Package	
  can	
  be	
  broken	
  into	
  sub-­‐packages	
  
Zend	
  Deployment	
  has	
  a	
  new	
  Library	
  feature,	
  use	
  it	
  
Pull	
  instead	
  of	
  push	
  
Upgrade	
  the	
  pipe	
  
Time	
  travel	
  
Or,	
  emulate	
  the	
  GUI	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

14	
  
Our	
  solu>on	
  	
  
GUI	
  emula?on:	
  It	
  works	
  for	
  us	
  
	
  <echo	
  message="copying	
  ${zs.package.name}	
  to	
  ${remote.hostname}"	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  <scp	
  file="${zs.package.des>na>ondir}/${zs.package.name}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  todir="${remote.user}@${remote.hostname}:${remote.dir}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  keyfile="${remote.keyfile}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  />	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  <echo	
  message="app.name	
  '${app.name}',	
  app.id	
  is	
  '${app.id}'	
  -­‐	
  preparing	
  the	
  update	
  of	
  applica>on	
  ..."	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐	
  execute	
  zs-­‐manage	
  locally	
  on	
  host	
  where	
  package	
  should	
  be	
  deployed!	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <sshexec	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  host="${remote.hostname}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  username="${remote.user}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  keyfile="${remote.keyfile}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  command="/usr/local/zend/bin/zs-­‐manage	
  app-­‐update	
  -­‐u	
  &quot;NDX_ENV=${zs.ndx.env}&quot;	
  -­‐i	
  ${app.id}	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  -­‐p	
  ${remote.dir}/${zs.package.name}	
  -­‐N	
  ${zs.api.name}	
  -­‐K	
  ${zs.api.key}	
  -­‐U	
  ${remote.webapi.url}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  />	
  

!	
  

Just	
  remember:	
  SCP/SSH	
  may	
  not	
  be	
  allowed	
  by	
  your	
  opera>ons	
  team.	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  You	
  may	
  need	
  another	
  solu>on	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

!	
  
20/11/13	
  

15	
  
Memory	
  and	
  lots	
  of	
  it	
  
§ 

Ques?on:	
  Where	
  does	
  all	
  this	
  deployment	
  data	
  go?	
  
§ 

§ 

The	
  GUI	
  allocates	
  memory	
  equivalent	
  to	
  three	
  ?mes	
  the	
  packet	
  size	
  	
  
§ 

§ 

Hint:	
  The	
  WebAPI	
  is	
  part	
  of	
  the	
  GUI	
  

Since	
  the	
  data	
  is	
  loaded,	
  copied	
  and	
  finally	
  unpacked	
  (don’t	
  ask)	
  

Where	
  is	
  the	
  GUI’s	
  memory	
  limit	
  configured?	
  
§ 
§ 

Not	
  in	
  the	
  GUI,	
  that	
  would	
  spoil	
  the	
  fun	
  ;)	
  
Can	
  you	
  guess?	
  

Answer:	
  	
  
The	
  memory_limit	
  variable	
  in:	
  
/usr/local/zend/gui/lighapd/etc/php-­‐fcgi.ini	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

16	
  
Aaack	
  of	
  the	
  cluster	
  
§ 

Zend	
  deployment	
  can	
  be	
  hard	
  to	
  synchronise	
  
§ 

§ 

An	
  extreme	
  case	
  is	
  the	
  “run	
  once”	
  node	
  
§ 

§ 

In	
  other	
  words,	
  you	
  cannot	
  guarantee	
  when	
  all	
  nodes	
  will	
  run	
  the	
  	
  
same	
  version	
  of	
  the	
  applica>on	
  

Database	
  migra>ons	
  are	
  usually	
  performed	
  here,	
  so	
  deployment	
  is	
  slower	
  

This	
  caused	
  problems	
  with	
  our	
  “In	
  maintenance”	
  page	
  
§ 

Time	
  for	
  some	
  extreme	
  pragma>sm…	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

17	
  
I	
  am	
  a	
  Job	
  Queue	
  fan…	
  so	
  I	
  wrote	
  this	
  
//	
  Sanity	
  check	
  
if	
  (!class_exists('ZendJobQueue')){	
  
	
  	
  	
  	
  logger("Job	
  Queue	
  seems	
  to	
  be	
  disabled!");	
  
	
  	
  	
  	
  exit(1);	
  
}	
  
	
  
if	
  (getenv("ZS_RUN_ONCE_NODE")	
  ==	
  1)	
  {	
  
	
  	
  	
  	
  $name	
  =	
  DEPLOYMENT_JOB_BASENAME.$appCurrentVersion;	
  
	
  	
  	
  	
  $queue	
  =	
  new	
  ZendJobQueue();	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  //	
  Before	
  scheduling	
  our	
  job,	
  just	
  make	
  sure	
  that	
  it	
  has	
  not	
  been	
  scheduled	
  before	
  
	
  	
  	
  	
  $total	
  =	
  null;	
  
	
  	
  	
  	
  $jobArray	
  =	
  $queue-­‐>getJobsList(array('name'	
  =>	
  $name),	
  $total);	
  
	
  	
  	
  	
  if	
  ($total	
  !=	
  0)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  foreach($jobArray	
  AS	
  $job)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  $queue-­‐>removeJob($job['id']);	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  //	
  Schedule	
  the	
  job	
  script	
  to	
  run	
  a	
  long	
  >me	
  in	
  the	
  future	
  (since	
  we	
  don't	
  really	
  need	
  it	
  to	
  run)	
  
	
  	
  	
  	
  $runAt	
  =	
  date('Y-­‐m-­‐d	
  H:i:s',	
  strto>me('+7	
  days'));	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  $semaphoreJobId	
  =	
  $queue-­‐>createHapJob('hap://www.google.de/search?q=dummy',	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  array(),	
  array('name'	
  =>	
  $name,	
  'schedule_?me'	
  =>	
  $runAt));	
  
	
  	
  	
  	
  if	
  (!$semaphoreJobId)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  logger("Semphore	
  job	
  was	
  not	
  accepted	
  in	
  the	
  queue!");	
  
	
  	
  	
  	
  	
  	
  	
  	
  exit(1);	
  
	
  	
  	
  	
  }	
  
}	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

18	
  
…and	
  this	
  at	
  the	
  end	
  of	
  the	
  script	
  
if	
  (getenv("ZS_RUN_ONCE_NODE")	
  ==	
  1)	
  {	
  
	
  	
  	
  	
  //	
  We	
  are	
  the	
  RUN	
  ONCE	
  script	
  so	
  clear	
  the	
  semaphore	
  
	
  	
  	
  	
  $queue-­‐>removeJob($semaphoreJobId);	
  
}	
  
else	
  {	
  
	
  	
  	
  	
  //	
  We	
  are	
  not	
  the	
  RUN	
  ONCE	
  script	
  so	
  wait	
  for	
  it	
  to	
  clear	
  the	
  semaphore	
  
	
  	
  	
  	
  $queue	
  =	
  new	
  ZendJobQueue();	
  
	
  
	
  	
  	
  	
  $total	
  =	
  1;	
  
	
  	
  	
  	
  $status	
  =	
  ZendJobQueue::JOB_STATUS_PENDING	
  |	
  ZendJobQueue::JOB_STATUS_SCHEDULED;	
  
	
  	
  	
  	
  while	
  ($total	
  !=	
  0)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  $jobArray	
  =	
  $queue-­‐>getJobsList(array('name'	
  =>	
  $name,	
  'status'	
  =>	
  $status),	
  $total);	
  
	
  	
  	
  	
  	
  	
  	
  	
  sleep(1);	
  
	
  	
  	
  	
  }	
  
}	
  

We	
  now	
  plan	
  to	
  use	
  an	
  Nginx,	
  that	
  spontaneously	
  appeared	
  in	
  our	
  architecture,	
  
to	
  set	
  our	
  maintenance	
  page.	
  Nevertheless,	
  it	
  was	
  s>ll	
  a	
  cool	
  idea	
  ;)	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

19	
  
Finding	
  out	
  what	
  is	
  happening	
  
§ 

So	
  far	
  so	
  good,	
  but	
  we	
  s?ll	
  don’t	
  have	
  true	
  integra?on	
  
§ 

§ 

Jenkins	
  has	
  no	
  liale*	
  visibility	
  over	
  the	
  deployment	
  process	
  

We	
  can	
  log	
  the	
  output	
  of	
  our	
  deployment	
  scripts	
  
§ 
§ 
§ 

But	
  these	
  are	
  not	
  available	
  to	
  Jenkins	
  
We	
  can	
  make	
  them	
  available	
  to	
  the	
  GUI,	
  at	
  least,	
  by	
  adding	
  the	
  paths	
  to	
  the	
  
GUI_AVAILABLE_LOGS	
  table	
  in	
  the	
  Zend	
  Server	
  database	
  
More	
  convenient,	
  but	
  we	
  s>ll	
  need	
  to	
  go	
  check	
  the	
  GUI	
  a‚er	
  each	
  deployment	
  

*	
  Last	
  minute	
  slide	
  hack	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

20	
  
WebAPI	
  to	
  the	
  rescue…	
  again	
  
§ 

Features	
  added	
  to	
  the	
  WebAPI	
  allow	
  registered	
  logs	
  to	
  be	
  remotely	
  read	
  
§ 
§ 

logsReadLines	
  
logsGetLogfile	
  

§ 

We	
  can	
  finally	
  integrate	
  log	
  output	
  into	
  our	
  Jenkins	
  reports	
  	
  

§ 

Just	
  a	
  few	
  problems	
  
§ 
§ 
§ 

Finding	
  the	
  “run	
  once”	
  node	
  	
  
These	
  methods	
  are	
  not	
  implemented	
  in	
  zs-­‐manage	
  (yet)	
  
Wri>ng	
  the	
  code	
  (I	
  haven’t	
  had	
  the	
  >me	
  yet)	
  

Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  

20/11/13	
  

21	
  
Thank	
  you	
  very	
  much	
  for	
  your	
  aaen>on	
  
www.leaermaschine.com	
  

www.novadex.com	
  
	
  

Please	
  scan	
  this	
  	
  
…and	
  tell	
  me	
  where	
  it	
  goes	
  
	
  

Honestly,	
  marke>ng	
  wouldn’t	
  tell	
  me!	
  
	
  
	
  
	
  
Eric	
  Ritchie	
  
Novadex	
  GmbH	
  
DevOps	
  Engineer	
  
	
  
hDps://joind.in/9926	
  
Stuagarter	
  Straße	
  59	
  
	
  
74321	
  Bie>gheim-­‐Bissingen	
  
+49	
  (0)	
  7142	
  /	
  788905-­‐0	
  
Germany	
  
eric.ritchie@novadex.com	
  
	
  
	
  
	
  
Novadex	
  GmbH	
  2013.	
  All	
  rights	
  reserved,	
  also	
  regarding	
  any	
  disposal,	
  exploita>on,	
  reproduc>on,	
  edi>ng,	
  
	
  	
  
20/11/13	
  
distribu>on,	
  as	
  well	
  as	
  in	
  the	
  event	
  of	
  applica>ons	
  for	
  industrial	
  property	
  rights.	
  
	
  
	
  

22	
  

Weitere ähnliche Inhalte

Andere mochten auch

José Castro Gonzalez - escultor
José Castro Gonzalez - escultorJosé Castro Gonzalez - escultor
José Castro Gonzalez - escultorJosé Castro Basso
 
Impact Investor FAQ's - Simcoe Green Investments
Impact Investor FAQ's - Simcoe Green InvestmentsImpact Investor FAQ's - Simcoe Green Investments
Impact Investor FAQ's - Simcoe Green InvestmentsEpic
 
WWF Antlantik Wald 2011
WWF Antlantik Wald 2011WWF Antlantik Wald 2011
WWF Antlantik Wald 2011Gabriela Peng
 
Sección N2, Equipo 2
Sección N2, Equipo 2Sección N2, Equipo 2
Sección N2, Equipo 2BQRazetti2014
 
Diari del 11 de maig de 2015
Diari del 11 de maig de 2015Diari del 11 de maig de 2015
Diari del 11 de maig de 2015diarimes
 
ROBIN WILLIAMS Death from ADR article
ROBIN WILLIAMS Death from ADR articleROBIN WILLIAMS Death from ADR article
ROBIN WILLIAMS Death from ADR articleRay Gebauer
 
SISTEMA DE DETECCIÓN DE ALARMAS DE VIDEOVIGILANCIA BASADO EN ANÁLISIS SEMÁNTICO
SISTEMA DE DETECCIÓN DE ALARMAS DE VIDEOVIGILANCIA BASADO EN ANÁLISIS SEMÁNTICOSISTEMA DE DETECCIÓN DE ALARMAS DE VIDEOVIGILANCIA BASADO EN ANÁLISIS SEMÁNTICO
SISTEMA DE DETECCIÓN DE ALARMAS DE VIDEOVIGILANCIA BASADO EN ANÁLISIS SEMÁNTICOTELECOM I+D 2011
 
COOTAXIM PORTAL TURISTICO DEL EJE CAFETERO / REGLAMENTO DEL PROGRAMA DE SALU...
COOTAXIM PORTAL TURISTICO DEL EJE CAFETERO /  REGLAMENTO DEL PROGRAMA DE SALU...COOTAXIM PORTAL TURISTICO DEL EJE CAFETERO /  REGLAMENTO DEL PROGRAMA DE SALU...
COOTAXIM PORTAL TURISTICO DEL EJE CAFETERO / REGLAMENTO DEL PROGRAMA DE SALU...cootaxim
 
Seminar Marktforschung: Social Media-Strategien in der Medienindustrie
Seminar Marktforschung: Social Media-Strategien in der MedienindustrieSeminar Marktforschung: Social Media-Strategien in der Medienindustrie
Seminar Marktforschung: Social Media-Strategien in der MedienindustrieMarco Jakob
 
Digital Business: Communication and Collaboration Introduction
Digital Business: Communication and Collaboration IntroductionDigital Business: Communication and Collaboration Introduction
Digital Business: Communication and Collaboration IntroductionDigital Business
 
Magniflex broushure 2016
Magniflex broushure 2016Magniflex broushure 2016
Magniflex broushure 2016Adrian Sentes
 
Admon efectiva del tiempo
Admon efectiva del tiempoAdmon efectiva del tiempo
Admon efectiva del tiempoMagda Martinez
 
Geometria e topologia - Enciclopedia Einaudi [1982]
Geometria e topologia - Enciclopedia Einaudi [1982]Geometria e topologia - Enciclopedia Einaudi [1982]
Geometria e topologia - Enciclopedia Einaudi [1982]sabbioso
 
Eliminacion de antecedentes DL.409
Eliminacion de antecedentes DL.409Eliminacion de antecedentes DL.409
Eliminacion de antecedentes DL.409Pato Peralta
 
El maravilloso mundo del agua
El maravilloso mundo del aguaEl maravilloso mundo del agua
El maravilloso mundo del aguaSILARA
 

Andere mochten auch (20)

José Castro Gonzalez - escultor
José Castro Gonzalez - escultorJosé Castro Gonzalez - escultor
José Castro Gonzalez - escultor
 
Impact Investor FAQ's - Simcoe Green Investments
Impact Investor FAQ's - Simcoe Green InvestmentsImpact Investor FAQ's - Simcoe Green Investments
Impact Investor FAQ's - Simcoe Green Investments
 
WWF Antlantik Wald 2011
WWF Antlantik Wald 2011WWF Antlantik Wald 2011
WWF Antlantik Wald 2011
 
Sección N2, Equipo 2
Sección N2, Equipo 2Sección N2, Equipo 2
Sección N2, Equipo 2
 
Diari del 11 de maig de 2015
Diari del 11 de maig de 2015Diari del 11 de maig de 2015
Diari del 11 de maig de 2015
 
ROBIN WILLIAMS Death from ADR article
ROBIN WILLIAMS Death from ADR articleROBIN WILLIAMS Death from ADR article
ROBIN WILLIAMS Death from ADR article
 
SISTEMA DE DETECCIÓN DE ALARMAS DE VIDEOVIGILANCIA BASADO EN ANÁLISIS SEMÁNTICO
SISTEMA DE DETECCIÓN DE ALARMAS DE VIDEOVIGILANCIA BASADO EN ANÁLISIS SEMÁNTICOSISTEMA DE DETECCIÓN DE ALARMAS DE VIDEOVIGILANCIA BASADO EN ANÁLISIS SEMÁNTICO
SISTEMA DE DETECCIÓN DE ALARMAS DE VIDEOVIGILANCIA BASADO EN ANÁLISIS SEMÁNTICO
 
COOTAXIM PORTAL TURISTICO DEL EJE CAFETERO / REGLAMENTO DEL PROGRAMA DE SALU...
COOTAXIM PORTAL TURISTICO DEL EJE CAFETERO /  REGLAMENTO DEL PROGRAMA DE SALU...COOTAXIM PORTAL TURISTICO DEL EJE CAFETERO /  REGLAMENTO DEL PROGRAMA DE SALU...
COOTAXIM PORTAL TURISTICO DEL EJE CAFETERO / REGLAMENTO DEL PROGRAMA DE SALU...
 
Seminar Marktforschung: Social Media-Strategien in der Medienindustrie
Seminar Marktforschung: Social Media-Strategien in der MedienindustrieSeminar Marktforschung: Social Media-Strategien in der Medienindustrie
Seminar Marktforschung: Social Media-Strategien in der Medienindustrie
 
Sistema solar
Sistema solarSistema solar
Sistema solar
 
Digital Business: Communication and Collaboration Introduction
Digital Business: Communication and Collaboration IntroductionDigital Business: Communication and Collaboration Introduction
Digital Business: Communication and Collaboration Introduction
 
Annonse i DN 31. mai 2011
Annonse i DN 31. mai 2011Annonse i DN 31. mai 2011
Annonse i DN 31. mai 2011
 
Presentación virtual desktop
Presentación virtual desktopPresentación virtual desktop
Presentación virtual desktop
 
Magniflex broushure 2016
Magniflex broushure 2016Magniflex broushure 2016
Magniflex broushure 2016
 
Boletim 29/11
Boletim 29/11Boletim 29/11
Boletim 29/11
 
Admon efectiva del tiempo
Admon efectiva del tiempoAdmon efectiva del tiempo
Admon efectiva del tiempo
 
Geometria e topologia - Enciclopedia Einaudi [1982]
Geometria e topologia - Enciclopedia Einaudi [1982]Geometria e topologia - Enciclopedia Einaudi [1982]
Geometria e topologia - Enciclopedia Einaudi [1982]
 
Eliminacion de antecedentes DL.409
Eliminacion de antecedentes DL.409Eliminacion de antecedentes DL.409
Eliminacion de antecedentes DL.409
 
El maravilloso mundo del agua
El maravilloso mundo del aguaEl maravilloso mundo del agua
El maravilloso mundo del agua
 
Propharma Company Profile V8
Propharma Company Profile V8Propharma Company Profile V8
Propharma Company Profile V8
 

Ähnlich wie Jenkins entwined with deployment and pragmatism

Full stack development best practice and toolset
Full stack development best practice and toolsetFull stack development best practice and toolset
Full stack development best practice and toolsetReid Lai
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Andreas Koop
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)enpit GmbH & Co. KG
 
Docker Security workshop slides
Docker Security workshop slidesDocker Security workshop slides
Docker Security workshop slidesDocker, Inc.
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis OverviewLeo Lorieri
 
Sap Solman Instguide Dba Cockpit Setup
Sap Solman Instguide Dba Cockpit SetupSap Solman Instguide Dba Cockpit Setup
Sap Solman Instguide Dba Cockpit Setupwlacaze
 
Industrialization, be fast be furious!
Industrialization, be fast be furious!Industrialization, be fast be furious!
Industrialization, be fast be furious!Patrick Morin
 
Build your first DApp using Substrate Framework - Part I
Build your first DApp using Substrate Framework - Part IBuild your first DApp using Substrate Framework - Part I
Build your first DApp using Substrate Framework - Part IKnoldus Inc.
 
Pragmatic Pipeline Security
Pragmatic Pipeline SecurityPragmatic Pipeline Security
Pragmatic Pipeline SecurityJames Wickett
 
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...Patrick Chanezon
 
Developing with-devstack
Developing with-devstackDeveloping with-devstack
Developing with-devstackDeepak Garg
 
Developing faster than ever (Liferay DEVCON 2017)
Developing faster than ever (Liferay DEVCON 2017)Developing faster than ever (Liferay DEVCON 2017)
Developing faster than ever (Liferay DEVCON 2017)Sébastien Le Marchand
 
IzPack at LyonJUG'11
IzPack at LyonJUG'11IzPack at LyonJUG'11
IzPack at LyonJUG'11julien.ponge
 
ABS 2012 - Android Device Porting Walkthrough
ABS 2012 - Android Device Porting WalkthroughABS 2012 - Android Device Porting Walkthrough
ABS 2012 - Android Device Porting WalkthroughBenjamin Zores
 
From Dev to DevOps - ApacheCON NA 2011
From Dev to DevOps - ApacheCON NA 2011From Dev to DevOps - ApacheCON NA 2011
From Dev to DevOps - ApacheCON NA 2011Carlos Sanchez
 
AHMED JASSAT SOUTH ARICAN ORACLE USER GROUP PRESENTATION
AHMED JASSAT SOUTH ARICAN ORACLE USER GROUP PRESENTATIONAHMED JASSAT SOUTH ARICAN ORACLE USER GROUP PRESENTATION
AHMED JASSAT SOUTH ARICAN ORACLE USER GROUP PRESENTATIONZahid02
 
Creating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with ChaperoneCreating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with ChaperoneGary Wisniewski
 

Ähnlich wie Jenkins entwined with deployment and pragmatism (20)

Full stack development best practice and toolset
Full stack development best practice and toolsetFull stack development best practice and toolset
Full stack development best practice and toolset
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
 
The Nix project
The Nix projectThe Nix project
The Nix project
 
Docker Security workshop slides
Docker Security workshop slidesDocker Security workshop slides
Docker Security workshop slides
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
 
Sap Solman Instguide Dba Cockpit Setup
Sap Solman Instguide Dba Cockpit SetupSap Solman Instguide Dba Cockpit Setup
Sap Solman Instguide Dba Cockpit Setup
 
Industrialization, be fast be furious!
Industrialization, be fast be furious!Industrialization, be fast be furious!
Industrialization, be fast be furious!
 
Build your first DApp using Substrate Framework - Part I
Build your first DApp using Substrate Framework - Part IBuild your first DApp using Substrate Framework - Part I
Build your first DApp using Substrate Framework - Part I
 
Pragmatic Pipeline Security
Pragmatic Pipeline SecurityPragmatic Pipeline Security
Pragmatic Pipeline Security
 
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
 
Developing with-devstack
Developing with-devstackDeveloping with-devstack
Developing with-devstack
 
Developing faster than ever (Liferay DEVCON 2017)
Developing faster than ever (Liferay DEVCON 2017)Developing faster than ever (Liferay DEVCON 2017)
Developing faster than ever (Liferay DEVCON 2017)
 
IzPack at LyonJUG'11
IzPack at LyonJUG'11IzPack at LyonJUG'11
IzPack at LyonJUG'11
 
ABS 2012 - Android Device Porting Walkthrough
ABS 2012 - Android Device Porting WalkthroughABS 2012 - Android Device Porting Walkthrough
ABS 2012 - Android Device Porting Walkthrough
 
From Dev to DevOps - ApacheCON NA 2011
From Dev to DevOps - ApacheCON NA 2011From Dev to DevOps - ApacheCON NA 2011
From Dev to DevOps - ApacheCON NA 2011
 
RDO-Packstack Workshop
RDO-Packstack Workshop RDO-Packstack Workshop
RDO-Packstack Workshop
 
AHMED JASSAT SOUTH ARICAN ORACLE USER GROUP PRESENTATION
AHMED JASSAT SOUTH ARICAN ORACLE USER GROUP PRESENTATIONAHMED JASSAT SOUTH ARICAN ORACLE USER GROUP PRESENTATION
AHMED JASSAT SOUTH ARICAN ORACLE USER GROUP PRESENTATION
 
Tick
TickTick
Tick
 
Creating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with ChaperoneCreating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with Chaperone
 

Kürzlich hochgeladen

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your QueriesExploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your QueriesSanjay Willie
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 

Kürzlich hochgeladen (20)

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your QueriesExploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
Exploring ChatGPT Prompt Hacks To Maximally Optimise Your Queries
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 

Jenkins entwined with deployment and pragmatism

  • 1. Jenkins  entwined  with  deployment     and  pragma>sm         Eric  Ritchie   DevOps  Engineer   Novadex       +49  (0)  7142  /  788905-­‐0   eric.ritchie@novadex.com           Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.    
  • 2. Eric  Ritchie  bids  you  welcome!   Never  heard  of  him?   Aside  from  looking  like  this,  he  is:   §  currently  working  as  DevOps  Engineer  and     System  Administrator  at  Novadex  GmbH   §  a  Zend  Framework  and  PHP  ZCE  &  MySQL  DBA   §  a  Linux  System  Administrator  with  18  years  experience   §  a  PHP  developer  since  version  3.0.18  (or  so)   §  known  to  speak  at  a  conference  or  two     Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   2  
  • 3. LeaerMaschine:  Custom-­‐tailored  Communica>on   Personalized  data  stream     Cross-­‐Channel  Output   Data  protec>on   Security   Content  management   E-­‐commerce  integra>on   CRM  integra>on   Portal  Op>on   Campaign  management   Collabora>on       Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   3  
  • 4. What  I  read  in  a  book  once…   „DevOPs  should  aim  for  10  deployments  per  day“   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   4  
  • 5. Novadex’s  key  tool:  Jenkins   §  Great  for  Con?nuous  Integra?on   §  Can  hide  complex  processes  behind  a  nice  buDon   §  Deployment  remains  one  of  those  complex  processes   §  §  Requires  a  lot  of  scrip>ng/manual  work   This  risks  our  deployment  goal   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   5  
  • 6. An  example  of  that  scrip>ng    <target  name="package">                  <echo  message="...using  UPSTREAM_BUILD_NUMBER  received  from  triggering  job  for  packagenaming.  UPSTREAM_BUILD_NUMBER  is  [${UPSTREAM_BUILD_NUMBER}]"/>                    <!-­‐-­‐  leaermaschine-­‐complete  packaging  -­‐-­‐>                    <!-­‐-­‐  wipe  the  dir  from  possible  previous  copy  opera>on  -­‐-­‐>                  <delete  includeemptydirs="true">                          <fileset  dir="${package.contents.basedir}"  includes="**/*"/>                          <fileset  dir="${package.basedir}/DEBIAN"  includes="**/*"/>                  </delete>                    <!-­‐-­‐  prepare  debian  control  file  -­‐-­‐>                  <copy  todir="${package.basedir}/DEBIAN"  overwrite="true">                          <fileset  file="resource/package/test/control"/>                          <filterset  begintoken="[["  endtoken="]]">                                  <filter  token="version"  value="${UPSTREAM_BUILD_NUMBER}-­‐1"/>                                  <filter  token="name"  value="leaermaschine-­‐complete"/>                                  <filter  token="depends"  value=""/>                                  <filter  token="descrip>on"  value="Complete  Leaermaschine  applica>on"/>                          </filterset>                  </copy>                    <!-­‐-­‐  copy  pos>nstalla>on  script  -­‐-­‐>                  <copy  file="${basedir}/resource/package/test/pos>nst_lm"  tofile="${package.basedir}/DEBIAN/pos>nst"/>                  <chmod  file="${package.basedir}/DEBIAN/pos>nst"  perm="775"/>                    <copy  todir="${package.contents.basedir}">                          <fileset  dir="${export.basedir}">                                  <snip>                          </fileset>                  </copy>                    <exec  executable="sudo"  dir="${working.basedir}"  failonerror="true">                          <arg  line="sudo  dpkg  -­‐b  ${package.basedir}  ${dist.basedir}/leaermaschine-­‐complete_${UPSTREAM_BUILD_NUMBER}-­‐1_all.deb"/>                  </exec>          </target>   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   6  
  • 7. Deployment  v1.x?   §  Applica?on  bundled  into  a  .deb  package   §  §  §  As  shown  on  the  previous  slide  (yeah,  that’s  what  it  did)   Shell  scrip>ng  available  for  in  deployment  manipula>ons   SCP’d  to  target  machine,  installed  via  SSH  exec     §  Need  to  set  up  SSL  cer>ficates  to  allow  password  free  access   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   7  
  • 8. Problems?   §  Who  is  comfortable  with  bash  shell  scrip?ng?   §  What  happens  when  something  goes  wrong?     §  §  Not  really  all  that  cluster  friendly   §  §  Each  version  of  the  .deb  package  is  cached     Need  to  grant  unlimited  access  to  live  servers,  argh!   §  §  Ok,  we  have  Chef/Puppet  if  we  like  overkill   Disk  cluDer   §  §  Ever  tried  to  roll  back  a  copied  .deb  package  in  a  hurry?   Remember  that  SSL  cer>ficate  we  installed?     What  if  we  need  to  support  Red  Hat  also?   §  Hypothe>cal  in  the  case  of  Novadex,  but  s>ll  a  valid  problem.   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   8  
  • 9. Enter  Zend  Server  deployment  (and  me)   Cluster/Cloud  ready,  plaxorm  agnos>c,  PHP  scrip>ng   and  version  handling  with  integrated  roll  back.   Yes,  I  used  to  work  for  Zend  ;)   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   9  
  • 10. Tale  of  the  liale  known  tool:  zs-­‐manage   §  We  all  have  heard  about  the  Web  API,  right?   §  §  We  have  had  command  line  deployment  tools  since  day  one     §  §  But  nobody  knew  about  them,  which  is  a  pity   zs-­‐manage  has  many  advantages   §  §  §  §  You  may  be  forgiven  for  thinking  it  is  a  new  thing   Can  leverage  all  deployment  features   Does  not  rely  on  SSL  cer>ficates  for  security   Same  commands  for  local/cluster/cloud  deployment   But  beware,  there  are  some  caveats   §  Pragma>sm  to  follow...   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   10  
  • 11. Let’s  empower  Jenkins…    <!-­‐-­‐  retrieve  the  app.id  for  the  applica>on,  specified  by  app.name.  may  be  empty  if  app  hasn't  already  deployed    -­‐-­‐>                  <exec  executable="bash"  dir="${basedir}"  outputproperty="app.id"  errorproperty="err"  failonerror="true">                          <arg  value="-­‐c"  />                          <arg  value="/usr/local/zend/bin/zs-­‐manage  app-­‐get-­‐status                                  -­‐N  ${zs.api.name}                                  -­‐U  ${zs.url}                                  -­‐K  ${zs.api.key}  2&gt;&amp;1  |  grep  &quot;APPINFOs.*${app.name}.*&quot;  |  awk  '{print  $2}'"  />                  </exec>                  <if>                    <equals  arg1="${app.id}"  arg2=""  />                    <then>                        <echo  message="Couldn't  determine  app.id  for  app.name  '${app.name}'  -­‐  preparing  ini>al  deployment  of  applica>on  ..."  />                          <!-­‐-­‐  deploy  applica>on  via  zend  server  command  -­‐-­‐>                          <exec  executable="/usr/local/zend/bin/zs-­‐manage"  dir="/tmp"  failonerror="true">                                  <arg  line="app-­‐deploy                                          -­‐u  &quot;NDX_ENV=${zs.ndx.env}&quot;                                          -­‐c                                          -­‐b  hap://${app.name}/                                          -­‐a  ${app.name}                                          -­‐p  ${zs.package.des>na>ondir}/${zs.package.name}                                          -­‐N  ${zs.api.name}                                          -­‐K  ${zs.api.key}                                          -­‐U  ${zs.url}"  />                          </exec>                    </then>                    <else>                          <echo  message="app.name  '${app.name}',  app.id  is  ${app.id}  -­‐  preparing  the  update  of  applica>on  ..."  />                          <!-­‐-­‐  update  applica>on  via  zend  server  command  -­‐-­‐>                          <exec  executable="/usr/local/zend/bin/zs-­‐manage"  dir="/tmp"  failonerror="true">                                  <arg  line="app-­‐update                                          -­‐u  &quot;NDX_ENV=${zs.ndx.env}&quot;                                          -­‐i  ${app.id}                                          -­‐p  ${zs.package.des>na>ondir}/${zs.package.name}                                          -­‐N  ${zs.api.name}                                          -­‐K  ${zs.api.key}                                          -­‐U  ${zs.url}"  />                          </exec>                    </else>                  </if>   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   11  
  • 12. Crea>ng  the  package  to  be  deployed   §  We  have  a  choice   §  §  §  §  Zend  Studio  -­‐  a  manual  process   zdpack  -­‐  Zend  standard   zip  -­‐  needs  no  introduc>on   Novadex  have  used  zip  at  ?mes   §  But  currently  use  the  following  code                  <exec  executable="/usr/local/zend/bin/zdpack"  dir="${working.basedir}"  failonerror="true">                          <!-­‐-­‐  NOTE:  name  of  the  created  package  is  the  name  specified  in  deployment.xml  name-­‐tag  -­‐-­‐>                          <arg  line="pack                                  -­‐-­‐src-­‐dir=${package.contents.basedir}                                  -­‐-­‐scripts-­‐dir=${basedir}/resource/zs_deploy_new/scripts                                  -­‐-­‐package-­‐descriptor=${working.basedir}/deployment.xml                                  -­‐-­‐output-­‐dir=${working.basedir}"  />                  </exec>                  <!-­‐-­‐  rename  created  package  to  reflect  version  of  package  contents  -­‐-­‐>                  <move  file="${working.basedir}/${app.name}.zpk"  tofile="${working.basedir}/${zs.package.name}"  overwrite="true"/>                    <!-­‐-­‐  copy  the  new  package  from  temp  loca>on  to  package  directory  -­‐-­‐>                  <copy  file="${working.basedir}/${zs.package.name}"  todir="${zs.package.des>na>ondir}"  overwrite="true"/>   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   12  
  • 13. Sadly,  size  does  maaer   §  You  don’t  leave  your  doors  unlocked  when  you  leave  home   §  §  Web  API  could  be  an  aDack  vector     §  §  §  Most  admins  are  equally  careful  with  their  servers   Which  is  why  Zend  take  steps  to  secure  it   Web  API  calls  must  be  signed  with,  amongst  other  informa>on,  a  >mestamp   To  help  prevent  replay  aDacks,  calls  must  complete  within  300  seconds   §  §  This  security  feature  can  shoot  us  in  the  foot   In  short,  the  network  speed  determines  our  maximum  packet  size   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   13  
  • 14. Working  around  the  size  issue   §  No  perfect  solu?ons,  yet   §  §  I  am  working  on  Zend  ;)   But  we  can  apply  some  pragma?sm   §  §  §  §  §  §  Package  can  be  broken  into  sub-­‐packages   Zend  Deployment  has  a  new  Library  feature,  use  it   Pull  instead  of  push   Upgrade  the  pipe   Time  travel   Or,  emulate  the  GUI   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   14  
  • 15. Our  solu>on     GUI  emula?on:  It  works  for  us    <echo  message="copying  ${zs.package.name}  to  ${remote.hostname}"  />                  <scp  file="${zs.package.des>na>ondir}/${zs.package.name}"                          todir="${remote.user}@${remote.hostname}:${remote.dir}"                          keyfile="${remote.keyfile}"                  />                    <echo  message="app.name  '${app.name}',  app.id  is  '${app.id}'  -­‐  preparing  the  update  of  applica>on  ..."  />                  <!-­‐-­‐  execute  zs-­‐manage  locally  on  host  where  package  should  be  deployed!  -­‐-­‐>                  <sshexec                          host="${remote.hostname}"                          username="${remote.user}"                          keyfile="${remote.keyfile}"                          command="/usr/local/zend/bin/zs-­‐manage  app-­‐update  -­‐u  &quot;NDX_ENV=${zs.ndx.env}&quot;  -­‐i  ${app.id}                                                                        -­‐p  ${remote.dir}/${zs.package.name}  -­‐N  ${zs.api.name}  -­‐K  ${zs.api.key}  -­‐U  ${remote.webapi.url}"                  />   !   Just  remember:  SCP/SSH  may  not  be  allowed  by  your  opera>ons  team.                                                              You  may  need  another  solu>on   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     !   20/11/13   15  
  • 16. Memory  and  lots  of  it   §  Ques?on:  Where  does  all  this  deployment  data  go?   §  §  The  GUI  allocates  memory  equivalent  to  three  ?mes  the  packet  size     §  §  Hint:  The  WebAPI  is  part  of  the  GUI   Since  the  data  is  loaded,  copied  and  finally  unpacked  (don’t  ask)   Where  is  the  GUI’s  memory  limit  configured?   §  §  Not  in  the  GUI,  that  would  spoil  the  fun  ;)   Can  you  guess?   Answer:     The  memory_limit  variable  in:   /usr/local/zend/gui/lighapd/etc/php-­‐fcgi.ini   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   16  
  • 17. Aaack  of  the  cluster   §  Zend  deployment  can  be  hard  to  synchronise   §  §  An  extreme  case  is  the  “run  once”  node   §  §  In  other  words,  you  cannot  guarantee  when  all  nodes  will  run  the     same  version  of  the  applica>on   Database  migra>ons  are  usually  performed  here,  so  deployment  is  slower   This  caused  problems  with  our  “In  maintenance”  page   §  Time  for  some  extreme  pragma>sm…   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   17  
  • 18. I  am  a  Job  Queue  fan…  so  I  wrote  this   //  Sanity  check   if  (!class_exists('ZendJobQueue')){          logger("Job  Queue  seems  to  be  disabled!");          exit(1);   }     if  (getenv("ZS_RUN_ONCE_NODE")  ==  1)  {          $name  =  DEPLOYMENT_JOB_BASENAME.$appCurrentVersion;          $queue  =  new  ZendJobQueue();                    //  Before  scheduling  our  job,  just  make  sure  that  it  has  not  been  scheduled  before          $total  =  null;          $jobArray  =  $queue-­‐>getJobsList(array('name'  =>  $name),  $total);          if  ($total  !=  0)  {                  foreach($jobArray  AS  $job)  {                          $queue-­‐>removeJob($job['id']);                  }          }                    //  Schedule  the  job  script  to  run  a  long  >me  in  the  future  (since  we  don't  really  need  it  to  run)          $runAt  =  date('Y-­‐m-­‐d  H:i:s',  strto>me('+7  days'));                    $semaphoreJobId  =  $queue-­‐>createHapJob('hap://www.google.de/search?q=dummy',                                                                                                                                                                            array(),  array('name'  =>  $name,  'schedule_?me'  =>  $runAt));          if  (!$semaphoreJobId)  {                  logger("Semphore  job  was  not  accepted  in  the  queue!");                  exit(1);          }   }   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   18  
  • 19. …and  this  at  the  end  of  the  script   if  (getenv("ZS_RUN_ONCE_NODE")  ==  1)  {          //  We  are  the  RUN  ONCE  script  so  clear  the  semaphore          $queue-­‐>removeJob($semaphoreJobId);   }   else  {          //  We  are  not  the  RUN  ONCE  script  so  wait  for  it  to  clear  the  semaphore          $queue  =  new  ZendJobQueue();            $total  =  1;          $status  =  ZendJobQueue::JOB_STATUS_PENDING  |  ZendJobQueue::JOB_STATUS_SCHEDULED;          while  ($total  !=  0)  {                  $jobArray  =  $queue-­‐>getJobsList(array('name'  =>  $name,  'status'  =>  $status),  $total);                  sleep(1);          }   }   We  now  plan  to  use  an  Nginx,  that  spontaneously  appeared  in  our  architecture,   to  set  our  maintenance  page.  Nevertheless,  it  was  s>ll  a  cool  idea  ;)   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   19  
  • 20. Finding  out  what  is  happening   §  So  far  so  good,  but  we  s?ll  don’t  have  true  integra?on   §  §  Jenkins  has  no  liale*  visibility  over  the  deployment  process   We  can  log  the  output  of  our  deployment  scripts   §  §  §  But  these  are  not  available  to  Jenkins   We  can  make  them  available  to  the  GUI,  at  least,  by  adding  the  paths  to  the   GUI_AVAILABLE_LOGS  table  in  the  Zend  Server  database   More  convenient,  but  we  s>ll  need  to  go  check  the  GUI  a‚er  each  deployment   *  Last  minute  slide  hack   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   20  
  • 21. WebAPI  to  the  rescue…  again   §  Features  added  to  the  WebAPI  allow  registered  logs  to  be  remotely  read   §  §  logsReadLines   logsGetLogfile   §  We  can  finally  integrate  log  output  into  our  Jenkins  reports     §  Just  a  few  problems   §  §  §  Finding  the  “run  once”  node     These  methods  are  not  implemented  in  zs-­‐manage  (yet)   Wri>ng  the  code  (I  haven’t  had  the  >me  yet)   Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.     20/11/13   21  
  • 22. Thank  you  very  much  for  your  aaen>on   www.leaermaschine.com   www.novadex.com     Please  scan  this     …and  tell  me  where  it  goes     Honestly,  marke>ng  wouldn’t  tell  me!         Eric  Ritchie   Novadex  GmbH   DevOps  Engineer     hDps://joind.in/9926   Stuagarter  Straße  59     74321  Bie>gheim-­‐Bissingen   +49  (0)  7142  /  788905-­‐0   Germany   eric.ritchie@novadex.com         Novadex  GmbH  2013.  All  rights  reserved,  also  regarding  any  disposal,  exploita>on,  reproduc>on,  edi>ng,       20/11/13   distribu>on,  as  well  as  in  the  event  of  applica>ons  for  industrial  property  rights.       22