JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server...

29
JenkinsOps @ NPR An Initiative to Streamline & Automate Jenkins Presented by Paul Miles & Grant Dickie

Transcript of JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server...

Page 1: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

JenkinsOps @ NPR

An Initiative to Streamline & Automate JenkinsPresented by Paul Miles & Grant Dickie

Page 2: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

NPR’s Applications

http://www.npr.org

Page 3: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

More About Us

● 10+ Year Codebases● Multiple Scrum teams● Record setting growth and usage of our services● Growing team

○ Hiring of a test automation engineer○ More rigor in development practices

● Various initiatives○ Scale○ Separation of services & site code○ More frequent deployment

Page 4: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Enabler: Major Investments in Testing

Page 5: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Image excerpted Martin Fowler’s TestPyramid article

Page 6: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)
Page 7: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)
Page 8: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

One Tool at the Center of it All

Page 9: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

CI UAT

Page 10: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

CI UAT Branch

Page 11: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

CI UAT Branch

Branch Branch

Page 12: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

JenkinsOps to the Rescue

Page 13: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Overview of Building and Testing

Codebase

StageServer

UpdateJob

BuildJob Stage Server-specificTest Master

Integration TestIntegration

TestIntegration TestIntegration

Test

UnitTestUnitTest

UnitTestUnitTest

Page 14: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Required Elements

● Comprehensive reporting via One-test-One-job● Dynamically create jobs on the fly based on codebase +

server hostname● Notifications

Page 15: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)
Page 16: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Plugins for Job Organization

● Multijob● Folders● Custom View Tabs● Nested View

Page 18: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Automated Creation of Tests via File Traversal

Php1Tests.incPhp2Tests.inc

Php3Tests.incPhp4Tests.inc

Website codebase

WebsiteCodebaseJob

Stage1_Website_Php1TestStage1_Website_Php2Test

Stage1_Website_Php3Test

Stage1_Website_Php4Test

qa/qa/ (copied)

WebsiteConfigCreate

WebsiteJobCreate

Stage1_WebsiteMasterJob

Stage1_Website

Page 19: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

From another viewpoint…

Jenkins Build Server

Jenkins QA Server

Github Commit

initiates CI

Staging server

Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Test jobs run against staging server specified in build trigger job.

Build job started

Uploads code to stating server

Job done, notifies QA

server

JobConfigCreate, JobCreate jobs Jobs triggered

with codebase, environment, etc.

MasterCodebaseJobs

MasterTestJobA

MasterTestJobB

Page 20: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Each Environment Folder is Self-Contained

StageX_Codebase

StageX_Tests StageX_Master

Test1

Test2

Test3

StageXMasterTestJob

StageX_CI

StageXMasterCodebaseJob

StageXConfigCreate

StageXJobCreate

POST received

from build server

RunTestsJob

Auto-detects that folder is already built and triggers master job.

Page 21: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)
Page 22: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)
Page 23: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)
Page 24: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

How Did it Go? And Now What?

Page 25: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Challenges

● Resurrection of the tests○ Reliance on the test automation engineer to share results○ Forever disabled tests

● Environment issues○ Production vs. UAT vs. stage environment servers

● Culture issues○ Education of development team

Page 26: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Challenges, continued

● Oopsies○ Automated deletion of tests○ Disk space / Memory / “Jenkins Scale” issues

● Implicit Oopsies:○ All the parameters○ Too much ‘noise’

Page 27: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Future Work

● One button click to create testing environment & tests● ChatOps● Claims

Page 28: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Your Presenters

Grant Dickiehttps://twitter.com/jgrantd

Paul Mileshttps://twitter.com/milespj

Page 29: JenkinsOps @ NPR...Jenkins Build Server Jenkins QA Server Github Commit initiates CI Staging server Generates jobs based on file traversal of PHPUnit/Junit directory (from latest commit)

Questions