SlideShare ist ein Scribd-Unternehmen logo
1 von 66
Downloaden Sie, um offline zu lesen
DOMINIK VESELÝ
Software Architect, Ackee
Everything you always
wanted to know about
CI but were afraid to
ask
Software Architect @ Ackee
Mobile developer since 2010
Teaching iOS on CTU (which also happens to be my Alma
Mater)
CodeCamp lecturer
Speaker
Introduction
2 years in searching for the golden grail in mobile
automation
Motivation to save time and money by not doing routine
work
Get the edge
Last 6 months pushing it to the limits
CI experience
Inspired by Woody Allen’s “Everything You Always Wanted
to Know About Sex * But Were Afraid to Ask “
Series of short sequences (questions) about topic which
should reveal all the important facts about Continuous
Integration
This talk and movie parallel
What is CI?
Is it safe?
Which tools should I choose?
What it should do on Backends?
What it should do on Apps?
Does it hurt?
Is it worthy?
Questions
What is CI?
Continuous integration (CI) is the practice, in software
engineering, of merging all developer working copies
to a shared mainline several times a day.
— Wikipedia
What is CI?
Thats easy. Thats what we do already!
But is that helpful ?
We need to add more
What is CI? Best practices
Maintain Code Repository
Automate the build
Make the build self-testing
Everyone commits to the baseline every day
Every commit (to baseline) should be built
Make it easy to get the latest deliverables
Everyone can see the results of the latest build
Automate deployment
Developers hate spending time with building / deploying
“I dont wanna do this monkey job”
Tester need build now … developer is busy or N/A
Scenarios for needs of CI
What is CI?
Huge software would take ages to build on workstation
Pipeline with QA / Testing / Reporting and hundreds of
others …
Necessary for big companies
What is CI? Corporate
edition
What is CI? App
development companies
Key part of CI for small teams is automation.
Everything else is a bonus!
Iniciative of Ackee to focus on good and clean solutions.
Leverage technology to improve your apps
We focused primarily on CI and testing for all our platforms
#rokkvality
Time/Money/Brain saver
Bigger app 344 builds 4 min approx for build and deploy
1032 minutes = 17,2 hours per 4 months
Which makes it 50 hours per project (3 platforms)
With 5 concurrent projects thats 250 hours
For work that is fully automated and you don’t have to
care about it at all.
CI is on the rise
Virtualization architecture (Docker) makes it much simpler
and affordable.
Mature tooling
Developers are lazier
Is it safe?
Well definitely safer …
It should prevent from programmer errors
Is it safe? Quiz
Do you write tests? — not part of a quiz (of course you do)
Do you enjoy writing tests?
Do you enjoy running tests?
How often do you forget to run tests before/during build?
How often do you make a mistake while deploying …
wrong environment / wrong build etc ?
Is it safe? Quiz part #2
How often you notify your co-workers about your deploy?
Shout out to the office ?
Email to all@company.com Subject: I just Released!
Write to slack channel ?
Is it safe? Quiz result
No you DO NOT
because you are humans
and you are lazy
Is it safe? Quiz result
But! There is someone who does not mind!
Yes! It is Jenkins
He might be even enjoying it
He never forgets
He will always notify you!
Is it safe? Notifying
How Jenkins knows about what has been changed
Commit messages
It is tricky part when you have Dominik in your team
Is it safe? Commit messages
category: Not very helpful
Is it safe? Co
at least he tried…
Is it safe? Commit messages
category: prayer!
Is it safe? Commit messages
category: WTF?!
Which tools should I use?
and Why?
First you need CI server software which is responsible for
points 2-6
CI server options
TravisCI
CircleCI
GitlabCI
Bamboo
Jenkins
CI build
Build is “single work unit” with each commit / time / on
demand trigger one build is started
Build consists of “unlimited” number of build steps
Build consists of “unlimited” number of post build steps
each (post) build step can change build status
CI build status
Success
Unstable
Failure
Custom?
What Jenkins should do with
Backends?
Checkout revisions
Code quality check
Deployment
Notifying
NodeJS code quality - Lint
Depends on how much “lint nazi” you want to be.
Checks for appropriate code style rules.
Not only visual but also semantical checks
Breaking the rules emits warnings / errors
NodeJS code quality - Lint
We chose ESLint which seems best performing and most
active
With Airbnb code style.
You can setup how many warnings / errors makes build
unstable / failed
NodeJS code quality - Lint
NodeJS code quality - Lint
We have 0 errors &
“unlimited” warning policy
NodeJS code quality - Lint
NodeJS code quality - Testing
“Just testing” with automated start
Oh and “Blaming” feature
We use Mocha / Chai combo
History overview
again zero failure tolerance
NodeJS code quality - Testing
NodeJS code quality - Coverage
awesome tool - Istanbul
tells you how much of your code is covered by tests
conditionals / methods / statements
again you can set up % for failure
we are very benevolent on this one :/ #rokkvality
NodeJS code quality - Coverage
NodeJS code quality - Coverage
NodeJS Deployment
Post build task. If build is successful you can deploy it
Azure / AWS / Bluemix / Heroku / SSH
There is always plugin for that
NodeJS Notifying
we use custom channels for each project ci-project so it
does not spam your project channel but still keep the
relevance
What Jenkins should do with
apps?
Primary focus is on delivering builds
What Jenkins should do with
apps?
Run UnitTests
Run UITests
Run Linter & formatter
Build Binary
Deploy for tester
Notify
Go beyond
What Jenkins should do with
apps?
For building ios app you need mac
Macbook, Mac mini, iMac, Mac Pro
or … Mackee
What Jenkins should do with
apps?
UITests are pain
Unit testing is same as on Backend
Linting in Swift
We are “using” SwiftLint but it is very young project
Swift does not have its “good standards” yet
Swift3 would broke everything
Therefore “soft” code style
Building binary for iOS
Xcodebuild - horrible tool
XCTool - facebook wrapper around Xcodebuild
IPA - (yes it is actual name of this tool) simplified xcodebuild
Fastlane
FastLane
Awesome CI tool for iOS enables you tons of things
including run tests, building, signing and much more
Detailed talk on it on mDevCamp
You can run it locally or on CI server
Building binary for iOS
Idea is build binary into file on filesystem and then distribute it
HockeyApp / TestFlight
Again there are lot of plugins
Troubles with certificates (Who would say that)
Testing for Android
Start emulator (there is plugin or script ready)
Run monkey testing
Then if you have UI/Unit tests in project they will run
Problems with Emulator (needs virtualization support)
Linting in Java
Available in Android build system
Unfortunately conflicts with RetroLambda
Building binary for Android
Multiple build types in Gradle script (Debug Beta Release)
Handles version code, obfuscation, test report, Mappings.txt and
Apk
Than we just run the Gradle wrapper
Deploying apps
We use HockeyApp
We had upload to hockeyapp as one post build task in each job
Now we have separate job just to upload the binary and notify on
slack in separate #hockeyapp channel which is really neat!
Good for testers and project managers
Go beyond
You can use your CI server to also create and upload screenshots
Tint your icon with beta flag
upload to the app store
more on mDevCamp
Does it hurt?
It could be pain and lot of headache
You have to update credentials
You have to update your Hackintosh :<
You have to update SDK
You are working with different versions of SDK with different projects
It is process so it sucks
Does it hurt? #2
When it does not work you have to find alternatives
You have to spend more time to write better code
Anyone can see your mistakes immediately
There could be some laughter
Does it hurt? #2
Is it worthy?
YES!
I can not stress that enough! YES!
All the time, money and focus it saves will not only
make you work faster and better. It will make you feel
better about your work
We are always trying to push
it further
If you wanna start with CI, let me know
If you come up with something better, let me know
Did you like my presentation, let me know
Catch me on twitter @dominikvesely or hashtag #rokkvality /
#mdevtalk
Or lets have a beer @ afterparty
Key points
Don’t do work that can be automated. And it’s boring.
Keep focus on important stuff
Keep whole team informed
Save money and time
Catch me on twitter @dominikvesely or hashtag #rokkvality /
#mdevtalk
Beer @ afterparty
WWW.MDEVTALK.CZ
mdevtalk

