Automatize-*
  Crif Tech Days 2012



  Boris Bucha
Tech days 2011
1. Get it           2. Configure it

3. Build it                           4. Run it




                 5. Deploy it
“There should be two tasks for a human being to
perform to deploy software into a development,
test, or production environment: to pick the
version and environment and to press the
“deploy” button.”




                                 [Continuous Delivery]
What we aim for?

• Build application binaries – ant, make…   √

• Configuration       (tools ??)            X
• Database            (tools ??)            X
• Delivery            (tools ??)            X
Why?

•   NHibernate:   63K LoC
•   Bailiffs:     157K LoC
•   R#:           500K LoC
•   BAM:          1M LoC
•   Russian CB:   1.3M LoC
•   .NET4:        2M LoC
VCS almighty
• DB scripts … all configurations … deployment
  scripts … application source code

                 EVERYTHING!
Antipattern #1
• Manual Configuration Management of
  Production Environments
  – Hours to enable new team member
  – Hours to install any new environment




  – Hours to get WHY it doesn’t work on my PC ?!
Infrastructure as code
• “Infrastructure as code is an approach whereby infrastructure
  configuration is scripted or described by files
  that are stored in version control, and
  changes are pushed out to the datacenter in
  a controlled manner. This parallels the discipline of
  source control and build promotion used in software
  development, hence ‘as code’” [http://www.thoughtworks.com/articles/technology-
  radar-january-2011]
Configizer

        +




       Configize !
Configizer v2
• Adopted by: Bailiffs, Elixir, Kolikmam, BAM

• New features:
  –   Hidden passwords
  –   Better parameters factoring possibilities
  –   Encryption of critical sections
  –   Owaspize

• Thank you: Ondrej, Ľuboš, Roman, Andrej
Antipattern #2
• Deploying Software Manually
  – Diffing Test DB with some “prod-like” DB
  – Long installation instructions
  – Long delivery cycles
  – Broken productions




  – Evenings / Weekends in office fixing
Deliver often

•   MVP hype [Agile-*, Lean-*] -> feedback
•   Incremental DB patches (*-Migrations libs)
•   Automatic package build –best documentation
•   Enterprise software on any unplugged laptop
• Feature toggles (use feature branches not version branches)




                  “If it hurst …”
So again
1. Get it        2. Configure it

3. Build it                        4. Run it




              5. Deploy it
Not there yet
• Automatic setup of web applications (and services
  like Mystic) – mitigated by F5 execution

• Visible dashboards

• 100% host environment control (Puppet -
  http://projects.puppetlabs.com/projects/puppet)
• “Repeatability and reliability derive from two
  principles: automate almost everything, and
  keep everything you need to build, deploy,
  test, and release your application in version
  control.“



                                  [Continuous Delivery]

Automatize everything

  • 1.
    Automatize-* CrifTech Days 2012 Boris Bucha
  • 2.
    Tech days 2011 1.Get it 2. Configure it 3. Build it 4. Run it 5. Deploy it
  • 4.
    “There should betwo tasks for a human being to perform to deploy software into a development, test, or production environment: to pick the version and environment and to press the “deploy” button.” [Continuous Delivery]
  • 5.
    What we aimfor? • Build application binaries – ant, make… √ • Configuration (tools ??) X • Database (tools ??) X • Delivery (tools ??) X
  • 6.
    Why? • NHibernate: 63K LoC • Bailiffs: 157K LoC • R#: 500K LoC • BAM: 1M LoC • Russian CB: 1.3M LoC • .NET4: 2M LoC
  • 7.
    VCS almighty • DBscripts … all configurations … deployment scripts … application source code EVERYTHING!
  • 8.
    Antipattern #1 • ManualConfiguration Management of Production Environments – Hours to enable new team member – Hours to install any new environment – Hours to get WHY it doesn’t work on my PC ?!
  • 9.
    Infrastructure as code •“Infrastructure as code is an approach whereby infrastructure configuration is scripted or described by files that are stored in version control, and changes are pushed out to the datacenter in a controlled manner. This parallels the discipline of source control and build promotion used in software development, hence ‘as code’” [http://www.thoughtworks.com/articles/technology- radar-january-2011]
  • 10.
    Configizer + Configize !
  • 11.
    Configizer v2 • Adoptedby: Bailiffs, Elixir, Kolikmam, BAM • New features: – Hidden passwords – Better parameters factoring possibilities – Encryption of critical sections – Owaspize • Thank you: Ondrej, Ľuboš, Roman, Andrej
  • 12.
    Antipattern #2 • DeployingSoftware Manually – Diffing Test DB with some “prod-like” DB – Long installation instructions – Long delivery cycles – Broken productions – Evenings / Weekends in office fixing
  • 13.
    Deliver often • MVP hype [Agile-*, Lean-*] -> feedback • Incremental DB patches (*-Migrations libs) • Automatic package build –best documentation • Enterprise software on any unplugged laptop • Feature toggles (use feature branches not version branches) “If it hurst …”
  • 14.
    So again 1. Getit 2. Configure it 3. Build it 4. Run it 5. Deploy it
  • 15.
    Not there yet •Automatic setup of web applications (and services like Mystic) – mitigated by F5 execution • Visible dashboards • 100% host environment control (Puppet - http://projects.puppetlabs.com/projects/puppet)
  • 16.
    • “Repeatability andreliability derive from two principles: automate almost everything, and keep everything you need to build, deploy, test, and release your application in version control.“ [Continuous Delivery]

Editor's Notes

  • #6 - A working software application can be usefully decomposed into four components: executable code, configuration, host environment, and data.
  • #13 - In many software projects, release is a manually intensive process.
  • #14 Create a Repeatable, Reliable Process for Releasing SoftwareAs releases become less fraught, it is easier to consider things like the agile ideal of a release at the end of each iteration. Even if that isn’t appropriate for a particular project, it means that we get our weekends back.These days, many companies are putting out multiple releases in a day. This is possible even with large projects with complex codebasesOur highest priority is to satisfy the customer through early and continuous delivery of valuable softwareWhen deployments aren’t fully automated, errors will occur every time they are performed.