Continuous Development Pipeline

  • View
    1.548

  • Download
    2

  • Category

    Software

Preview:

DESCRIPTION

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.

Citation preview

Continuous Development

Pipeline

● 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 izzetmustafaievhttp://webdizz.name

Agenda● Introduction

● Step-by-step Implementation

■ Gradle

■ SonarQube

■ Jenkins

■ Ansible

● References

● Summary

● Q&A

Introduction

Continuous Integration

Principles

#1 Each change auto. built and deployed

#2 Test on closed to prod environment

Principles

#1 Each change auto. built and deployed

#2 Test on closed to prod environment

#1 Each change auto. built and deployed

#3 Integrate as frequently as possible

Principles

#2 Test on closed to prod environment

#1 Each change auto. built and deployed

#3 Integrate as frequently as possible

Principles

#4 The highest priority to fix failed build

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

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

Continuous Delivery

Principles

#1 Every commit can result in a release

Principles

#1 Every commit can result in a release

#2 Automated tests are essential

Principles

#1 Every commit can result in a release

#2 Automated tests are essential

#3 Automate everything!

Principles

#1 Every commit can result in a release

#2 Automated tests are essential

#3 Automate everything!

#4 Done means released

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

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

Step-by-step Implementation

Continuous Development?

Gradle

2.2.1

Gradle- General purpose build system

Gradle- General purpose build system

- Comes with a rich DSL based on Groovy

Gradle- General purpose build system

- Comes with a rich DSL based on Groovy

- Follows ”build-by-convention” principles

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

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

Demo Time

CodeQuality

Ad-hoc, fast feedback

Ad-hoc, fast feedback

Over time

SonarQube- Measures code quality from day #0

SonarQube- Measures code quality from day #0

- 7 axes of code quality

SonarQube- Measures code quality from day #0

- 7 axes of code quality

- Helps to manage Technical Dept

SonarQube- Measures code quality from day #0

- 7 axes of code quality

- Helps to manage Technical Dept

- Works not only for Java

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

Demo Time

Jenkins

Jenkins- Distributed builds

Jenkins- Distributed builds

- Plugin Support

Jenkins- Distributed builds

- Plugin Support

- Easy installation, configuration

Jenkins- Distributed builds

- Plugin Support

- Easy installation, configuration

- Strong community and eco-system

Notifications

Email sucks

Who cares?

During a day

End of day

Demo Time

Ansible

Ansible- Agentless

Ansible- Agentless

- SSH as a protocol, requires only Python

Ansible- Agentless

- SSH as a protocol, requires only Python

- YAML based configuration

Ansible- Agentless

- SSH as a protocol, requires only Python

- YAML based configuration

- Declarative and Decentralized

Ansible- Agentless

- SSH as a protocol, requires only Python

- YAML based configuration

- Declarative and Decentralized

- Built-in security and encryption

Demo Time

Summary

Summary ● Culture is quite important

Summary ● Culture is quite important

● Automation is a thing

Summary ● Culture is quite important

● Automation is a thing

● Automated Testing is even more thing

Summary ● Culture is quite important

● Automation is a thing

● Automated Testing is even more thing

● Continuous process

References

Q&A

Izzet Mustafayev@EPAM Systems@webdizz webdizz izzetmustafaievhttp://webdizz.name

Recommended