Weitere ähnliche Inhalte

Was ist angesagt?

Offline Storage: Build secure, offline-first apps
Offline Storage: Build secure, offline-first appsOffline Storage: Build secure, offline-first apps
Offline Storage: Build secure, offline-first appsRachelAshton5
 
Software Delivery at Warp Speed: Five Essential Techniques
Software Delivery at Warp Speed: Five Essential TechniquesSoftware Delivery at Warp Speed: Five Essential Techniques
Software Delivery at Warp Speed: Five Essential TechniquesAtlassian
 
Automated Release Pipelines with Azure DevOps
Automated Release Pipelines with Azure DevOpsAutomated Release Pipelines with Azure DevOps
Automated Release Pipelines with Azure DevOpsProjectCon
 
Accelerate your Application Delivery with DevOps and Microservices
Accelerate your Application Delivery with DevOps and MicroservicesAccelerate your Application Delivery with DevOps and Microservices
Accelerate your Application Delivery with DevOps and MicroservicesAmazon Web Services
 
Building Rich Applications with Appcelerator
Building Rich Applications with AppceleratorBuilding Rich Applications with Appcelerator
Building Rich Applications with AppceleratorMatt Raible
 
An Introduction to Dependency Injection
An Introduction to Dependency InjectionAn Introduction to Dependency Injection
An Introduction to Dependency InjectionAdam Stephensen
 
Azure, DevOps and the Commodore 64
Azure, DevOps and the Commodore 64Azure, DevOps and the Commodore 64
Azure, DevOps and the Commodore 64Todd Whitehead
 
Exposing services with Azure API Management
Exposing services with Azure API ManagementExposing services with Azure API Management
Exposing services with Azure API ManagementCallon Campbell
 
Dev ops for cross platform mobile modeveast 12
Dev ops for cross platform mobile   modeveast 12Dev ops for cross platform mobile   modeveast 12
Dev ops for cross platform mobile modeveast 12Sanjeev Sharma
 
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...Janusz Nowak
 
Azure DevOps: the future of integration and traceability
Azure DevOps: the future of integration and traceabilityAzure DevOps: the future of integration and traceability
Azure DevOps: the future of integration and traceabilityLorenzo Barbieri
 
Building scalable applications using serverless on the cloud
Building scalable applications using serverless on the cloudBuilding scalable applications using serverless on the cloud
Building scalable applications using serverless on the cloudCallon Campbell
 
