Migrating to a microservices architecture isn't the easy utopia we hoped for. Success requires a combination of technical architecture, automation, and development methodology that all relate closely to Agile and DevOps. This presentation discusses patterns for team structure, CI/CD pipelines, and test automation that will help you successfully deliver solutions using microservices.
Presented at Agile 2019 (DC), Aug 2019
The Codex of Business Writing Software for Real-World Solutions 2.pptx
Â
DevOps Patterns to Enable Success in Microservices
1. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 1@armillz
DevOps Patterns to Enable Success with
Microservices
Richard Mills
DevOps Solution Lead, Coveros Inc.
rich.mills@coveros.com
@armillz
2. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 2@armillz
Who is this guy?
⢠Me: Mad-Software-Developer turned Mad-Software-Engineer
turned DevOps-Solution-Architect. Pragmatist. Particular
focus on tools and automation. CI, CD, Agile, DevOps âŚ
whatâs next?
⢠PS: Thanks for inventing the term âDevOpsâ to describe what I like
to do.
⢠Pays my bills: Coveros helps organizations accelerate the
delivery of secure, reliable software using agile methods. We
provide expert consulting, mentoring, and training in:
⢠Agile transformations, coaching, development,
⢠Agile testing and automation
⢠DevOps and DevSecOps transformation and implementations
⢠DevOps engineering
3. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 3@armillz
Why is he here?
⢠Share some of my experiences (and failures) on a journey from âclassicâ enterprise monolithic
systems into the âutopiaâ of microservices architecture
⢠Show some patterns for delivering highly-buzzword-compliant, microservices-based software
applications
⢠Give you a reference to walk away with
⢠NOT: Explain fundamentals of DevOps (or Agile)
⢠NOT: Sell you on DevOps (or Agile), necessarily
WARNING: I do everything very fast. Try to keep up.
4. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 4@armillz
What are we going to cover?
⢠Problems with (non-ideal) microservices
⢠Context example
⢠Pipeline design and implementation patterns
⢠Testing and quality
⢠Other important non-pipeline stuff (team, architecture, ...)
5. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 6@armillz
Microservices: utopia or nightmare?
6. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 7@armillz
Microservices are all the rage!
âLetâs take all of our busted monolithic systems and
split them up!â they said.
Successful microservices require a combination of
technical architecture, automation, and
development methodology that all relate closely to
Agile and DevOps
Without the right mix of these, things often donât go
as well as you planned
7. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 8@armillz
Microservices in the non-ideal real world
⢠Federated services with hidden dependencies
⢠Independently changing applications, but ...
⢠Loosely coupled, unspecified, AND STILL-PRESENT dependencies
⢠Teams that donât talk to each other
⢠Hide behind (poorly defined) APIs
⢠Freedom to move at their own pace
⢠Desire: Deploy small changes rapidly to production
⢠Problem: canât figure out which versions work together, even in test environments
You have many things changing at different rates (fast vs. never) with
âdecoupledâ interfaces that are hard to verify independently
8. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 9@armillz
What you need
â˘Bring teams closer
â˘Continuously integrate services
â˘Deploy integrated services into various environments
â˘Frequently test still-monolithic system in pieces and as a whole
This looks suspiciously like a DevOps problem
Conclusion: your DevOps pipeline is critical to your success
9. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 10@armillz
Automation is Critical to Success
âIf you are building microservices and you donât have a
highly automated CI/CD pipeline in place, youâve
already lost.â
- some really smart guy I was talking to at some point
10. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 13@armillz
Context:
Modern Microservices Example
11. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 14@armillz
Dozen-ish independent services acting as a federated product in a registration and workflow system
React/JS front-end UI, Java Spring Boot REST Services, PostgreSQL back-end
Service Architecture
NRPM
UI
REST API
DB
Page
Service
Case Mgmt
UI
REST API
DB
App Entry
UI
REST API
DB
V&A
UI
REST API
DB
Auth
UI
REST API
DB
Gateway
UI
REST API
DB
UI
PostgreSQL RDS instance in AWS
External
Services
REST API
REST API
REST API
12. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 15@armillz
â Docker containers of all services (application and devops)
â OpenShift Kubernetes Distribution (OKD)
â Amazon Web Services cloud platform
Operating Platform
13. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 16@armillz
Deployment Architecture
16
DevOps Cluster
Jenkins
Nexus
DB
Jenkins
Jenkins
Jenkins
master infra app app
Sonar
Qube
DEV Cluster
master infra app app
TEST Cluster
master infra app app
PROD Cluster
master infra app app
DBDB
Amazon Web Services
DB
14. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 17@armillz
DevOps Baseline â what do we mean?
15. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 18@armillz
The Many Things of DevOps
Notice that not many of these are PURELY the responsibility of one person or even team
16. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 20@armillz
Ok, But What Do We Actually Mean by DevOps?
⢠DevOps is the natural evolution of Agile: how to get working software into the hands of the
people who need it rapidly and reliably
⢠Who? Developers, Product Owners, ultimately users
⢠When? Now!
⢠Seriously ⌠measure delivery with "minutes"
⢠How? Team collaboration, processes, automation, tools
⢠Extension of Agile
⢠Focus on value delivery
⢠Common sense
⢠Enable developers to be creative and do great work
⢠Especially important with microservices due to the rate of change and number teams and
services involved
17. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 21@armillz
A DevOps Solution Includes...
⢠Team structure and skill set across the delivery chain
⢠Infrastructure and tools to support automation and team collaboration
⢠Delivery pipeline to build, package, deploy, test for repositories and branches of code
⢠Test automation (lots and lots of it) capable of evaluating changes
... all wrapped up in a supporting Agile development methodology
Overall: the ability to delivery independent changes into a working environment rapidly and
reliability while maintaining a high quality system
18. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 22@armillz
Pipeline Design: Patterns of Success
19. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 24@armillz
Pipeline defines delivery process
The software delivery process is automated through a CI/CD pipeline to deliver application
microservices into various test (and eventually production) environments
Continuous MonitoringContinuous Integration
BuildCode
Continuous Delivery
commit
DEV
TEST
PROD
Compile
Test
Package
Publish
Unit Test
Integration Test
Code coverage
Code Scanning
Static Analysis
Bugs
Vulnerabilities
Technical Debt
Package
Dependency
checking
Vulnerable
components
Deploy Test
Provision
Install
Configure
Vulnerability Scanning
Deployment verification
Smoke test
Manual Testing
- Exploratory
- UAT
Functional Testing
- Behavioral
- API
- Web UI
Non-Functional Testing
- Load/Performance
- Web Security
Platform
Vulnerabilities
Test Results Defects
Change Requests
Test Promote
Operate
Monitor
20. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 26@armillz
Pipeline links to branching strategy
⢠Strive for "main line" development
⢠Small changes are easy to build, test, deploy, AND FIX
⢠Use short, small feature branches for isolated changes
⢠Consider Github Flow (very simple), Git Flow (complex)
⢠Avoid "parallel release development" at all costs
⢠What problems does branching cause vs. solve?
⢠Delivery pipeline will align with branching
21. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 27@armillz
Pattern: minimalist branching delivery pattern
⢠Features â simple CI build with compile, static analysis, unit test
⢠Pull Request (merge request) â pre-merge with master, deploy to on-demand ephemeral
environment, run automated tests (more on tests later)
⢠Use peer review to investigate impact on other services
⢠Master â after successful merge, build and deploy to dev-staging environment, run more
tests, promote upwards
⢠Remember:
SMALLER IS BETTER
22. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 28@armillz
Foreshadowing: branch everything with the code
⢠Tenet of DevOps and CI/CD: version-control everything so you can automate
everything
⢠We will discuss a lot of different artifacts that match your application code
⢠Application code
⢠Build scripts
⢠Deployment scripts
⢠Database scripts
⢠Tests
⢠... more
⢠All of these should be stored and branched as a related code base!
Stand by for station identification...
23. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 29@armillz
Pattern: independent pipelines
⢠Each service has itâs own pipeline (later: shared pipeline code)
⢠Example: use âJenkinsfileâ or localized build script configuration
⢠Major parts of the âindependentâ pipelines
⢠Compile
⢠Unit test
⢠Static analysis (security, quality, composition analysis)
⢠Packaging
⢠Integration testing ... Pre/post deployment
⢠Test deployment
⢠Is your service independently deployable?
⢠How much testing can you do?
⢠What are your dependencies? (and what will eventually depend on you?)
24. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 30@armillz
Pattern: pipeline should branch with code
⢠Your build/delivery process will evolve with the code
⢠Example: Build scripts ... historically always live with code (maven, gradle, ...)
⢠Your âpipelineâ automation code should live with code, as well.
⢠Pattern: Use âpipeline as codeâ to define your pipeline automation
⢠NOT: Traditional complicated UI-driven multi-job monsters (more later)
⢠Store pipeline definition (e.g., âJenkinsfileâ) in repository with code
⢠New branches of code can have local build/test pipeline updates
⢠Similar for deployment and configuration scripts (more later)
⢠Ansible/Chef â playbooks and recipes change to address code changes (new
config parameters, etc.)
⢠Docker/Kubernetes/Helm â orchestration and deployment YAML for containers
adjust with code
Ideally, these live in the same code repository
25. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 31@armillz
Pipelines run in parallel
⢠Each of your independent service pipelines can (will) execute in parallel
⢠This can be very resource intensive â plan for it
⢠At some point, you need to deploy your code into an âenvironmentâ
⢠Will these be shared/mixed environments, or dedicated to the independent pipeline?
⢠Note: static environment can cause issues if you are changing multiple things simultaneously
⢠âDynamicâ environments become VERY beneficial...
App
A
W
B
C
D
App
A
W
B
C
D
Service âAâ
Service âBâ
App
A
W
B
C
D
- OR -
26. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 32@armillz
Pattern: dynamic on-demand environments
⢠Microservices can have high rates of change across many services
⢠This can continually disrupt shared/static environments as new services are updated
⢠The ability to launch a new environment with all supporting services becomes valuable
⢠Replicate current PROD (or other) version of services
⢠Deploy newly changed service into replica
⢠Test, test, test
⢠Seeding data becomes important for new copies
App A
W
B
C
D
App A
W
B
C
D
PROD Replica
27. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 33@armillz
Sidebar: full VMâs vs. Docker containers
⢠Containers isolate processes and make micro-services much simpler and more efficient
⢠Containers enable easy on-demand test environments (much lighter weight)
⢠Containers allow widely disparate application architectures to be deployed on shared
infrastructure
⢠NOTE: You will likely NEED a container orchestration system (Kubernetes, Swarm, Mesos,
Compose, ...)
28. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 35@armillz
Pattern: database change management
⢠Microservices frequently need some form of persistence (e.g., database)
⢠Relational databases often require schema and data changes as the code evolves
(non-SQL databases are a different story)
⢠These changes need to be version controlled and managed just like everything else
⢠The changes may or may-not have similar change lifecycles to the code
⢠Schema
⢠Data
⢠Classes of test data:
⢠Reference data (lookup tables, workflow definitions, etc.)
⢠Sample data (basic data to show functionality)
⢠Test data (more complicated data to support testing)
⢠Use a tool to manage this: Liquibase, Flyway, ...
⢠Make sure your âdataâ and âdevelopmentâ team members understand each other
All of this can (and should) be stored and branched with the code
29. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 37@armillz
Pipeline join points
⢠At some point, your pipelines come together and
services work in a combined environment
⢠You will need to deploy multiple services and make
them work together
⢠Need some capture of âversionsâ to know which
versions are where and how they are verified against
each other
⢠Options:
⢠extensions of independent pipelines
⢠âjoinâ jobs that deploy lots of things together
⢠Note: consider âlockingâ shared environment during
testing to avoid blips and test failures
App
A
W
B
C
D
30. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 38@armillz
Side Bar: versioning ⌠do you need it?
⢠Keep It Simple, (Stupid)
⢠Is your app a multi-version beast, or simple end-of-the line single deployment?
⢠All software elements need a traceable identifier
⢠Source Code -> Deployable Package -> Running Software
⢠Semantic versioning vs. unique identifier
⢠Integrate version control identifiers with deployed code
⢠Consider using git SHA version label to enable easy traceability
⢠Very few deployable applications need linear versioning
⢠Does it matter if itâs 1.2.3 or 20180317 or a3e78b19d?
⢠Component libraries with APIs frequently need identifiable, increasing versions
⢠my-util:1.2.3 vs. 1.3.1 with different capabilities that link to your code interfaces
31. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 39@armillz
Pattern: capturing a âproductâ version
⢠As your services progress through environments, itâs useful to know what versions of services
work with each other
⢠Your âpromotionâ mechanism might need to consider moving groups of services together
⢠Single service
⢠Group of known-good services
⢠This may identify your subsystem of coupled monoliths
⢠Capture versions of your services
⢠SHA, semver, whatever
⢠Pattern: typically capture in single ârelease inventoryâ file to feed to deployment automation scripts
32. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 40@armillz
⢠Installation and configuration automated through CM automation framework
⢠Docker, Kubernetes, Ansible, Chef
⢠Example:
⢠deployment of microservices is automated and version controlled through OpenShift
templates (yaml files)
⢠Secrets/properties injected from OpenShift (different per environment)
⢠Unique environment configuration specified in property configuration files
managed by deployment pipeline
⢠staging-staging.properties
⢠uat-uat.properties
⢠This code must align with app code
⢠Remember branching?
⢠Different but related to environment definitions
40
Pattern: deployment automation as code
33. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 41@armillz
Pattern: UI and REST service code integration
⢠Problem: UI invokes back-end services through APIs
⢠What happens when they need to change?
⢠How do you test these continuously?
⢠Similar to cross-service integration
⢠Scenario 1: Full-stack developers building UI and API
⢠Consider having UI and API code live together
⢠Aligns UI and API changes automatically
⢠Scenario 2: Separate UI and API teams (anti-pattern?)
⢠UI and API might change at different rates
⢠Need mechanism to alter/change APIs (deprecate, multiple versions, etc.)
⢠UI and API might be in different repositories
⢠This leads to cross-service testing issues (stay tuned for a few more slides...)
App
Aw
W
Bw
Cw
Dw
A
B
C
D
34. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 42@armillz
Coding Your Pipeline
35. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 43@armillz
Individual pipeline-as-code implementation
⢠Old way: complicated, multi-job, GUI-driven pipeline job structures and configuration
⢠Modern way (e.g., Jenkins 2.x): pipeline-as-code âJenkinsfileâ groovy scripts
⢠Single Jenkins job scans all repositories in a Github organization to build sub-jobs
⢠Each code repository has Jenkinsfile with individual pipeline definition
⢠Pipeline code branches/evolves with application
⢠Less stuff for central team to maintain
36. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 44@armillz
Pipeline code simplification and modularization
⢠Pipelines for similar services will naturally look very similar
⢠Complicated
⢠Repetitive
⢠Goal: centralize the bulk of the shared activities into code libraries
⢠Customizable for unique independent team needs
⢠Maintained by central DevOps architecture support team
- vs. -
37. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 45@armillz
Pattern: central pipeline-as-code structure
⢠Modularization is good ... improve understanding and avoid massive replication
⢠Pipeline DSL shared libraries
⢠Jenkins jobs â all captured as version controlled DSL, can be customized per service
⢠Core Pipeline Stages - build/deploy stages (overridable)
⢠Core Pipeline Libraries â shared utilities, tied to platform architecture (locked)
⢠NOTE: Must be able to branch these libraries for pipeline updates
app: Jenkinsfile
core-stages
core-library
38. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 46@armillz
Ensuring quality (aka: testing)
39. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 47@armillz
Your efforts in DevOps (and microservices)
will fail without proper automated testing
and assessment that is fully integrated into
the pipeline.
40. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 48@armillz
Goals for testing in DevOps (and microservices)
⢠Keep software in continuous working state
⢠Establish confidence in change (within and across services)
⢠Force teams to focus and build quality in (and agree itâs important)
Important: everywhere I say âQualityâ I mean âQuality, Security,
Performance, and all the other âilitiesâ you can think of for your
software.
41. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 49@armillz
Test factors to consider with microservices
⢠Take every opportunity you can to test the code
⢠This will enable rapid changes throughout business cycle
⢠Testing paths to consider
⢠Testing in isolation (totally in your control)
⢠verify what you think your contract is
⢠Testing with downstream dependencies (database, other services)
⢠What else do you need to work properly?
⢠Verify what you think other contracts are
⢠Testing with upstream dependencies (UI, other services)
⢠Who needs YOU to work properly?
⢠Verify what other people think your contract (actually) is
⢠âThe Pipelineâ needs enough global knowledge to orchestrate this
Pathological case: what happens when APIs change unexpectedly or donât
fulfill their (poorly specified) contracts?
App
W
B
D
A
C
42. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 51@armillz
Test stages in the pipeline
⢠Opportunities to test services individually and together throughout the pipeline
⢠Scope and purpose changes as you progress through stages
Micro Service
- UI
Unit
Test
Build
Static
Analysis
Deploy
Ephem
Deploy
Dev
Staging
merge
integ test (all)
pass
Deploy
UAT
pass
Deploy
PRODPR
Security
Test
Micro Service -
API
Unit
Test
Build
Static
Analysis
Deploy
Ephem
ui func test (self)
api func test
(self)
Ext
Integr
Tests
Data
Driven T
ests
Smoke
Test
regress test
(all)
integ test:
- up (ui api)
- down
ui+api smoke
test (all)
ui+api smoke
test (all)
regress test
(self)
regress test
(self)
integ test:
- up (ui api)
- down
ui+api
smoke
test (all)
Security
Test
promote promote
ui+api
smoke
test (all)
43. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 52@armillz
Pattern: tests live with code and pipeline
â˘Tests for microservices should live with the microservice code
⢠Unit tests ... Part of code tree (e.g., junit) ... Duh!
⢠Automated REST tests ... Part of code repository (Postman, REST Assured, ...)
⢠UI tests ... Part of UI repository
â˘This allows you to easily match code version to test version
Pro tip: bundling tests in a docker container makes them easy for anyone
to execute
44. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 53@armillz
Challenge: cross-service and cross-branch testing
⢠Major problem: multiple services (e.g., UI or multiple APIs) need similar linked changes
⢠How do I implement this?
⢠Code based solutions (feature flags, API versions, ...)
⢠Deployment based solutions (concurrent running service versions)
⢠More important: how do I test this?
⢠Will depend on your implementation
⢠May require the ability to link changes between services/repositories
App
Aâ
W
B
Câ
D
45. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 54@armillz
Pattern: testing simultaneous changes
⢠Deploy and execute simultaneous branch and cross-service testing
⢠Example: specify multiple builds or deployment versions during test environment creation
⢠Build/deploy multiple changed versions into same environment
⢠Minimize concurrent versions to avoid integration problems
⢠Force the integration problems as soon as possible
⢠Anti-pattern: multiple versions of all APIs deployed everywhere
⢠How do you wire them together?
⢠Do you have to develop parallel versions? à torture
App
Aâ
W
B
Câ
D
App
Aâ
W
B
Câ
D
A
?
46. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 55@armillz
Important Non-Pipeline Aspects
47. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 56@armillz
Importance of team structure and communication
⢠Teams must align with delivery process
⢠Your teams are likely part of a shared product
⢠If not ... Great! Rock on!
⢠If so, donât pretend to be separate
⢠Ever had problems with remote, isolated vendors?
⢠Communicate with each other!
⢠Regardless, you will likely have shared patterns (devops, testing, architecture) that can be
leveraged to avoid re-inventing the wheel in your enterprise
48. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 57@armillz
Example âDevOpsâ product team structure
Our team organization on a 50-ish person development project
Important for the vertical development teams to actually work with each other (painful at first)
Horizontal Teams
DevOps Engr
DevOps Lead
Platform Engr
Platform Lead
Platform Engr Security
Security
Security
Performance
Performance
Agile Vertical Team
Scrum master
DevOps Engr
Biz Analyst
Agile Tester
Front End
Full Stack
Agile Vertical Team
Scrum master
DevOps Engr
Biz Analyst
Agile Tester
Front End
Full Stack
Agile Vertical Team
Scrum master
DevOps Engr
Biz Analyst
Agile Tester
Front End
Full Stack
Agile Vertical Team
Scrum master
DevOps Engr
Biz Analyst
Agile Tester
Front End
Full Stack
49. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 58@armillz
Integrating with software architecture
⢠Not all software lends itself to easy build, test, and deployment
⢠Work directly with software architecture and development teams
⢠Meaningful, testable service architecture is critical
⢠Each software service must support:
⢠Rapid build
⢠Automated test (controllability, observability) â between services
⢠Data initialization
⢠Installation/configuration
⢠Monitoring/metrics
⢠Cross-service debugging
⢠Standards and "Definition of Done" should reflect this
⢠Development stories arenât complete until all these things work
⢠Keep product value and cross-service features in mind
50. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 60@armillz
Take-aways
⢠Version control everything, automate everything
⢠Your pipeline implements your branching strategy
⢠Independent pipelines with join points
⢠Use dynamic environments (containers!)
⢠Store and branch everything together â code, tests, database, pipeline code
⢠Test in isolation, test with downstream, and test with upstream
⢠Use shared/central pipeline libraries to avoid duplication and enforce standards
⢠And donât forget:
WORK TOGETHER, DAMMIT!
51. Š COPYRIGHT 2019 COVEROS, INC. ALL RIGHTS RESERVED. 61@armillz
Questions?
Thank you!
rich.mills@coveros.com
@armillz
https://www.coveros.com/services/devops/
Drop by our booth!