jenkins 2.0 最新事情 〜make jenkins great again〜

92
Jenkins 2.0 Make Jenkins Great Again! Miyata Jumpei (@miyajan) Mar 18, 2017 Productivity Engineering - Forkwell Meetup #4

Upload: jumpei-miyata

Post on 22-Mar-2017

717 views

Category:

Engineering


6 download

TRANSCRIPT

Page 1: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Jenkins 2.0 Make Jenkins Great Again!

Miyata Jumpei (@miyajan)

Mar 18, 2017 Productivity Engineering - Forkwell Meetup #4

Page 2: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

⾃⼰紹介

• 宮⽥ 淳平 (@miyajan)

• Cybozu

• ⽣産性向上チーム

• Jenkinsおじさん

Page 3: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Jenkins 2.0!

Page 4: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Background

Page 5: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

History

• 2005 Hudson 1.0

• 2011 Forked to Jenkins

• 2016/04 Jenkins 2.0

Page 6: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Jenkins 1.0

• 10 years

• 100K active users

• 1000 plugins

Page 7: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

• CI

• /UI

• Jenkins

• CI/CD

• UX

Page 8: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

https://jenkins.io/blog/2016/04/26/jenkins-20-is-here/

Page 9: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Jenkins 2.0

• 10

• 1.0

• Deprecated: Jenkins

Page 10: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

$ docker run -p 8080:8080 jenkins:2.32.3# http://localhost:8080

Try Jenkins 2.0

Page 11: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Jenkins 2.0 Features

Page 12: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Suggested Plugins

Page 13: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

• …

Jenkins 1.0

Page 14: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Suggested Plugins

• Pipeline, Git, Mail, Credential Binding, etc.

Jenkins 2.0

Page 15: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 16: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 17: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Pipeline

Page 18: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

• Build Pipeline Plugin

• Delivery Pipeline Plugin

Jenkins 1.0

Page 19: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 20: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 21: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Pipeline Plugin

• DSL( )

• 1

• master

Jenkins 2.0

Page 22: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 23: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 24: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 25: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 26: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Pipeline DSL

Page 27: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

GUI

• JobConfigHistory Plugin …

Jenkins 1.0

Page 28: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

300 input

Page 29: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Pipeline as Code

• DSL(Groovy)

Jenkins 2.0

Page 31: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Scripted Pipeline & Declarative Pipeline

Page 32: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Scripted Pipeline

• Pipeline

• try/catch…

Jenkins 2.0

Page 33: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

node(‘has-docker’) { try { checkout scm stage(‘Build’) { sh ‘mvn clean install’ } stage(‘Archive’) { ( ) } if (currentBuild.result == 'SUCCESS') { mail to:"[email protected]", subject:"SUCCESS", body: "passed." } } catch (exc) { mail to:"[email protected]", subject:"FAILURE", body: "failed." } finally { deleteDir() }}

Page 34: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Declarative Pipeline

• Lint

Jenkins 2.0

Page 35: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

pipeline { agent label:’has-docker’, dockerfile: true stages { stage("Build") { steps { sh 'mvn clean install' } } stage("Archive"){ ( ) } } post { always { deleteDir() } success { mail to:"[email protected]", subject:"SUCCESS", body: "passed." } failure { mail to:"[email protected]", subject:"FAILURE", body: "failed." } }}

Page 37: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 39: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

• Declarative Pipeline

• “script” Scripted

Pipeline

Page 40: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Declarative Pipeline Examples

Page 41: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Build in Container

// simpleagent { docker “ubuntu:16.04”}

// specify label & argsagent { docker { image “ubuntu:16.04” label “docker-nodes” args “-v /tmp:/tmp -p 8000:8000” }}

Page 42: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Credentials

Page 43: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Credentials

environment { // type: secret text // SECRET_TEXT is defined SECRET_TEXT = credentials(‘SECRET_TEXT')

// type: username and password // SECRET_AUTH_USR and SECRET_AUTH_PSW are defined SECRET_AUTH = credentials('SECRET_AUTH')}

Page 44: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Options

pipeline { options { // 7 buildDiscarder(logRotator(daysToKeepStr: '7')) }}

Page 45: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Triggers

pipeline { triggers { cron('* * * * *') }}

Page 46: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Parallelstage("Commit") { steps { parallel( unitTest: { … }, staticAnalysis: { … }, package: { … } ) }}

Page 47: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Conditions

stage("Production") { when { branch "master" } steps { // deploy to production }}

Page 48: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Stashstage("Archive") { agent { docker “java:8” } steps { sh “gradle jar” stash name: “jar”, includes: “build/libs/*.jar” }}stage(“Deployment”) { agent { docker … } steps { unstash “jar” // jar }}

Page 49: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

User Input

stage("Production") { steps { input “Ready to deploy?” }}

Page 50: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 51: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Syntax

• https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Syntax-Reference

• https://jenkins.io/doc/book/pipeline/syntax/

Page 52: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Shared Libraries

Page 53: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

• …

• subtree or submodule…?

Jenkins 1.0

Page 54: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Shared Libraries

• GitHub

• Groovy

• https://jenkins.io/doc/book/pipeline/shared-libraries/

Jenkins 2.0

Page 55: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Example: without Library

pipeline {… post { failure { // echo ‘failure!’ with red color ansiColor('xterm') { echo '\033[0;31mFailure!\033[0m' } } }…}

Page 56: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

vars/echoErr.groovy

#!/usr/bin/env groovy

def call(String text) { ansiColor('xterm') { echo “\033[0;31m${text}\033[0m" }}

Page 57: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 58: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

(repository root)+- vars- +- echoErr.groovy

Page 59: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Example: with Library

@Library('miyata-shared-libraries') _pipeline {… post { failure { echoErr ‘Failure!’ } }…}

Page 60: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 61: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

• DRY

• @Library('[email protected]') _

Page 62: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

GitHub

Page 63: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

• push

• commit status

Page 64: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

GitHub Plugin

commit status pending

commit status …

Jenkins 1.0

Page 65: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

GitHub Organization Folder

• Organization

• Jenkinsfile Multibranch Pipeline GitHub

Jenkins 2.0

Page 66: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Multibranch Pipeline

• Jenkinsfile

Jenkins 2.0

Page 67: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 68: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 69: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 70: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 71: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 72: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

• 1

Page 73: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

• Webhook

• BitBucket

Page 74: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Blue Ocean

Page 75: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Classic Jenkins UI

• UX

Jenkins 1.0

Page 76: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Blue Ocean

• UX

• RC

• Blue Ocean Plugin

Jenkins 2.0

Page 77: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 78: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 79: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Pipeline Editor

Page 80: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Pipeline Editor

• Blue Ocean

• Jenkinsfile GUI

Jenkins 2.0

Page 81: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 82: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 83: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 84: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 85: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 86: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

stage

• Enterprise

• Groovy …

• JENKINS-33846

Page 87: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

• LTS …

• LTS(stable)

Page 89: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
Page 90: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Best Practices

• Declarative Pipeline

• GitHub Organization Folder

• Blue Ocean

Page 91: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

References

• https://jenkins.io/doc/

• https://jenkins.io/node/

• https://www.cloudbees.com/juc/agenda

Page 92: Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜

Cybozu Meetup1

2 : https://cybozu.connpass.com/event/52668/