10 Reasons Your Software Sucks 2014 - Tax Day Edition!
10 Reasons Your Software Sucks 2014 - Tax Day Edition!10 Reasons Your Software Sucks 2014 - Tax Day Edition!
10 Reasons Your Software Sucks 2014 - Tax Day Edition!Caleb Jenkins
 
WSO2Con EU 2015: Keynote - The Containerization of the Developer Workspace
WSO2Con EU 2015: Keynote - The Containerization of the Developer WorkspaceWSO2Con EU 2015: Keynote - The Containerization of the Developer Workspace
WSO2Con EU 2015: Keynote - The Containerization of the Developer WorkspaceWSO2
 
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...SlideTeam
 
DCEU 18: Making Legacy Legendary - A Windows 2003 Application Journey to the ...
DCEU 18: Making Legacy Legendary - A Windows 2003 Application Journey to the ...DCEU 18: Making Legacy Legendary - A Windows 2003 Application Journey to the ...
DCEU 18: Making Legacy Legendary - A Windows 2003 Application Journey to the ...Docker, Inc.
 
.NET Day Switzerland 2019 - DOCKER + AZURE DEVOPS + KUBERNETES = ♥
.NET Day Switzerland 2019 - DOCKER + AZURE DEVOPS + KUBERNETES = ♥.NET Day Switzerland 2019 - DOCKER + AZURE DEVOPS + KUBERNETES = ♥
.NET Day Switzerland 2019 - DOCKER + AZURE DEVOPS + KUBERNETES = ♥Marc Müller
 

Was ist angesagt? (20)

Azure IoT Central
Azure IoT CentralAzure IoT Central
Azure IoT Central
 
Offline Storage: Build secure, offline-first apps
Offline Storage: Build secure, offline-first appsOffline Storage: Build secure, offline-first apps
Offline Storage: Build secure, offline-first apps
 
Software Delivery at Warp Speed: Five Essential Techniques
Software Delivery at Warp Speed: Five Essential TechniquesSoftware Delivery at Warp Speed: Five Essential Techniques
Software Delivery at Warp Speed: Five Essential Techniques
 
Automated Release Pipelines with Azure DevOps
Automated Release Pipelines with Azure DevOpsAutomated Release Pipelines with Azure DevOps
Automated Release Pipelines with Azure DevOps
 
Accelerate your Application Delivery with DevOps and Microservices
Accelerate your Application Delivery with DevOps and MicroservicesAccelerate your Application Delivery with DevOps and Microservices
Accelerate your Application Delivery with DevOps and Microservices
 
Building Rich Applications with Appcelerator
Building Rich Applications with AppceleratorBuilding Rich Applications with Appcelerator
Building Rich Applications with Appcelerator
 
An Introduction to Dependency Injection
An Introduction to Dependency InjectionAn Introduction to Dependency Injection
An Introduction to Dependency Injection
 
Azure, DevOps and the Commodore 64
Azure, DevOps and the Commodore 64Azure, DevOps and the Commodore 64
Azure, DevOps and the Commodore 64
 
Exposing services with Azure API Management
Exposing services with Azure API ManagementExposing services with Azure API Management
Exposing services with Azure API Management
 
Dev ops for cross platform mobile modeveast 12
Dev ops for cross platform mobile   modeveast 12Dev ops for cross platform mobile   modeveast 12
Dev ops for cross platform mobile modeveast 12
 
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
 
Azure DevOps: the future of integration and traceability
Azure DevOps: the future of integration and traceabilityAzure DevOps: the future of integration and traceability
Azure DevOps: the future of integration and traceability
 
Building scalable applications using serverless on the cloud
Building scalable applications using serverless on the cloudBuilding scalable applications using serverless on the cloud
Building scalable applications using serverless on the cloud
 
10 Reasons Your Software Sucks 2014 - Tax Day Edition!
10 Reasons Your Software Sucks 2014 - Tax Day Edition!10 Reasons Your Software Sucks 2014 - Tax Day Edition!
10 Reasons Your Software Sucks 2014 - Tax Day Edition!
 
WSO2Con EU 2015: Keynote - The Containerization of the Developer Workspace
WSO2Con EU 2015: Keynote - The Containerization of the Developer WorkspaceWSO2Con EU 2015: Keynote - The Containerization of the Developer Workspace
WSO2Con EU 2015: Keynote - The Containerization of the Developer Workspace
 
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...
 
Azure devops
Azure devopsAzure devops
Azure devops
 
DCEU 18: Making Legacy Legendary - A Windows 2003 Application Journey to the ...
DCEU 18: Making Legacy Legendary - A Windows 2003 Application Journey to the ...DCEU 18: Making Legacy Legendary - A Windows 2003 Application Journey to the ...
DCEU 18: Making Legacy Legendary - A Windows 2003 Application Journey to the ...
 
.NET Day Switzerland 2019 - DOCKER + AZURE DEVOPS + KUBERNETES = ♥
.NET Day Switzerland 2019 - DOCKER + AZURE DEVOPS + KUBERNETES = ♥.NET Day Switzerland 2019 - DOCKER + AZURE DEVOPS + KUBERNETES = ♥
.NET Day Switzerland 2019 - DOCKER + AZURE DEVOPS + KUBERNETES = ♥
 
Azure DevOps in Action
Azure DevOps in ActionAzure DevOps in Action
Azure DevOps in Action
 

Andere mochten auch

