SlideShare a Scribd company logo
1 of 46
Download to read offline
Internal
Facilitating continuous delivery in a
FinTech world with Salt, Jenkins, Nexus
and Chocolatey
Michel Buczynski, DevOps Coach
TD Securities
Internal
Disclaimer
While this session is mainly based on work done for various
employers and my contemporary observations, this session
will focus on my personal opinions. As such, material herein
is not necessarily representative of my present or my
previous employers' opinion.
Internal
Who am I
Born in '73 and raised in Montreal, work and live in Toronto.
About me:
• I disassembled (hum! Destroy) the family TV at 3 years
old to understand where the images and sounds were
coming from.
• I got my first programming contract at 16.
• I practiced Agile before Agile, and DevOps before
DevOps, and I think I am not alone.
Internal
What I am doing now
DevOps Coach
• Implementation of a tools-chain for Continuous Delivery (CD).
• Define a standardized workflow for the CD pipeline.
• Coach team members on how to properly use the tools-chain
and follow the workflow.
• My goal is to ensure that our team produces, delivers, and
maintains efficient and quality software in the easiest and
fastest possible manner.
Internal
Current Gig
TD Securities is part of the TD Bank Group
• The Toronto-Dominion Bank & its subsidiaries are collectively
known as TD Bank Group (TD). TD is the sixth largest bank in North
America by branches & serves approximately 22 million
customers in a number of locations in key financial centers
around the globe. Over 85,000 TD employees represent the
strongest team in banking. Delivering legendary customer
experiences is who we are & is part of being the Better Bank.
• I am working in the capital markets division (TD Securities);
specifically for the global equity derivatives business.
Internal
FinTech
• FinTech Wikipedia definition:
Financial technology (FinTech or fintech) is the new technology
and innovation that aims to compete with traditional financial
methods in the delivery of financial services.
• FinTech uses the latest IT technologies like Big Data,
IoT, Machine Learning, etc.
• The banking industry is the major provider of financial
services.
• Since the banking industry was one the first users of
computer systems, banks sometimes have to rely on
legacy systems.
Internal
The Challenge of DevOps in the Banking Industry
• The size and the age of the enterprise.
• Regulations, compliance, audits, separation of duties, …
• A varied infrastructure based on both legacy and modern
technologies.
• The use of 3rd party and legacy software.
• New Technology Introduction (NTI).
• Conservative approach with a very strong need for
stability.
• Changes will be always difficult to apply because it is
especially difficult to change the way people works. But, it
is also difficult to make change without changing the way
people work.
Internal
What our Team Does
• We are a cross-functional team dedicated to producing cutting-
edge FinTech software.
• Most of our development is based on FOSS (Free Open Source
Software) framework or platform: Node.JS, Erlang/Elixir, Angular5,
Scala, Python, R and Java.
• Our software architecture is microservice oriented.
• Our system is integrated with some legacy COTS (Commercial
Off-The-Shelf) applications tied to Windows desktop and server.
• Developing in-house software permits us to have more flexible
and adapted software, effectively leveraging our knowledge
capital and reducing our dependency on 3rd parties.
Internal
Our Team's DevOps Journey
A Long Journey Begins with a Single Step
• Most of our application code uses version control (VC) GIT.
• No centralized GIT VC systems employed.
• No automated testing.
• Weekly painful manual deployment. It was honestly an
achievement to have such a short yet manual release
cycle.
Internal
Our Team's DevOps Journey
Today
• Application code, configuration (source) and packaged
artifacts (target) are all in VC.
• Continuous Integration.
• Automated deployments.
• Most of our system configuration is automated.
• Most of the application testing is automated.
Internal
Our Team's DevOps Journey
The Future
• Provide self-serve services and resources for non-
developers. Ex: Release management, pick commit for
release candidate, release notes automation, etc…
• Make automated testing of infrastructure changes.
• Make provisioning automated on all targets.
• Make success metrics visible.
• Make incident responses automated.
Internal
Standardize your Workflow
Everything in VC
• Source code, Source library, Application configs.
• Artifacts, System configuration.
• Package everything, put it in a VC repositories. Especially
what is not your own code.
• The good, the bad and the ugly about .MSI.
• Chocolatey: the solution for Windows.
Internal
Standardize your Workflow
Set a common branching model.
• Create your own or use the standard GitFlow.
• The branching model set relations between the target
environment, the approval process, the version numbering, CI
steps, ...
Internal
Standardize your Workflow
GitFlow
Internal
Standardize your Workflow
Set a common version numbering system
• Chocolatey and Nuget package versioning: SemVer.
• The good, the bad and the ugly about SemVer.
• A solutions the YMX.
Internal
Standardize your Workflow
Chocolatey and Nuget package versioning.
All version Chocolatey and Nuget support SemVer 1.0 :
A specific version number is in the form Major.Minor.Patch[-Suffix], where the components have the following
meanings:
•Major: Breaking changes
•Minor: New features, but backwards compatible
•Patch: Backwards compatible bug fixes only
•-Suffix (optional): a hyphen followed by a string denoting a pre-release version.
Examples:
1.0.1
6.11.1231
4.3.1-rc
2.2.44-beta
11.0.1-alpha
All version Chocolatey and Nuget also support Microsoft Version Numbers:
A specific version number has the a 4 number form: Major.Minor.Buid.Revision
Chocolatey call this form : Package Fix version Notation
Examples: 1.2.0.20181008
Internal
Standardize your Workflow
The good, the bad and the ugly about SemVer.
The good:
• Has release and pre-release version
• Tell you if you need to update:
• MAJOR: Breaking API change
Not safe to update
• MINOR: New features
Safe to update
• PATCH: Bugfixes
Must update
Internal
Standardize your Workflow
The good, the bad and the ugly about SemVer.
The bad:
• With rapid space of CD is difficult to follow MAJOR,
MINOR and PATCH ordering.
• It's assumes that every goes well and arrive on time.
• It's only great once the product is done and tested.
Internal
Standardize your Workflow
The good, the bad and the ugly about SemVer.
The ugly:
• Difficult to automate.
• Need a lots manual intervention.
• With things like versioning of things API, the MAJOR
and MINOR doesn't mean anything for artifacts
version.
• You can always put the major version in the product
name. Ex: X11, Oracle12c and C
Internal
Standardize your workflow
A solution the YMX.
• Inspired on Docker’s versioning scheme
• RELEASE version for master branch: YY.M.N
18.1.9
• RELEASE CANDIDATE Version for release/ and hotfixe/ branch:
YY.M.N-rcX
18.1.9-rc 18.3.2-rc4
• ALPHA Version for feature/ branch: YY.M.N-alpha-DD-hhhhhhh
18.3.3-alpha-08-df81230 for the commit done the Mars 8th 2018
in preparation for third release in Mars 2018
RELEASE CANDIDATE Version for release/ and hotfixe/ branch:
YY.M.N-rcX
Internal
Standardize your Workflow
Clean up and Enforce
• Clean up all your repositories.
• By doing a clean-up, it is the right time to introduce new
tools and processes.
• Train your team to use new tools and teach them how to
apply your workflow and demonstrate why.
• Enforce workflow progressively by applying it, with a small
group of team members and target applications.
Internal
Jenkins 2
• Pipeline as a code.
• Create your own Shared Libraries.
• YMX automatic versioning.
• <Live demo>
Internal
Jenkins 2
Pipeline as a code.
• Pipeline as Code describes a set of features that allow Jenkins
users to define pipelined job processes with code, stored and
versioned in a source repository. These features allow Jenkins to
discover, manage, and run jobs for multiple source repositories
and branches — eliminating the need for manual job creation
and management.
• To use Pipeline as Code, projects must contain a file named
Jenkinsfile in the repository root, which contains a "Pipeline
script."
Internal
Jenkins 2
Create your own Shared Libraries.
• As Pipeline is adopted for more and more projects in an
organization, common patterns are likely to emerge.
Oftentimes it is useful to share parts of Pipelines between
various projects to reduce redundancies and keep code
"DRY".
• Pipeline has support for creating "Shared Libraries" which
can be defined in external source control repositories and
loaded into existing Pipelines
Internal
Jenkins 2
Create your own Shared Libraries.
• Declarative Pipeline
• Scripted Pipeline
Directory structure
The directory structure of a Shared Library repository is as follows:
(root)
+- src # Groovy source files
| +- org
| +- foo
| +- Bar.groovy # for org.foo.Bar class
+- vars
| +- foo.groovy # for global 'foo' variable
| +- foo.txt # help for 'foo' variable
| +- bar.groovy # bar custom step, call def call()
+- resources # resource files (external libraries only)
| +- org
| +- foo
| +- bar.json # static helper data for org.foo.Bar
Internal
Jenkins 2
<Live demo>
Internal
Sonatype Nexus
• Nexus introduction.
• Consideration for Chocolatey.
• <Live demo>
Internal
Sonatype Nexus
Nexus Reposory Manager introduction
• Universal package manager
That give us the ability to apply security and compliance
metrics across all artifact types. Universal package managers
have been referred to as being at the center of a DevOps
toolchain
• Nexus Repository OSS 3.xx, supports those formats:
APT, Composer, Conan, CPAN, Docker, ELPA, Git LFS, Helm,
Maven, npm, NuGet, P2, PyPI, R, Raw, RubyGems, Yum
Internal
Sonatype Nexus
Consideration for Chocolatey.
• Don’t mix Nuget package with Chocolatey package. Even if
Chocolatey is based on the NuGet framework, it doesn’t mean
that they are the same type of package.
• Separated in different repositories, depending on the target.
Users workstations, developer workstations, agents
workstations, servers. You can also create separate repositories
for certain products.
Internal
Sonatype Nexus
<Live demo>
Internal
SaltStack
• Introducing SaltStack
• Salt architecture
• Execute remote or local command
• Salt and Chocolatey.
• Defining the desired States
• Jinja2 and Pillars
• Live demo.
Internal
SaltStack
Introducing SaltStack
• Open-source configuration management software and
remote execution engine.
• Infrastructure as code
• Python based
• Use asynchronous messaging queue
• Fast and scalable
• Mainly referred as “Salt”
Internal
SaltStack
Salt architecture
• Designed for high speed data collection and execution in
system administration environments. At beginning Salt
was relying on ZeroMQ. Salt now has is own realiable
queuing transport system: RAET (Reliable Asynchronous
Event Transport Protocol). Which permit Salt to be
scalable well beyond tens of thousands of servers.
Internal
SaltStack
Salt architecture
• Salt mainly use a slave-master setup, that enables Salt to
do push or pull remote execution. The slave or the agent
is called : Minion.
• Minion can be also be used alone in a MasterLess mode.
• Salt has also AgentLess mode called: Salt-SSH. Salt has
no Windows AgentLess mode yet.
Internal
SaltStack
Salt architecture
• Salt mainly use a slave-master setup, that enables Salt to
do push or pull execution. The slave or the agent is called
: Minion.
• Minion can be also be used alone in a MasterLess mode.
• Salt has also AgentLess mode called: Salt-SSH. Salt has
no Windows AgentLess mode yet.
• Salt permit also event-driven execution and self-healing.
Internal
SaltStack
Salt architecture
• The modular design of Salt is done by module written in
Python. By the abilities to write your own Salt Module,
Salt is easily extensible.
• Module types:
• Execution modules
• State modules
• Grains
• Renderer modules
• Returners
• Runners
Internal
SaltStack
Execute remote command
• salt-call '*' test.ping
• salt-call '*' disk.usage
• salt-call -G 'os:Windows' cmd.run ‘dir‘
• salt-call –local cmd.powershell “Get-ChildItem c:”
Internal
SaltStack
Saltstack and chocolatey
• salt-call --local chocolatey.bootstrap
• salt-call --local chocolatey.update firefox
Internal
SaltStack
Defining the desired States
• firefox.sls :
chocolatey:
pkg.installed
firefox:
chocolatey.upgraded:
- pkgs:
- firefox
• salt-call state.apply firefox
Internal
SaltStack
Jinja2 and Pillars
• Using grains in SLS
• Pillars
apache:
{% if grains['os'] == 'RedHat' %}
pkg.installed:
- name: httpd
{% elif grains['os'] == 'Ubuntu' %}
pkg.installed:
- name: apache2
{% if grains['os'] == ‘Windows' %}
chocolatey.installed:
- name: apache-httpd
{% endif %}
Internal
SaltStack
<Live demo>
Internal
Choclatey hacks
• Multiple instances of Chocolatey.
• Mock a package install.
Workstations
• Internalize your Chocolatey packages.
• Onboarding developers workstation.
• Life without Citrix.
Internal
What we've Learned
• Patience. Renovating a house will always take more
resources than building a new one. But the
importance is to always be evolving.
• Impose standardization of your process. Less
experienced team members will often have a certain
lack of discipline. But some older team members are
more resistant to change their discipline.
• Make the jobs fun. Try to replace boring tasks by
automated process or try to reduce time past on
those boring tasks.
Internal
What we learn
• Try to avoid everything that is not human readable
like .MSI, .XML and Windows registry.
• Click, click alone is really very bad. If you can write a
how-to wiki. You can write a script (preferably with a
CM). If you have a good script, you can do a one-
liner command. With that you can easily create a
WebUI or GUI for a secure self-service.
• Concentrate on useful metrics and make only useful
alerts.
• Innovate and don't be afraid to push the envelope
Internal
Thanks
• A special thanks to my team at TD.
• To Rob Reynolds, to make me love Windows again.
• Chocolatey Fest team…
Internal
Q&A

More Related Content

What's hot

Fixed Price Distributed Agile Projects
Fixed Price Distributed Agile ProjectsFixed Price Distributed Agile Projects
Fixed Price Distributed Agile Projects
Raja Bavani
 
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Lucas Jellema
 

What's hot (20)

Fixed Price Distributed Agile Projects
Fixed Price Distributed Agile ProjectsFixed Price Distributed Agile Projects
Fixed Price Distributed Agile Projects
 
Agile, User Stories, Domain Driven Design
Agile, User Stories, Domain Driven DesignAgile, User Stories, Domain Driven Design
Agile, User Stories, Domain Driven Design
 
CI-CD Jenkins, GitHub Actions, Tekton
CI-CD Jenkins, GitHub Actions, Tekton CI-CD Jenkins, GitHub Actions, Tekton
CI-CD Jenkins, GitHub Actions, Tekton
 
Cisco's MultiCloud Strategy
Cisco's MultiCloud StrategyCisco's MultiCloud Strategy
Cisco's MultiCloud Strategy
 
Scaling Agile and distributed development webinar v1.0
Scaling Agile and distributed development webinar v1.0Scaling Agile and distributed development webinar v1.0
Scaling Agile and distributed development webinar v1.0
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native Apps
 
It’s All About Adoption: How Gilead Sciences Forged a Path to Accelerate Value
It’s All About Adoption: How Gilead Sciences Forged a Path to Accelerate ValueIt’s All About Adoption: How Gilead Sciences Forged a Path to Accelerate Value
It’s All About Adoption: How Gilead Sciences Forged a Path to Accelerate Value
 
Microservices Testing Strategies JUnit Cucumber Mockito Pact
Microservices Testing Strategies JUnit Cucumber Mockito PactMicroservices Testing Strategies JUnit Cucumber Mockito Pact
Microservices Testing Strategies JUnit Cucumber Mockito Pact
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and Saga
 
Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics
 
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
Software Engineering as the Next Level Up from Programming (Oracle Groundbrea...
 
Technology choices for Apache Kafka and Change Data Capture
Technology choices for Apache Kafka and Change Data CaptureTechnology choices for Apache Kafka and Change Data Capture
Technology choices for Apache Kafka and Change Data Capture
 
Accenture tech vision 2018 slideshare trend4_frictionless-biz_aw_a_mc
Accenture tech vision 2018 slideshare trend4_frictionless-biz_aw_a_mcAccenture tech vision 2018 slideshare trend4_frictionless-biz_aw_a_mc
Accenture tech vision 2018 slideshare trend4_frictionless-biz_aw_a_mc
 
Airbnb, From Monolith to Microservices: How to Scale Your Architecture, Futur...
Airbnb, From Monolith to Microservices: How to Scale Your Architecture, Futur...Airbnb, From Monolith to Microservices: How to Scale Your Architecture, Futur...
Airbnb, From Monolith to Microservices: How to Scale Your Architecture, Futur...
 
Introducing Change Data Capture with Debezium
Introducing Change Data Capture with DebeziumIntroducing Change Data Capture with Debezium
Introducing Change Data Capture with Debezium
 
Microservices with Kafka Ecosystem
Microservices with Kafka EcosystemMicroservices with Kafka Ecosystem
Microservices with Kafka Ecosystem
 
Designing For Multicloud, CF Summit Frankfurt 2016
Designing For Multicloud, CF Summit Frankfurt 2016Designing For Multicloud, CF Summit Frankfurt 2016
Designing For Multicloud, CF Summit Frankfurt 2016
 
How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...
How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...
How does the Cloud Foundry Diego Project Run at Scale, and Updates on .NET Su...
 
IDC Multicloud 2019 - Conference Milano , Oracle speech
IDC Multicloud 2019 - Conference Milano , Oracle speechIDC Multicloud 2019 - Conference Milano , Oracle speech
IDC Multicloud 2019 - Conference Milano , Oracle speech
 
Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018
 

Similar to Facilitating continuous delivery in a FinTech world with Salt, Jenkins, Nexus and Chocolatey - Michel Buczynski - Chocolatey Fest 2018

Similar to Facilitating continuous delivery in a FinTech world with Salt, Jenkins, Nexus and Chocolatey - Michel Buczynski - Chocolatey Fest 2018 (20)

Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
Continuous Delivery: releasing Better and Faster at Dashlane
Continuous Delivery: releasing Better and Faster at DashlaneContinuous Delivery: releasing Better and Faster at Dashlane
Continuous Delivery: releasing Better and Faster at Dashlane
 
SQL Server DevOps Jumpstart
SQL Server DevOps JumpstartSQL Server DevOps Jumpstart
SQL Server DevOps Jumpstart
 
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
 
Primeros pasos del Software Libre en infraestructura civil Civil Infrastructu...
Primeros pasos del Software Libre en infraestructura civil Civil Infrastructu...Primeros pasos del Software Libre en infraestructura civil Civil Infrastructu...
Primeros pasos del Software Libre en infraestructura civil Civil Infrastructu...
 
Versioning for Developers
Versioning for DevelopersVersioning for Developers
Versioning for Developers
 
Making software development processes to work for you
Making software development processes to work for youMaking software development processes to work for you
Making software development processes to work for you
 
DevOps - IaC | Talk | AGILE GURUGRAM 2018 | 23 - 24 March, 2018
DevOps - IaC | Talk | AGILE GURUGRAM 2018 | 23 - 24 March, 2018DevOps - IaC | Talk | AGILE GURUGRAM 2018 | 23 - 24 March, 2018
DevOps - IaC | Talk | AGILE GURUGRAM 2018 | 23 - 24 March, 2018
 
PHP Unconference Continuous Integration
PHP Unconference Continuous IntegrationPHP Unconference Continuous Integration
PHP Unconference Continuous Integration
 
DevOps Training | DevOps Online Training in Hyderabad.pptx
DevOps Training | DevOps Online Training in Hyderabad.pptxDevOps Training | DevOps Online Training in Hyderabad.pptx
DevOps Training | DevOps Online Training in Hyderabad.pptx
 
DevOps & DevEx
DevOps & DevExDevOps & DevEx
DevOps & DevEx
 
Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015
 
The NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit Ebner
The NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit EbnerThe NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit Ebner
The NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit Ebner
 
To successfully deliver your IT project: build your team, build your Agile it...
To successfully deliver your IT project: build your team, build your Agile it...To successfully deliver your IT project: build your team, build your Agile it...
To successfully deliver your IT project: build your team, build your Agile it...
 
Building a custom cms with django
Building a custom cms with djangoBuilding a custom cms with django
Building a custom cms with django
 
DevOps Delivery Pipeline
DevOps Delivery PipelineDevOps Delivery Pipeline
DevOps Delivery Pipeline
 
DITA Interoperability
DITA InteroperabilityDITA Interoperability
DITA Interoperability
 
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems SoftwareLessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
 
(SPOT205) 5 Lessons for Managing Massive IT Transformation Projects
(SPOT205) 5 Lessons for Managing Massive IT Transformation Projects(SPOT205) 5 Lessons for Managing Massive IT Transformation Projects
(SPOT205) 5 Lessons for Managing Massive IT Transformation Projects
 
Key items for a digital enterprise
Key items for a digital enterpriseKey items for a digital enterprise
Key items for a digital enterprise
 

More from Chocolatey Software

More from Chocolatey Software (13)

Provision and Manage Servers w/Otter, DSC, Git, and Chocolatey
Provision and Manage Servers w/Otter, DSC, Git, and ChocolateyProvision and Manage Servers w/Otter, DSC, Git, and Chocolatey
Provision and Manage Servers w/Otter, DSC, Git, and Chocolatey
 
WinOps in a Secure Environment
WinOps in a Secure EnvironmentWinOps in a Secure Environment
WinOps in a Secure Environment
 
Docker - A Container Full of Chocolatey
Docker - A Container Full of ChocolateyDocker - A Container Full of Chocolatey
Docker - A Container Full of Chocolatey
 
Killing Golden Images In Your Infrastructure Setups
Killing Golden Images In Your Infrastructure SetupsKilling Golden Images In Your Infrastructure Setups
Killing Golden Images In Your Infrastructure Setups
 
Maintenance Mode: Leveraging Chef to Schedule Patching, Reboot, etc.
Maintenance Mode: Leveraging Chef to Schedule Patching, Reboot, etc.Maintenance Mode: Leveraging Chef to Schedule Patching, Reboot, etc.
Maintenance Mode: Leveraging Chef to Schedule Patching, Reboot, etc.
 
Wardley Maps Saved The Day: How Stack Overflow Enterprise automated all the t...
Wardley Maps Saved The Day: How Stack Overflow Enterprise automated all the t...Wardley Maps Saved The Day: How Stack Overflow Enterprise automated all the t...
Wardley Maps Saved The Day: How Stack Overflow Enterprise automated all the t...
 
The Future of Windows Automation
The Future of Windows AutomationThe Future of Windows Automation
The Future of Windows Automation
 
Improving Infrastructure Quality
Improving Infrastructure QualityImproving Infrastructure Quality
Improving Infrastructure Quality
 
Ensuring Compliant, Consistent Systems w/Chef, InSpec, and Chocolatey
Ensuring Compliant, Consistent Systems w/Chef, InSpec, and ChocolateyEnsuring Compliant, Consistent Systems w/Chef, InSpec, and Chocolatey
Ensuring Compliant, Consistent Systems w/Chef, InSpec, and Chocolatey
 
Bootstrapping a New Machine in 1 Click
Bootstrapping a New Machine in 1 ClickBootstrapping a New Machine in 1 Click
Bootstrapping a New Machine in 1 Click
 
Chocolatey and Puppet at Yelp
Chocolatey and Puppet at YelpChocolatey and Puppet at Yelp
Chocolatey and Puppet at Yelp
 
Chef + Chocolatey: Sweet Recipes
Chef + Chocolatey: Sweet RecipesChef + Chocolatey: Sweet Recipes
Chef + Chocolatey: Sweet Recipes
 
10 Things I Hate About You - Taming Windows w/Ansible
10 Things I Hate About You - Taming Windows w/Ansible10 Things I Hate About You - Taming Windows w/Ansible
10 Things I Hate About You - Taming Windows w/Ansible
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

Facilitating continuous delivery in a FinTech world with Salt, Jenkins, Nexus and Chocolatey - Michel Buczynski - Chocolatey Fest 2018

  • 1. Internal Facilitating continuous delivery in a FinTech world with Salt, Jenkins, Nexus and Chocolatey Michel Buczynski, DevOps Coach TD Securities
  • 2. Internal Disclaimer While this session is mainly based on work done for various employers and my contemporary observations, this session will focus on my personal opinions. As such, material herein is not necessarily representative of my present or my previous employers' opinion.
  • 3. Internal Who am I Born in '73 and raised in Montreal, work and live in Toronto. About me: • I disassembled (hum! Destroy) the family TV at 3 years old to understand where the images and sounds were coming from. • I got my first programming contract at 16. • I practiced Agile before Agile, and DevOps before DevOps, and I think I am not alone.
  • 4. Internal What I am doing now DevOps Coach • Implementation of a tools-chain for Continuous Delivery (CD). • Define a standardized workflow for the CD pipeline. • Coach team members on how to properly use the tools-chain and follow the workflow. • My goal is to ensure that our team produces, delivers, and maintains efficient and quality software in the easiest and fastest possible manner.
  • 5. Internal Current Gig TD Securities is part of the TD Bank Group • The Toronto-Dominion Bank & its subsidiaries are collectively known as TD Bank Group (TD). TD is the sixth largest bank in North America by branches & serves approximately 22 million customers in a number of locations in key financial centers around the globe. Over 85,000 TD employees represent the strongest team in banking. Delivering legendary customer experiences is who we are & is part of being the Better Bank. • I am working in the capital markets division (TD Securities); specifically for the global equity derivatives business.
  • 6. Internal FinTech • FinTech Wikipedia definition: Financial technology (FinTech or fintech) is the new technology and innovation that aims to compete with traditional financial methods in the delivery of financial services. • FinTech uses the latest IT technologies like Big Data, IoT, Machine Learning, etc. • The banking industry is the major provider of financial services. • Since the banking industry was one the first users of computer systems, banks sometimes have to rely on legacy systems.
  • 7. Internal The Challenge of DevOps in the Banking Industry • The size and the age of the enterprise. • Regulations, compliance, audits, separation of duties, … • A varied infrastructure based on both legacy and modern technologies. • The use of 3rd party and legacy software. • New Technology Introduction (NTI). • Conservative approach with a very strong need for stability. • Changes will be always difficult to apply because it is especially difficult to change the way people works. But, it is also difficult to make change without changing the way people work.
  • 8. Internal What our Team Does • We are a cross-functional team dedicated to producing cutting- edge FinTech software. • Most of our development is based on FOSS (Free Open Source Software) framework or platform: Node.JS, Erlang/Elixir, Angular5, Scala, Python, R and Java. • Our software architecture is microservice oriented. • Our system is integrated with some legacy COTS (Commercial Off-The-Shelf) applications tied to Windows desktop and server. • Developing in-house software permits us to have more flexible and adapted software, effectively leveraging our knowledge capital and reducing our dependency on 3rd parties.
  • 9. Internal Our Team's DevOps Journey A Long Journey Begins with a Single Step • Most of our application code uses version control (VC) GIT. • No centralized GIT VC systems employed. • No automated testing. • Weekly painful manual deployment. It was honestly an achievement to have such a short yet manual release cycle.
  • 10. Internal Our Team's DevOps Journey Today • Application code, configuration (source) and packaged artifacts (target) are all in VC. • Continuous Integration. • Automated deployments. • Most of our system configuration is automated. • Most of the application testing is automated.
  • 11. Internal Our Team's DevOps Journey The Future • Provide self-serve services and resources for non- developers. Ex: Release management, pick commit for release candidate, release notes automation, etc… • Make automated testing of infrastructure changes. • Make provisioning automated on all targets. • Make success metrics visible. • Make incident responses automated.
  • 12. Internal Standardize your Workflow Everything in VC • Source code, Source library, Application configs. • Artifacts, System configuration. • Package everything, put it in a VC repositories. Especially what is not your own code. • The good, the bad and the ugly about .MSI. • Chocolatey: the solution for Windows.
  • 13. Internal Standardize your Workflow Set a common branching model. • Create your own or use the standard GitFlow. • The branching model set relations between the target environment, the approval process, the version numbering, CI steps, ...
  • 15. Internal Standardize your Workflow Set a common version numbering system • Chocolatey and Nuget package versioning: SemVer. • The good, the bad and the ugly about SemVer. • A solutions the YMX.
  • 16. Internal Standardize your Workflow Chocolatey and Nuget package versioning. All version Chocolatey and Nuget support SemVer 1.0 : A specific version number is in the form Major.Minor.Patch[-Suffix], where the components have the following meanings: •Major: Breaking changes •Minor: New features, but backwards compatible •Patch: Backwards compatible bug fixes only •-Suffix (optional): a hyphen followed by a string denoting a pre-release version. Examples: 1.0.1 6.11.1231 4.3.1-rc 2.2.44-beta 11.0.1-alpha All version Chocolatey and Nuget also support Microsoft Version Numbers: A specific version number has the a 4 number form: Major.Minor.Buid.Revision Chocolatey call this form : Package Fix version Notation Examples: 1.2.0.20181008
  • 17. Internal Standardize your Workflow The good, the bad and the ugly about SemVer. The good: • Has release and pre-release version • Tell you if you need to update: • MAJOR: Breaking API change Not safe to update • MINOR: New features Safe to update • PATCH: Bugfixes Must update
  • 18. Internal Standardize your Workflow The good, the bad and the ugly about SemVer. The bad: • With rapid space of CD is difficult to follow MAJOR, MINOR and PATCH ordering. • It's assumes that every goes well and arrive on time. • It's only great once the product is done and tested.
  • 19. Internal Standardize your Workflow The good, the bad and the ugly about SemVer. The ugly: • Difficult to automate. • Need a lots manual intervention. • With things like versioning of things API, the MAJOR and MINOR doesn't mean anything for artifacts version. • You can always put the major version in the product name. Ex: X11, Oracle12c and C
  • 20. Internal Standardize your workflow A solution the YMX. • Inspired on Docker’s versioning scheme • RELEASE version for master branch: YY.M.N 18.1.9 • RELEASE CANDIDATE Version for release/ and hotfixe/ branch: YY.M.N-rcX 18.1.9-rc 18.3.2-rc4 • ALPHA Version for feature/ branch: YY.M.N-alpha-DD-hhhhhhh 18.3.3-alpha-08-df81230 for the commit done the Mars 8th 2018 in preparation for third release in Mars 2018 RELEASE CANDIDATE Version for release/ and hotfixe/ branch: YY.M.N-rcX
  • 21. Internal Standardize your Workflow Clean up and Enforce • Clean up all your repositories. • By doing a clean-up, it is the right time to introduce new tools and processes. • Train your team to use new tools and teach them how to apply your workflow and demonstrate why. • Enforce workflow progressively by applying it, with a small group of team members and target applications.
  • 22. Internal Jenkins 2 • Pipeline as a code. • Create your own Shared Libraries. • YMX automatic versioning. • <Live demo>
  • 23. Internal Jenkins 2 Pipeline as a code. • Pipeline as Code describes a set of features that allow Jenkins users to define pipelined job processes with code, stored and versioned in a source repository. These features allow Jenkins to discover, manage, and run jobs for multiple source repositories and branches — eliminating the need for manual job creation and management. • To use Pipeline as Code, projects must contain a file named Jenkinsfile in the repository root, which contains a "Pipeline script."
  • 24. Internal Jenkins 2 Create your own Shared Libraries. • As Pipeline is adopted for more and more projects in an organization, common patterns are likely to emerge. Oftentimes it is useful to share parts of Pipelines between various projects to reduce redundancies and keep code "DRY". • Pipeline has support for creating "Shared Libraries" which can be defined in external source control repositories and loaded into existing Pipelines
  • 25. Internal Jenkins 2 Create your own Shared Libraries. • Declarative Pipeline • Scripted Pipeline Directory structure The directory structure of a Shared Library repository is as follows: (root) +- src # Groovy source files | +- org | +- foo | +- Bar.groovy # for org.foo.Bar class +- vars | +- foo.groovy # for global 'foo' variable | +- foo.txt # help for 'foo' variable | +- bar.groovy # bar custom step, call def call() +- resources # resource files (external libraries only) | +- org | +- foo | +- bar.json # static helper data for org.foo.Bar
  • 27. Internal Sonatype Nexus • Nexus introduction. • Consideration for Chocolatey. • <Live demo>
  • 28. Internal Sonatype Nexus Nexus Reposory Manager introduction • Universal package manager That give us the ability to apply security and compliance metrics across all artifact types. Universal package managers have been referred to as being at the center of a DevOps toolchain • Nexus Repository OSS 3.xx, supports those formats: APT, Composer, Conan, CPAN, Docker, ELPA, Git LFS, Helm, Maven, npm, NuGet, P2, PyPI, R, Raw, RubyGems, Yum
  • 29. Internal Sonatype Nexus Consideration for Chocolatey. • Don’t mix Nuget package with Chocolatey package. Even if Chocolatey is based on the NuGet framework, it doesn’t mean that they are the same type of package. • Separated in different repositories, depending on the target. Users workstations, developer workstations, agents workstations, servers. You can also create separate repositories for certain products.
  • 31. Internal SaltStack • Introducing SaltStack • Salt architecture • Execute remote or local command • Salt and Chocolatey. • Defining the desired States • Jinja2 and Pillars • Live demo.
  • 32. Internal SaltStack Introducing SaltStack • Open-source configuration management software and remote execution engine. • Infrastructure as code • Python based • Use asynchronous messaging queue • Fast and scalable • Mainly referred as “Salt”
  • 33. Internal SaltStack Salt architecture • Designed for high speed data collection and execution in system administration environments. At beginning Salt was relying on ZeroMQ. Salt now has is own realiable queuing transport system: RAET (Reliable Asynchronous Event Transport Protocol). Which permit Salt to be scalable well beyond tens of thousands of servers.
  • 34. Internal SaltStack Salt architecture • Salt mainly use a slave-master setup, that enables Salt to do push or pull remote execution. The slave or the agent is called : Minion. • Minion can be also be used alone in a MasterLess mode. • Salt has also AgentLess mode called: Salt-SSH. Salt has no Windows AgentLess mode yet.
  • 35. Internal SaltStack Salt architecture • Salt mainly use a slave-master setup, that enables Salt to do push or pull execution. The slave or the agent is called : Minion. • Minion can be also be used alone in a MasterLess mode. • Salt has also AgentLess mode called: Salt-SSH. Salt has no Windows AgentLess mode yet. • Salt permit also event-driven execution and self-healing.
  • 36. Internal SaltStack Salt architecture • The modular design of Salt is done by module written in Python. By the abilities to write your own Salt Module, Salt is easily extensible. • Module types: • Execution modules • State modules • Grains • Renderer modules • Returners • Runners
  • 37. Internal SaltStack Execute remote command • salt-call '*' test.ping • salt-call '*' disk.usage • salt-call -G 'os:Windows' cmd.run ‘dir‘ • salt-call –local cmd.powershell “Get-ChildItem c:”
  • 38. Internal SaltStack Saltstack and chocolatey • salt-call --local chocolatey.bootstrap • salt-call --local chocolatey.update firefox
  • 39. Internal SaltStack Defining the desired States • firefox.sls : chocolatey: pkg.installed firefox: chocolatey.upgraded: - pkgs: - firefox • salt-call state.apply firefox
  • 40. Internal SaltStack Jinja2 and Pillars • Using grains in SLS • Pillars apache: {% if grains['os'] == 'RedHat' %} pkg.installed: - name: httpd {% elif grains['os'] == 'Ubuntu' %} pkg.installed: - name: apache2 {% if grains['os'] == ‘Windows' %} chocolatey.installed: - name: apache-httpd {% endif %}
  • 42. Internal Choclatey hacks • Multiple instances of Chocolatey. • Mock a package install. Workstations • Internalize your Chocolatey packages. • Onboarding developers workstation. • Life without Citrix.
  • 43. Internal What we've Learned • Patience. Renovating a house will always take more resources than building a new one. But the importance is to always be evolving. • Impose standardization of your process. Less experienced team members will often have a certain lack of discipline. But some older team members are more resistant to change their discipline. • Make the jobs fun. Try to replace boring tasks by automated process or try to reduce time past on those boring tasks.
  • 44. Internal What we learn • Try to avoid everything that is not human readable like .MSI, .XML and Windows registry. • Click, click alone is really very bad. If you can write a how-to wiki. You can write a script (preferably with a CM). If you have a good script, you can do a one- liner command. With that you can easily create a WebUI or GUI for a secure self-service. • Concentrate on useful metrics and make only useful alerts. • Innovate and don't be afraid to push the envelope
  • 45. Internal Thanks • A special thanks to my team at TD. • To Rob Reynolds, to make me love Windows again. • Chocolatey Fest team…