Unrestricted © Verifa 2018
1
1
WELCOME to the 1st
Continuous Delivery Evening
&
JAM Helsinki Meetup
Welcome & Introduction
Unrestricted © Verifa 2018
2
2
• General Info about Venue
• What is Continuous Delivery Evening
• What is JAM
• Who are Verifa
Agenda
Unrestricted © Verifa 2018
3
3
18:00 - Opening and Introduction

18:15 - Presentation 1: Jenkins Configuration as Code through YAML by
Jacob Larfors, Verifa


18:45 - Presentation 2: OSS Compliance by Kalle Soranko, Verifa

19:15 - Break and Mingle


19:30 - Presentation 3: Empirical Software Development, CodeScene by
James Elderfield, Verifa


19:45 - Closing Words
Jenkins Configuration as
Code
Continuous Delivery Evening / JAM Meetup Helsinki verifa.io
About me (Jacob Larfors)
• CD / DevOps Consultant @ Verifa
• Working with Jenkins since 2011
• Developer/Maintainer of plugins for Jenkins
Jenkins - Quick Introduction
• Automation Server
• Lots of plugins & integrations
• Very popular, hence a good choice
• Competitors: Concourse, Drone, CircleCI, Travis, GitLab…
8/28/18 6
Problem Statement – Typical Deployment
1. Scalability
2. Availability
3. Managed by IT
4. Cleanliness
5. Maintainability
Solution Statement
Well, kinda… how do we manage these container(s)?
Solution Statement (continued)
1. Building the Docker image
• Create self provisioning, ready for production Jenkins instance
2. Orchestrating the Container
Jenkins Architecture
MASTER
Configurations
Node
Configuration
Plugins
EXECUTORS
Dockerizing Jenkins Master – Basic Dockerfile


FROM jenkins/jenkins:lts


# Skip initial setup
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/
plugins.txt
COPY jenkins.yaml /usr/local/jenkins.yaml
ENV CASC_JENKINS_CONFIG /usr/local/jenkins.yaml
8/28/18 11
Dockerizing Jenkins Master – Groovy, but not so groovy
import com.michelin.cio.hudson.plugins.rolestrategy.RoleBasedAuthorizationStrategy
import com.michelin.cio.hudson.plugins.rolestrategy.RoleMap
import com.synopsys.arc.jenkins.plugins.rolestrategy.RoleType
import hudson.security.HudsonPrivateSecurityRealm
import io.jenkins.systemgroovy.plugins.OwnershipBasedSecurityHelper
import jenkins.model.Jenkins
import jenkins.security.QueueItemAuthenticatorConfiguration
import hudson.model.*
import org.jenkinsci.plugins.authorizeproject.GlobalQueueItemAuthenticator
import org.jenkinsci.plugins.authorizeproject.strategy.TriggeringUsersAuthorizationStrategy




boolean createAdmin = Boolean.getBoolean("io.jenkins.dev.security.createAdmin")


println("=== Installing the Security Realm")
def securityRealm = new HudsonPrivateSecurityRealm(false)
……
Jenkins CasC Plugin
8/29/18 13
https://plugins.jenkins.io/configuration-as-code
Dockerizing Jenkins Master – the YAML approach
jenkins:
securityRealm:
bitbucket:
clientID: <hash_valuse>
clientSecret: <hash_value>
authorizationStrategy:
loggedInUsersCanDoAnything:
allowAnonymousRead: false
systemMessage: "Jenkins configured automatically!"
numExecutors: 0
scmCheckoutRetryCount: 2
………
8/28/18 14
Next Steps
• Finish converting everything to YAML
• Create PROD, DEV and TEST Dockerfile build stages
• Setup Kubernetes cluster as Jenkins executor pool
8/28/18 15

Helsinki JAM - Jenkins CasC

  • 1.
    Unrestricted © Verifa2018 1 1 WELCOME to the 1st Continuous Delivery Evening & JAM Helsinki Meetup
  • 2.
    Welcome & Introduction Unrestricted© Verifa 2018 2 2 • General Info about Venue • What is Continuous Delivery Evening • What is JAM • Who are Verifa
  • 3.
    Agenda Unrestricted © Verifa2018 3 3 18:00 - Opening and Introduction
 18:15 - Presentation 1: Jenkins Configuration as Code through YAML by Jacob Larfors, Verifa 
 18:45 - Presentation 2: OSS Compliance by Kalle Soranko, Verifa
 19:15 - Break and Mingle 
 19:30 - Presentation 3: Empirical Software Development, CodeScene by James Elderfield, Verifa 
 19:45 - Closing Words
  • 4.
    Jenkins Configuration as Code ContinuousDelivery Evening / JAM Meetup Helsinki verifa.io
  • 5.
    About me (JacobLarfors) • CD / DevOps Consultant @ Verifa • Working with Jenkins since 2011 • Developer/Maintainer of plugins for Jenkins
  • 6.
    Jenkins - QuickIntroduction • Automation Server • Lots of plugins & integrations • Very popular, hence a good choice • Competitors: Concourse, Drone, CircleCI, Travis, GitLab… 8/28/18 6
  • 7.
    Problem Statement –Typical Deployment 1. Scalability 2. Availability 3. Managed by IT 4. Cleanliness 5. Maintainability
  • 8.
    Solution Statement Well, kinda…how do we manage these container(s)?
  • 9.
    Solution Statement (continued) 1.Building the Docker image • Create self provisioning, ready for production Jenkins instance 2. Orchestrating the Container
  • 10.
  • 11.
    Dockerizing Jenkins Master– Basic Dockerfile 
 FROM jenkins/jenkins:lts 
 # Skip initial setup ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/ plugins.txt COPY jenkins.yaml /usr/local/jenkins.yaml ENV CASC_JENKINS_CONFIG /usr/local/jenkins.yaml 8/28/18 11
  • 12.
    Dockerizing Jenkins Master– Groovy, but not so groovy import com.michelin.cio.hudson.plugins.rolestrategy.RoleBasedAuthorizationStrategy import com.michelin.cio.hudson.plugins.rolestrategy.RoleMap import com.synopsys.arc.jenkins.plugins.rolestrategy.RoleType import hudson.security.HudsonPrivateSecurityRealm import io.jenkins.systemgroovy.plugins.OwnershipBasedSecurityHelper import jenkins.model.Jenkins import jenkins.security.QueueItemAuthenticatorConfiguration import hudson.model.* import org.jenkinsci.plugins.authorizeproject.GlobalQueueItemAuthenticator import org.jenkinsci.plugins.authorizeproject.strategy.TriggeringUsersAuthorizationStrategy 
 
 boolean createAdmin = Boolean.getBoolean("io.jenkins.dev.security.createAdmin") 
 println("=== Installing the Security Realm") def securityRealm = new HudsonPrivateSecurityRealm(false) ……
  • 13.
    Jenkins CasC Plugin 8/29/1813 https://plugins.jenkins.io/configuration-as-code
  • 14.
    Dockerizing Jenkins Master– the YAML approach jenkins: securityRealm: bitbucket: clientID: <hash_valuse> clientSecret: <hash_value> authorizationStrategy: loggedInUsersCanDoAnything: allowAnonymousRead: false systemMessage: "Jenkins configured automatically!" numExecutors: 0 scmCheckoutRetryCount: 2 ……… 8/28/18 14
  • 15.
    Next Steps • Finishconverting everything to YAML • Create PROD, DEV and TEST Dockerfile build stages • Setup Kubernetes cluster as Jenkins executor pool 8/28/18 15