Estándares unidades formativa 3 de lengua y matemáticas y unidad 2 de Ciencia...
Estándares unidades formativa 3 de lengua y matemáticas y unidad 2 de Ciencia...Estándares unidades formativa 3 de lengua y matemáticas y unidad 2 de Ciencia...
Estándares unidades formativa 3 de lengua y matemáticas y unidad 2 de Ciencia...Aprendiendoeneltaller
 
MAAA363 portfolio
MAAA363 portfolioMAAA363 portfolio
MAAA363 portfolioRetza16
 
Healthy habits
Healthy habitsHealthy habits
Healthy habitsun920453
 
Linux egitimi-ankara
Linux egitimi-ankaraLinux egitimi-ankara
Linux egitimi-ankarazeynep_zyn23
 
พ.อ.ดร.เศรษฐพงค์ สงครามไซเบอร์เขย่าโลก
พ.อ.ดร.เศรษฐพงค์   สงครามไซเบอร์เขย่าโลก พ.อ.ดร.เศรษฐพงค์   สงครามไซเบอร์เขย่าโลก
พ.อ.ดร.เศรษฐพงค์ สงครามไซเบอร์เขย่าโลก Settapong_CyberSecurity
 
Performance Monitoring in the Cloud - Gluecon 2011
Performance Monitoring in the Cloud - Gluecon 2011Performance Monitoring in the Cloud - Gluecon 2011
Performance Monitoring in the Cloud - Gluecon 2011Paul Guth
 

Andere mochten auch (13)

Estándares unidades formativa 3 de lengua y matemáticas y unidad 2 de Ciencia...
Estándares unidades formativa 3 de lengua y matemáticas y unidad 2 de Ciencia...Estándares unidades formativa 3 de lengua y matemáticas y unidad 2 de Ciencia...
Estándares unidades formativa 3 de lengua y matemáticas y unidad 2 de Ciencia...
 
Como evitar enfermarse
Como evitar enfermarseComo evitar enfermarse
Como evitar enfermarse
 
MAAA363 portfolio
MAAA363 portfolioMAAA363 portfolio
MAAA363 portfolio
 
CV by Naukri HDFC
CV by Naukri  HDFCCV by Naukri  HDFC
CV by Naukri HDFC
 
Cover page about me
Cover page about meCover page about me
Cover page about me
 
Healthy habits
Healthy habitsHealthy habits
Healthy habits
 
Linux egitimi-ankara
Linux egitimi-ankaraLinux egitimi-ankara
Linux egitimi-ankara
 
พ.อ.ดร.เศรษฐพงค์ สงครามไซเบอร์เขย่าโลก
พ.อ.ดร.เศรษฐพงค์   สงครามไซเบอร์เขย่าโลก พ.อ.ดร.เศรษฐพงค์   สงครามไซเบอร์เขย่าโลก
พ.อ.ดร.เศรษฐพงค์ สงครามไซเบอร์เขย่าโลก
 
Tpack final nidia
Tpack final  nidiaTpack final  nidia
Tpack final nidia
 
110558774 manual-de-voladura-de-konya
110558774 manual-de-voladura-de-konya110558774 manual-de-voladura-de-konya
110558774 manual-de-voladura-de-konya
 
RCC Case Study
RCC Case Study RCC Case Study
RCC Case Study
 
ncqa_primer_web
ncqa_primer_webncqa_primer_web
ncqa_primer_web
 
Performance Monitoring in the Cloud - Gluecon 2011
Performance Monitoring in the Cloud - Gluecon 2011Performance Monitoring in the Cloud - Gluecon 2011
Performance Monitoring in the Cloud - Gluecon 2011
 

Ähnlich wie Dominik Veselý - Vše co jste kdy chtěli vědět o CI a báli jste se zeptat

Introducing Continuous Integration Using Vsts
Introducing Continuous Integration Using VstsIntroducing Continuous Integration Using Vsts
Introducing Continuous Integration Using VstsMohamed Samy
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationBoris Dominic
 
Continuous Integration - What even is it?
Continuous Integration - What even is it?Continuous Integration - What even is it?
Continuous Integration - What even is it?Rob Jacoby
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integrationdrluckyspin
 
Continuous integration - CI
Continuous integration - CIContinuous integration - CI
Continuous integration - CINhan Nguyen
 
iOS CI/CD: Continuous Integration and Continuous Delivery Explained
iOS CI/CD: Continuous Integration and Continuous Delivery ExplainediOS CI/CD: Continuous Integration and Continuous Delivery Explained
iOS CI/CD: Continuous Integration and Continuous Delivery ExplainedSemaphore
 
Intro to CI/CD using Docker
Intro to CI/CD using DockerIntro to CI/CD using Docker
Intro to CI/CD using DockerMichael Irwin
 
Continuous Everything
Continuous EverythingContinuous Everything
Continuous EverythingAndrea Tino
 
CI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift DeploymentCI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift DeploymentBintang Thunder
 
DevOps - Understanding Core Concepts (Old)
DevOps - Understanding Core Concepts (Old)DevOps - Understanding Core Concepts (Old)
DevOps - Understanding Core Concepts (Old)Nitin Bhide
 
Mobile application development platform
Mobile application development platformMobile application development platform
Mobile application development platformi4consulting.org
 
