In the world of fast changing technologies and business requirements there is no way to stay with old-school approaches to develop software. Common, leave manual interaction behind, let machine do what it's best capable for and spend your time to solve real problems. During this talk I'm going to demonstrate how to build a sophisticated continuous development pipeline for Java based project to cover things like build, test, code quality, deploy and delivery using Gradle, Jenkins, SonarQube, Docker and Ansible. As an outcome of this presentation there will be an open source project with source code.
2. ● SA at EPAM Systems
● primary skill is Java
● hands-on-coding with Groovy, Ruby
● trying to learn some Erlang/Elixir
● passionate about agile, clean code and devops
Izzet Mustafayev@EPAM Systems
@webdizz webdizz izzetmustafaiev
http://webdizz.name
7. Principles
#1 Each change auto. built and deployed
#2 Test on closed to prod environment
8. Principles
#1 Each change auto. built and deployed
#2 Test on closed to prod environment
#3 Integrate as frequently as possible
9. Principles
#1 Each change auto. built and deployed
#2 Test on closed to prod environment
#3 Integrate as frequently as possible
#4 The highest priority to fix failed build
10. Benefits
● Each change guarantees working code
● Each update should guarantee working
code ;)
● There is no delay for epic merge
● Less bugs - depends on your tests
efficiency*
● Allows to have code ready to go live
11. Challenges
● Need to build infrastructure
● Need to build team culture
● Need to support/enhance infrastructure
● Overhead with writing a lot of different
kind of tests
14. Principles
#1 Every commit can result in a release
#2 Automated tests are essential
15. Principles
#1 Every commit can result in a release
#2 Automated tests are essential
#3 Automate everything!
16. Principles
#1 Every commit can result in a release
#2 Automated tests are essential
#3 Automate everything!
#4 Done means released
17. Benefits
● Speed of delivery of business idea to
customer
● Easy going live deployment
● Less time spent on delivery - more profit
● More motivation to do more as you can
see what you can change/improve
18. Challenges
● Big effort to implement changes for:
○ database increment/rollback
○ infrastructure rollout/rollback
○ decrease down time …
● Need to get customers to buy in
● Security policies
24. Gradle
- General purpose build system
- Comes with a rich DSL based on Groovy
25. Gradle
- General purpose build system
- Comes with a rich DSL based on Groovy
- Follows ”build-by-convention” principles
26. Gradle
- General purpose build system
- Comes with a rich DSL based on Groovy
- Follows ”build-by-convention” principles
- Built-in plug-ins for JVM languages, etc
27. Gradle
- General purpose build system
- Comes with a rich DSL based on Groovy
- Follows ”build-by-convention” principles
- Built-in plug-ins for JVM languages, etc
- Declarative builds
34. SonarQube
- Measures code quality from day #0
- 7 axes of code quality
- Helps to manage Technical Dept
35. SonarQube
- Measures code quality from day #0
- 7 axes of code quality
- Helps to manage Technical Dept
- Works not only for Java
36. SonarQube
- Measures code quality from day #0
- 7 axes of code quality
- Helps to manage Technical Dept
- Works not only for Java
- Good for dev, qa, archs & manager
53. Ansible
- Agentless
- SSH as a protocol, requires only Python
- YAML based configuration
54. Ansible
- Agentless
- SSH as a protocol, requires only Python
- YAML based configuration
- Declarative and Decentralized
55. Ansible
- Agentless
- SSH as a protocol, requires only Python
- YAML based configuration
- Declarative and Decentralized
- Built-in security and encryption