Practical continuous quality gates for development process

44
Practical continuous quality gates for development process Andrii Soldatenko 26-27 February 2016 @a_soldatenko

Transcript of Practical continuous quality gates for development process

Practical continuous quality gates for

development process

Andrii Soldatenko 26-27 February 2016

@a_soldatenko

About me:

• Software Engineer at DataRobot

• Speaker at many PyCon’s

• Speaker at Selenium Camp’15

Motivation

History of CI

Illustration by Andrew Rae

CI 101Martin Fowler

CI 101It was first named and proposed by Grady Booch in 1991

CI 101

"At regular intervals, the process of "continuous integration" yields

executable releases that grow in functionality at every release. ... It is

through these milestones that management can measure progress and quality, and hence anticipate,

identify, and then actively attach risks on an ongoing basis." --

The role of automated testing in CI

Quick Start CI

Run Jenkins

docker run -p 8080:8080 -p 50000:50000 \ -v /$USER/home:/var/jenkins_home jenkins

Jenkins Plugin Manager

Tip: use plugins.txt

cat Dockerfile

FROM jenkinsCOPY plugins.txt /usr/share/jenkins/ref/RUN /usr/local/bin/plugins.sh /usr/share/jenkins/ref/plugins.txt

Tip: use plugins.txt

$ cat plugins.txtcredentials:1.18github-oauth:0.22.2shiningpanda:0.22xunit:1.100postbuild-task:1.8ghprb:1.30.4jenkins-multijob-plugin:1.20

Wuala we see plugins

$ cat plugins.txtcredentials:1.18github-oauth:0.22.2shiningpanda:0.22xunit:1.100postbuild-task:1.8ghprb:1.30.4jenkins-multijob-plugin:1.20

Create New Jobs

Create New Jobs

1. Manually Create new job

2. Jenkins Remote access API

Manually create new job

Manually create new job

2. Jenkins REST API

2. What can you do with Jenkins REST API?

• retrieve information from Jenkins for programmatic consumption.

• trigger a new build • create/copy jobs

Create/copy jobs<project>

<actions/><description/><keepDependencies>false</keepDependencies><properties/><scm class="hudson.scm.NullSCM"/><canRoam>true</canRoam><disabled>false</disabled><blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding><blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>

<triggers/><concurrentBuild>false</concurrentBuild><builders/><publishers/><buildWrappers/>

</project>

XML

Jenkins Job Builder

YAML

Install JJB

git clone https://git.openstack.org/openstack-infra/jenkins-job-builder

cd jenkins-job-builder

python setup.py install

jenkins-jobs --help

usage: jenkins-jobs …

JJB Tip #1:Configure settings

cat /etc/jenkins_jobs/jenkins_jobs.ini-sample

[job_builder]ignore_cache=True

[jenkins]user=andriisoldatenkopassword=passwordurl=192.168.99.100:8080

JJB Tip #2: Test a job definition

jenkins-jobs test templates002.yaml

JJB Tip #3: Updating/Delete Jenkins Jobs

# Update Jenkins Job jenkins-jobs --conf jenkins_jobs.ini \ update templates002.yaml # Delete Jenkins Job jenkins-jobs --conf jenkins_jobs.ini \ delete simple

JJB Example yaml template:

- job: name: regression_testing parameters: - string: name: one_param default: origin/master builders: - shining-panda: publishers: - email: recipients: [email protected]

Pros and Cons JJB:

Cons JJB:publishers: - raw: xml: | <hudson.tasks.junit.JUnitResultArchiver> <testResults>reports/*.xml</testResults> <keepLongStdio>false</keepLongStdio> <testDataPublishers> <hudson.plugins.sauce__ondemand.SauceOnDemandReportPublisher /> </testDataPublishers> <healthScaleFactor>1.0</healthScaleFactor> </hudson.tasks.junit.JUnitResultArchiver>

Integration with Github

Integration with Slack

Slack and JJB- project: name: foo properties: - slack: notify-start: true include-test-summary: true show-commit-list: true room: '#jenkins' token: secret team-domain: example.com include-custom-message: true custom-message: message

publishers: - slack: team-domain: example.com auth-token: secret build-server-url: https://jenkins.example.com room: '#jenkins'

https://goo.gl/F513DU

Avoiding Flaky Tests

Test Result Analyzer

Flaky Test Analyzer

Parse build logsGet all failed build ids

Return list of flaky tests

https://goo.gl/OZm0rA

Workspace Cleanup

Example: npm install

Thanks @gavinjoyce

Final Thoughts

• to be continuous integration • use yaml, git and jjb if possible • use more practical tips • read more books

Future

P.S. books to read:

Thank You

Your feedback is very

valuable and will help me

to continuously improve

my talks https://asoldatenko.com

We are hiringPlease send you CV to

[email protected]

Questions

?