Continuous, continuous, continuous
Continuous, continuous, continuousContinuous, continuous, continuous
Continuous, continuous, continuousMichele Orselli
 
Visual Studio 2015 / Visual Studio Team Services Overview
Visual Studio 2015 / Visual Studio Team Services OverviewVisual Studio 2015 / Visual Studio Team Services Overview
Visual Studio 2015 / Visual Studio Team Services OverviewHimanshu Desai
 
What is jenkins
What is jenkinsWhat is jenkins
What is jenkinslinuxdady
 
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar Series
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar SeriesGetting Started With Continuous Delivery on AWS - AWS April 2016 Webinar Series
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar SeriesAmazon Web Services
 
I Love APIs - Oct 2015
I Love APIs - Oct 2015I Love APIs - Oct 2015
I Love APIs - Oct 2015Mike McNeil
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven DevelopmentEffective
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven DevelopmentEffectiveUI
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentJohn Blanco
 
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeConfoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeSteve Mercier
 

Ähnlich wie Dominik Veselý - Vše co jste kdy chtěli vědět o CI a báli jste se zeptat (20)

Introducing Continuous Integration Using Vsts
Introducing Continuous Integration Using VstsIntroducing Continuous Integration Using Vsts
Introducing Continuous Integration Using Vsts
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Continuous Integration - What even is it?
Continuous Integration - What even is it?Continuous Integration - What even is it?
Continuous Integration - What even is it?
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
Continuous integration - CI
Continuous integration - CIContinuous integration - CI
Continuous integration - CI
 
iOS CI/CD: Continuous Integration and Continuous Delivery Explained
iOS CI/CD: Continuous Integration and Continuous Delivery ExplainediOS CI/CD: Continuous Integration and Continuous Delivery Explained
iOS CI/CD: Continuous Integration and Continuous Delivery Explained
 
Intro to CI/CD using Docker
Intro to CI/CD using DockerIntro to CI/CD using Docker
Intro to CI/CD using Docker
 
Continuous Everything
Continuous EverythingContinuous Everything
Continuous Everything
 
CI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift DeploymentCI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift Deployment
 
DevOps - Understanding Core Concepts (Old)
DevOps - Understanding Core Concepts (Old)DevOps - Understanding Core Concepts (Old)
DevOps - Understanding Core Concepts (Old)
 
Mobile application development platform
Mobile application development platformMobile application development platform
Mobile application development platform
 
Continuous, continuous, continuous
Continuous, continuous, continuousContinuous, continuous, continuous
Continuous, continuous, continuous
 
Visual Studio 2015 / Visual Studio Team Services Overview
Visual Studio 2015 / Visual Studio Team Services OverviewVisual Studio 2015 / Visual Studio Team Services Overview
Visual Studio 2015 / Visual Studio Team Services Overview
 
What is jenkins
What is jenkinsWhat is jenkins
What is jenkins
 
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar Series
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar SeriesGetting Started With Continuous Delivery on AWS - AWS April 2016 Webinar Series
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar Series
 
I Love APIs - Oct 2015
I Love APIs - Oct 2015I Love APIs - Oct 2015
I Love APIs - Oct 2015
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeConfoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
 

Mehr von mdevtalk

Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftumdevtalk
 
Jarda Machaň: Proč je dobré míti Developer Evangelistu
Jarda Machaň: Proč je dobré míti Developer EvangelistuJarda Machaň: Proč je dobré míti Developer Evangelistu
Jarda Machaň: Proč je dobré míti Developer Evangelistumdevtalk
 
Pavel Cvetler: Jeden kód, co vládne všem? Žádný problém pro Android i iOS
Pavel Cvetler: Jeden kód, co vládne všem? Žádný problém pro Android i iOSPavel Cvetler: Jeden kód, co vládne všem? Žádný problém pro Android i iOS
Pavel Cvetler: Jeden kód, co vládne všem? Žádný problém pro Android i iOSmdevtalk
 
Anastasiia Vixentael: 10 things you need to know before implementing cryptogr...
Anastasiia Vixentael: 10 things you need to know before implementing cryptogr...Anastasiia Vixentael: 10 things you need to know before implementing cryptogr...
Anastasiia Vixentael: 10 things you need to know before implementing cryptogr...mdevtalk
 
Michal Havryluk: How To Speed Up Android Gradle Builds
Michal Havryluk: How To Speed Up Android Gradle BuildsMichal Havryluk: How To Speed Up Android Gradle Builds
Michal Havryluk: How To Speed Up Android Gradle Buildsmdevtalk
 
Vladislav Iliushin: Dark side of IoT
Vladislav Iliushin: Dark side of IoTVladislav Iliushin: Dark side of IoT
Vladislav Iliushin: Dark side of IoTmdevtalk
 
Georgiy Shur: Bring onboarding to life
Georgiy Shur: Bring onboarding to lifeGeorgiy Shur: Bring onboarding to life
Georgiy Shur: Bring onboarding to lifemdevtalk
 
David Bilík: Anko – modern way to build your layouts?
David Bilík: Anko – modern way to build your layouts?David Bilík: Anko – modern way to build your layouts?
David Bilík: Anko – modern way to build your layouts?mdevtalk
 
Maxim Zaks: Deep dive into data serialisation
Maxim Zaks: Deep dive into data serialisationMaxim Zaks: Deep dive into data serialisation
Maxim Zaks: Deep dive into data serialisationmdevtalk
 
Nikita Tuk: Handling background processes in iOS: problems & solutions
Nikita Tuk: Handling background processes in iOS: problems & solutionsNikita Tuk: Handling background processes in iOS: problems & solutions
Nikita Tuk: Handling background processes in iOS: problems & solutionsmdevtalk
 
Milan Oulehla: Bezpečnost mobilních aplikací na Androidu
Milan Oulehla: Bezpečnost mobilních aplikací na AndroiduMilan Oulehla: Bezpečnost mobilních aplikací na Androidu
Milan Oulehla: Bezpečnost mobilních aplikací na Androidumdevtalk
 
Tomáš Kohout: Jak zrychlit iOS vývoj pomocí Swift playgoundů
Tomáš Kohout: Jak zrychlit iOS vývoj pomocí Swift playgoundůTomáš Kohout: Jak zrychlit iOS vývoj pomocí Swift playgoundů
Tomáš Kohout: Jak zrychlit iOS vývoj pomocí Swift playgoundůmdevtalk
 
David Vávra: Firebase + Kotlin + RX + MVP
David Vávra: Firebase + Kotlin + RX + MVPDavid Vávra: Firebase + Kotlin + RX + MVP
David Vávra: Firebase + Kotlin + RX + MVPmdevtalk
 
Adam Šimek: Optimalizace skrolování, RecyclerView
Adam Šimek: Optimalizace skrolování, RecyclerViewAdam Šimek: Optimalizace skrolování, RecyclerView
Adam Šimek: Optimalizace skrolování, RecyclerViewmdevtalk
 
Paul Lammertsma: Account manager & sync
Paul Lammertsma: Account manager & syncPaul Lammertsma: Account manager & sync
Paul Lammertsma: Account manager & syncmdevtalk
 
Charles Du: Introduction to Mobile UX Design
Charles Du: Introduction to Mobile UX DesignCharles Du: Introduction to Mobile UX Design
Charles Du: Introduction to Mobile UX Designmdevtalk
 
Honza Dvorský: Swift Package Manager
Honza Dvorský: Swift Package ManagerHonza Dvorský: Swift Package Manager
Honza Dvorský: Swift Package Managermdevtalk
 
Jiří Dutkevič: Ochrana citlivých dat v iOS
Jiří Dutkevič: Ochrana citlivých dat v iOSJiří Dutkevič: Ochrana citlivých dat v iOS
Jiří Dutkevič: Ochrana citlivých dat v iOSmdevtalk
 
Petr Dvořák: Push notifikace ve velkém
Petr Dvořák: Push notifikace ve velkémPetr Dvořák: Push notifikace ve velkém
Petr Dvořák: Push notifikace ve velkémmdevtalk
 
Ondřej David: Zabezpečení Androidu na úrovni hardwaru
Ondřej David: Zabezpečení Androidu na úrovni hardwaruOndřej David: Zabezpečení Androidu na úrovni hardwaru
Ondřej David: Zabezpečení Androidu na úrovni hardwarumdevtalk
 

Mehr von mdevtalk (20)

Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
 
Jarda Machaň: Proč je dobré míti Developer Evangelistu
Jarda Machaň: Proč je dobré míti Developer EvangelistuJarda Machaň: Proč je dobré míti Developer Evangelistu
Jarda Machaň: Proč je dobré míti Developer Evangelistu
 
Pavel Cvetler: Jeden kód, co vládne všem? Žádný problém pro Android i iOS
Pavel Cvetler: Jeden kód, co vládne všem? Žádný problém pro Android i iOSPavel Cvetler: Jeden kód, co vládne všem? Žádný problém pro Android i iOS
Pavel Cvetler: Jeden kód, co vládne všem? Žádný problém pro Android i iOS
 
Anastasiia Vixentael: 10 things you need to know before implementing cryptogr...
Anastasiia Vixentael: 10 things you need to know before implementing cryptogr...Anastasiia Vixentael: 10 things you need to know before implementing cryptogr...
Anastasiia Vixentael: 10 things you need to know before implementing cryptogr...
 
Michal Havryluk: How To Speed Up Android Gradle Builds
Michal Havryluk: How To Speed Up Android Gradle BuildsMichal Havryluk: How To Speed Up Android Gradle Builds
Michal Havryluk: How To Speed Up Android Gradle Builds
 
Vladislav Iliushin: Dark side of IoT
Vladislav Iliushin: Dark side of IoTVladislav Iliushin: Dark side of IoT
Vladislav Iliushin: Dark side of IoT
 
Georgiy Shur: Bring onboarding to life
Georgiy Shur: Bring onboarding to lifeGeorgiy Shur: Bring onboarding to life
Georgiy Shur: Bring onboarding to life
 
David Bilík: Anko – modern way to build your layouts?
David Bilík: Anko – modern way to build your layouts?David Bilík: Anko – modern way to build your layouts?
David Bilík: Anko – modern way to build your layouts?
 
Maxim Zaks: Deep dive into data serialisation
Maxim Zaks: Deep dive into data serialisationMaxim Zaks: Deep dive into data serialisation
Maxim Zaks: Deep dive into data serialisation
 
Nikita Tuk: Handling background processes in iOS: problems & solutions
Nikita Tuk: Handling background processes in iOS: problems & solutionsNikita Tuk: Handling background processes in iOS: problems & solutions
Nikita Tuk: Handling background processes in iOS: problems & solutions
 
Milan Oulehla: Bezpečnost mobilních aplikací na Androidu
Milan Oulehla: Bezpečnost mobilních aplikací na AndroiduMilan Oulehla: Bezpečnost mobilních aplikací na Androidu
Milan Oulehla: Bezpečnost mobilních aplikací na Androidu
 
Tomáš Kohout: Jak zrychlit iOS vývoj pomocí Swift playgoundů
Tomáš Kohout: Jak zrychlit iOS vývoj pomocí Swift playgoundůTomáš Kohout: Jak zrychlit iOS vývoj pomocí Swift playgoundů
Tomáš Kohout: Jak zrychlit iOS vývoj pomocí Swift playgoundů
 
David Vávra: Firebase + Kotlin + RX + MVP
David Vávra: Firebase + Kotlin + RX + MVPDavid Vávra: Firebase + Kotlin + RX + MVP
David Vávra: Firebase + Kotlin + RX + MVP
 
Adam Šimek: Optimalizace skrolování, RecyclerView
Adam Šimek: Optimalizace skrolování, RecyclerViewAdam Šimek: Optimalizace skrolování, RecyclerView
Adam Šimek: Optimalizace skrolování, RecyclerView
 
Paul Lammertsma: Account manager & sync
Paul Lammertsma: Account manager & syncPaul Lammertsma: Account manager & sync
Paul Lammertsma: Account manager & sync
 
Charles Du: Introduction to Mobile UX Design
Charles Du: Introduction to Mobile UX DesignCharles Du: Introduction to Mobile UX Design
Charles Du: Introduction to Mobile UX Design
 
Honza Dvorský: Swift Package Manager
Honza Dvorský: Swift Package ManagerHonza Dvorský: Swift Package Manager
Honza Dvorský: Swift Package Manager
 
Jiří Dutkevič: Ochrana citlivých dat v iOS
Jiří Dutkevič: Ochrana citlivých dat v iOSJiří Dutkevič: Ochrana citlivých dat v iOS
Jiří Dutkevič: Ochrana citlivých dat v iOS
 
Petr Dvořák: Push notifikace ve velkém
Petr Dvořák: Push notifikace ve velkémPetr Dvořák: Push notifikace ve velkém
Petr Dvořák: Push notifikace ve velkém
 
Ondřej David: Zabezpečení Androidu na úrovni hardwaru
Ondřej David: Zabezpečení Androidu na úrovni hardwaruOndřej David: Zabezpečení Androidu na úrovni hardwaru
Ondřej David: Zabezpečení Androidu na úrovni hardwaru
 

Dominik Veselý - Vše co jste kdy chtěli vědět o CI a báli jste se zeptat

  • 1.
  • 3. Everything you always wanted to know about CI but were afraid to ask
  • 4. Software Architect @ Ackee Mobile developer since 2010 Teaching iOS on CTU (which also happens to be my Alma Mater) CodeCamp lecturer Speaker Introduction
  • 5. 2 years in searching for the golden grail in mobile automation Motivation to save time and money by not doing routine work Get the edge Last 6 months pushing it to the limits CI experience
  • 6. Inspired by Woody Allen’s “Everything You Always Wanted to Know About Sex * But Were Afraid to Ask “ Series of short sequences (questions) about topic which should reveal all the important facts about Continuous Integration This talk and movie parallel
  • 7. What is CI? Is it safe? Which tools should I choose? What it should do on Backends? What it should do on Apps? Does it hurt? Is it worthy? Questions
  • 9. Continuous integration (CI) is the practice, in software engineering, of merging all developer working copies to a shared mainline several times a day. — Wikipedia
  • 10. What is CI? Thats easy. Thats what we do already! But is that helpful ? We need to add more
  • 11. What is CI? Best practices Maintain Code Repository Automate the build Make the build self-testing Everyone commits to the baseline every day Every commit (to baseline) should be built Make it easy to get the latest deliverables Everyone can see the results of the latest build Automate deployment
  • 12. Developers hate spending time with building / deploying “I dont wanna do this monkey job” Tester need build now … developer is busy or N/A Scenarios for needs of CI
  • 14. Huge software would take ages to build on workstation Pipeline with QA / Testing / Reporting and hundreds of others … Necessary for big companies What is CI? Corporate edition
  • 15. What is CI? App development companies Key part of CI for small teams is automation. Everything else is a bonus!
  • 16. Iniciative of Ackee to focus on good and clean solutions. Leverage technology to improve your apps We focused primarily on CI and testing for all our platforms #rokkvality
  • 17. Time/Money/Brain saver Bigger app 344 builds 4 min approx for build and deploy 1032 minutes = 17,2 hours per 4 months Which makes it 50 hours per project (3 platforms) With 5 concurrent projects thats 250 hours For work that is fully automated and you don’t have to care about it at all.
  • 18. CI is on the rise Virtualization architecture (Docker) makes it much simpler and affordable. Mature tooling Developers are lazier
  • 19. Is it safe? Well definitely safer … It should prevent from programmer errors
  • 20. Is it safe? Quiz Do you write tests? — not part of a quiz (of course you do) Do you enjoy writing tests? Do you enjoy running tests? How often do you forget to run tests before/during build? How often do you make a mistake while deploying … wrong environment / wrong build etc ?
  • 21. Is it safe? Quiz part #2 How often you notify your co-workers about your deploy? Shout out to the office ? Email to all@company.com Subject: I just Released! Write to slack channel ?
  • 22. Is it safe? Quiz result No you DO NOT because you are humans and you are lazy
  • 23. Is it safe? Quiz result But! There is someone who does not mind! Yes! It is Jenkins He might be even enjoying it He never forgets He will always notify you!
  • 24. Is it safe? Notifying How Jenkins knows about what has been changed Commit messages It is tricky part when you have Dominik in your team
  • 25. Is it safe? Commit messages category: Not very helpful
  • 26. Is it safe? Co at least he tried…
  • 27. Is it safe? Commit messages category: prayer!
  • 28. Is it safe? Commit messages category: WTF?!
  • 29. Which tools should I use? and Why? First you need CI server software which is responsible for points 2-6
  • 31. CI build Build is “single work unit” with each commit / time / on demand trigger one build is started Build consists of “unlimited” number of build steps Build consists of “unlimited” number of post build steps each (post) build step can change build status
  • 33. What Jenkins should do with Backends? Checkout revisions Code quality check Deployment Notifying
  • 34. NodeJS code quality - Lint Depends on how much “lint nazi” you want to be. Checks for appropriate code style rules. Not only visual but also semantical checks Breaking the rules emits warnings / errors
  • 35. NodeJS code quality - Lint We chose ESLint which seems best performing and most active With Airbnb code style. You can setup how many warnings / errors makes build unstable / failed
  • 37. NodeJS code quality - Lint We have 0 errors & “unlimited” warning policy
  • 39. NodeJS code quality - Testing “Just testing” with automated start Oh and “Blaming” feature We use Mocha / Chai combo History overview again zero failure tolerance
  • 40. NodeJS code quality - Testing
  • 41. NodeJS code quality - Coverage awesome tool - Istanbul tells you how much of your code is covered by tests conditionals / methods / statements again you can set up % for failure we are very benevolent on this one :/ #rokkvality
  • 42. NodeJS code quality - Coverage
  • 43. NodeJS code quality - Coverage
  • 44. NodeJS Deployment Post build task. If build is successful you can deploy it Azure / AWS / Bluemix / Heroku / SSH There is always plugin for that
  • 45. NodeJS Notifying we use custom channels for each project ci-project so it does not spam your project channel but still keep the relevance
  • 46. What Jenkins should do with apps? Primary focus is on delivering builds
  • 47. What Jenkins should do with apps? Run UnitTests Run UITests Run Linter & formatter Build Binary Deploy for tester Notify Go beyond
  • 48. What Jenkins should do with apps? For building ios app you need mac Macbook, Mac mini, iMac, Mac Pro or … Mackee
  • 49. What Jenkins should do with apps? UITests are pain Unit testing is same as on Backend
  • 50. Linting in Swift We are “using” SwiftLint but it is very young project Swift does not have its “good standards” yet Swift3 would broke everything Therefore “soft” code style
  • 51. Building binary for iOS Xcodebuild - horrible tool XCTool - facebook wrapper around Xcodebuild IPA - (yes it is actual name of this tool) simplified xcodebuild Fastlane
  • 52. FastLane Awesome CI tool for iOS enables you tons of things including run tests, building, signing and much more Detailed talk on it on mDevCamp You can run it locally or on CI server
  • 53. Building binary for iOS Idea is build binary into file on filesystem and then distribute it HockeyApp / TestFlight Again there are lot of plugins Troubles with certificates (Who would say that)
  • 54. Testing for Android Start emulator (there is plugin or script ready) Run monkey testing Then if you have UI/Unit tests in project they will run Problems with Emulator (needs virtualization support)
  • 55. Linting in Java Available in Android build system Unfortunately conflicts with RetroLambda
  • 56. Building binary for Android Multiple build types in Gradle script (Debug Beta Release) Handles version code, obfuscation, test report, Mappings.txt and Apk Than we just run the Gradle wrapper
  • 57. Deploying apps We use HockeyApp We had upload to hockeyapp as one post build task in each job Now we have separate job just to upload the binary and notify on slack in separate #hockeyapp channel which is really neat! Good for testers and project managers
  • 58. Go beyond You can use your CI server to also create and upload screenshots Tint your icon with beta flag upload to the app store more on mDevCamp
  • 59. Does it hurt? It could be pain and lot of headache You have to update credentials You have to update your Hackintosh :< You have to update SDK You are working with different versions of SDK with different projects It is process so it sucks
  • 60. Does it hurt? #2 When it does not work you have to find alternatives You have to spend more time to write better code Anyone can see your mistakes immediately There could be some laughter
  • 62. Is it worthy? YES! I can not stress that enough! YES!
  • 63. All the time, money and focus it saves will not only make you work faster and better. It will make you feel better about your work
  • 64. We are always trying to push it further If you wanna start with CI, let me know If you come up with something better, let me know Did you like my presentation, let me know Catch me on twitter @dominikvesely or hashtag #rokkvality / #mdevtalk Or lets have a beer @ afterparty
  • 65. Key points Don’t do work that can be automated. And it’s boring. Keep focus on important stuff Keep whole team informed Save money and time Catch me on twitter @dominikvesely or hashtag #rokkvality / #mdevtalk Beer @ afterparty