You are on page 1of 62

Jenkins

itech

Bloghttp://www.cnblogs.com/itech
Contents
Jenkins ................................................................................................................................................. 1
itech ................................................................................................................................................. 1
Bloghttp://www.cnblogs.com/itech ....................................................................................................... 1
Jenkins ......................................................................................................................................... 3
Jenkins .................................................................................................................................................. 4
Jenkins JavaHelloWorld ................................................................................................................... 7
Jenkins ............................................................................................................................................ 13
Jenkins Windows Slave ............................................................................................................. 16
Jenkins Linux Slave ............................................................................................................... 23
Jenkins Master/Slave ......................................................................................................................... 26
Jenkins ........................................................................................................................................ 29
Jenkins batch Python ................................................................................................................ 30
Jenkins ........................................................................................................................ 32
Jenkins Perforce .................................................................................................................... 37
Jenkins trigger ................................................................................................................................ 43
Jenkins MSBuild ................................................................................................................. 44
Jenkins EnvInject .................................................................................................... 47
Jenkins Workspace cleanup + Copy to slave .................................................................................. 51
Jenkins VShpere Cloud ................................................................................................................... 53
Jenkins Publish Over SSH/CIFS/FTP................................................................................................ 55
Jenkins Deploy ............................................................................................................................... 57
Jenkins Dashboard wall display ................................................................................................ 60
Jenkins .................................................................................................................................... 62
Jenkins
Jenkins Hudson
Jenkins
3 SCM+build release
Jenkins
Jenkins

Jenkins Continous Integration Server Hadson CruiseControl


BuildBotTeamCityBuildForge

Jenkins

master/slave build
web

tips
200

Jenkins
Jenkins
Jenkins JavaHelloWorld
Jenkins
Jenkins Windows Slave
Jenkins Linux Slave
Jenkins Master/Slave
Jenkins
Jenkins batch Python
Jenkins
Jenkins Perforce
Jenkins trigger
Jenkins MSBuild
Jenkins EnvInject
Jenkins Workspace cleanup + Copy to slave
Jenkins VShpere Cloud
Jenkins Publish Over SSH/CIFS/FTP
Jenkins Deploy
Jenkins Dashboard wall display
Jenkins

Jenkins
1 Jenkins
Jenkins hudson Jenkins
cron jobs

* Jenkins CruiseControl DamageControl



build
* job cron jobs procmail jobs jobs
cron email job output email
job brokeJenkins outputs job broke
Jenkins
* Java -jar jenkins.war servlet container
tomcat
* jenkins web GUI
xml jenkins
xml
* jenkins Subversion/CVS
Subversion/CVS Repository
* jenkins pages
''latest build"/"latest successful build", jenkins
pages
* RSS/EMail/IM RSSEMail IM build
* Build tag build tag tag
* Junit/TestNG
* buildjenkins build/test
build
* jenkins build jars
* jenkins
* Windows,Ubuntu/Debian,Red
Hat/Fedora/CentOS,Mac OS X,openSUSE,FreeBSD,OpenBSD,Solaris/OpenIndiana.Gentoo

2 jenkins
jenkins.war, c:\jenkins java -jar jenkins.war. (
JDK JAVA_HOME %JAVA_HOME%\bin PATH
)


c:\jenkins>java -jar jenkins.war
Running from: C:\jenkins\jenkins.war
webroot: $user.home/.jenkins
[Winstone 2011/11/02 17:11:27] - Beginning extraction from war file
Jenkins home directory: C:\Users\AAA\.jenkins found at: $user.home/.jenkins
[Winstone 2011/11/02 17:12:57] - HTTP Listener started: port=8080
[Winstone 2011/11/02 17:12:57] - AJP13 Listener started: port=8009
[Winstone 2011/11/02 17:12:58] - Winstone Servlet Engine v0.9.10 running:
controlPort=disabled
Nov 02, 2011 5:12:58 PM jenkins.model.Jenkins$6 onAttained
INFO: Started initialization
Nov 02, 2011 5:13:02 PM jenkins.model.Jenkins$6 onAttained
INFO: Listed all plugins
Nov 02, 2011 5:13:02 PM jenkins.model.Jenkins$6 onAttained
INFO: Prepared all plugins
Nov 02, 2011 5:13:02 PM jenkins.model.Jenkins$6 onAttained
INFO: Started all plugins
Nov 02, 2011 5:13:02 PM jenkins.model.Jenkins$6 onAttained
INFO: Augmented all extensions
Nov 02, 2011 5:13:02 PM jenkins.model.Jenkins$6 onAttained
INFO: Loaded all jobs
Nov 02, 2011 5:13:04 PM jenkins.model.Jenkins$6 onAttained
INFO: Completed initialization
Nov 02, 2011 5:13:04 PM hudson.TcpSlaveAgentListener <init>
INFO: JNLP slave agent listener started on TCP port 37157
Nov 02, 2011 5:13:14 PM hudson.WebAppMain$2 run
INFO: Jenkins is fully up and running

http://localhost:8080 , jenkins
jenkins http://jenkins.361315.n4.nabble.com/

Jenkins JavaHelloWorld
Jenkins master/slave job
JavaHelloworld master Jenkins

Java HelloWorld

Ant c:\JavaHelloWorld\build.xml

<project name="HelloWorld" basedir="." default="main">

<property name="src.dir" value="src"/>

<property name="build.dir" value="build"/>


<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/jar"/>

<property name="main-class" value="oata.HelloWorld"/>

<target name="clean">
<delete dir="${build.dir}"/>
</target>

<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>

<target name="run" depends="jar">


<java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
</target>

<target name="clean-build" depends="clean,jar"/>

<target name="main" depends="clean,run"/>

</project>

Java helloworld c:\JavaHelloWorld\src\oata\helloworld.java

package oata;

public class HelloWorld {


public static void main(String[] args) {
System.out.println("Hello World");
}
}

Jenkins job JavaHelloWorld

1 jenkins 8000
2 JavaHelloWorld job
ie http://localhost:8000
new job javahelloworld job job

jenkins svn plugin


3 JavaHelloWorld job
JavaHelloWorld build now buildbuild
build
build build

http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html
Jenkins
1 jenkins C:\Documents and Settings\AAA\.jenkins

.jenkins

jobs
JavaHelloWorld
builds
2011-11-03_16-48-17
2011-11-03_16-49-05
2011-11-03_16-49-29
2011-11-03_17-01-49
2011-11-03_17-11-42
workspace
build
classes
oata
jar
src
oata
plugins
usercontent
war

set JENKINS_HOME=C:\jenkins
jenkins

2 jenkins
JENKINS_HOME jenkins

3 jobs
jobs%JENKINS_HOEM%\jobs
jobs %JENKINS_HOEM%\jobs job

job%JENKINS_HOEM%\jobs jobs zip tar

4 jenkins url jenkins


http://[jenkins-server]/[command]

exit shutdown jenkins


restart restart jenkins
reload to reload the configuration

5 Jenkins
--httpPort=$HTTP_PORT jenkins web
--httpsPort=$HTTP_PORT https
--httpListenAddress=$HTTP_HOST jenkins ip ip
jenkins server

6 jenkins timezone
jenkins server timezone timezone jenkins
timezone jenkins -
Dorg.apache.commons.jelly.tags.fmt.timeZone=TZ

7 jenkins jenkins
startjenkins.bat
set JENKINS_HOME=c:\jenkins
cd /d %JENKINS_HOME%
java -jar %JENKINS_HOME%\jenkins.war --httpPort=8000

8 jenkins
jenkins servlet apachetomcat servlet
jenkins
windows jenkins insall as windows service jenkins
service jenkins windows service

9 jenkins
jenkins jenkins jenkins
plugins

10 jenkins
BUILD_NUMBER build 23
BUILD_ID BUILD_NUMBER 2011-11-15_16-06-21
JOB_NAME job JavaHelloWorld
BUILD_TAG BUILD_ID,BUILD_NUMBER, build
jenkins-JavaHelloWorld-23
EXECUTOR_NUMBER 0
NODE_NAMEslave MyServer01
NODE_LABELSslave label slave JavaHelloWorld MyServer01
JAVA_HOME java home C:\Program Files (x86)\Java\jdk1.7.0_01
WORKSPACEjob c:\jenkins\workspace\JavaHelloWorld
HUDSON_URL = JENKINS_URL jenkins url http://localhost:8000/
BUILD_URLbuild url http://localhost:8000/job/JavaHelloWorld/23/
JOB_URL job url http://localhost:8000/job/JavaHelloWorld/
SVN_REVISIONsvn revison 4
Jenkins Windows Slave

https://wiki.jenkins-
ci.org/display/JENKINS/Step+by+step+guide+to+set+up+master+and+slave+machines

Slave

Jenkins slave note slave node

1 Manage Jenkins-->Manage Nodes -->New Node Node Name Dumb


Slave Slave OK

2 Slave
*executors 1
* Slave c:\jenkins
*Usage Leave this machine for tied jobs only
*Lunch Method Launch slave agents via Java Web Start
* Avaliablitiy Keep this slave online as much as possible
*

3 slave jenkins master Manage Jenkins-->Manage Nodes-->


Note launch slave service
4

slave job
slave label slave uage leave this
machine for tied jobs only
Jenkins JavaHelloWorld job
restrict where this project can be run noteslave label
SVN jenkins svn
job slave build slave

slave jenkins slave jenkins slave


service slave ant path restart jenkins
slave service

https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds
http://community.jboss.org/wiki/HudsonWindowsSlavesSetup
Jenkins Linux Slave

slave Linux centos

1 Linux Slave
jenkins sudo /usr/sbin/useradd -m jenkins -d /home/jenkins
jenkins id jenkins
uid=506(jenkins) gid=506(jenkins) groups=506(jenkins)
sudo /usr/bin/passwd jenkins jenkins 0
jenkins su - jenkins
java java --version
sshd /sbin/service --status-all | grep ssh
ant root yum install ant;

2) Slave linux public/private key pair

jenkins

ssh-keygen public/private key pair enter key


/home/jenkins/.ssh/id_rsa enter enter

authorized_keys
cd .ssh
cat id_rsa.pub > authorized_keys
chmod 700 authorized_keys
;

id_rsa( privatekey jenkins master c:\jenkins\id_rsa

3 Slavenote,
jenkins ssh slave plugin

lunch slave master slave ssh launch jenkins


http://yourserver:port/jnlpJars/slave.jar slave.jar slave
java -jar slave.jar slave

4 Linux Slave JavaHelloWorldJenkins


JavaHelloWorld JavaHelloWorld job Label JavaHelloWorldLinux
slave
Jenkins Master/Slave

Jenkins Master/Slave

Master/Slave Server agent Master web job


slavejob master slave master
slave job job

job slave master slave

1master ssh slave

Jenkins ssh sshd slave agent


*unix slave *unix sshd ssh
slave slave host ssh public/private
keys public key slave ~/.ssh/authorized_keys private key
master ppk jenkins copy slave agent
binary slave job
2master WMI+DCOM windows slave

Windows SlaveJenkins Windows2000


WMI+DCOM slave jenkins
windows service

windows GUI

slavenote
slave slave

3 slave

slave
master jenkins master slave

SSHRSH windows
cygwin psexec

java -jar slave.jar slaveslave.jar


http://yourjenkinsserver:port/jnlpjars/slave.jar slave.jar
slave.jar ssh slave plugin plugin
slave.jar

4 Java web start slave

jave web startjnlp slave slave


slave windows service slave

UI slave jenkins
startup items slave JNLP slave

5 slave

java web start*unix slave daemon


slave JNLP slave
java -jar slave.jar -jnlpUrl http://yourserver:port/computer/slave-
name/slave-agent.jnlp

Slave
* slave jenkins UID GID slave
* jenkins home /home/jenkins,
* slave sshdwindows cygwin sshd
* slave ntp client ntp server
* sh slave jenkins sshd javaant
maven
* slave slave
#!/bin/bash JAVA_HOME=/opt/SUN/jdk1.6.0_04 PATH=$PATH:$JAVA_HOME/bin export
PATH java -jar /var/jenkins/bin/slave.jar
Jenkins

Jenkins CI

* Jenkins Jenkins Jenkins


Jenkins Jenkins job build

job job builds plugin


Jenkins
* Jenkins home
* file fingerprinting Jenkins job job
file fingerprinting
* build clean buildsclean builds build 3rd partybuild
Source code control
* issue tracking JIRA bugzilla change log
* repository FishEye Subversion source code

* job Java build

* Jenkins home
* job
* branch jobbuild
* builds jobs
* email aliais

* log
* job
* build Taglabel baseline
* Jenkins bootstrapper build

https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Best+Practices
Jenkins batch Python

Jenkins job->build Antmavenwindows batch Shell python


perlruby shell Shell pythonperlruby

windows batch python


windows batch shell slave


Jenkins
Jenkins
Jenkins Jenkins job build

2 Jenkins
1 Security Realm
2 Authorization Strategy

Manage Jenkins -> Configure System -> Enable Security


Jenkins
+

jenkins job build


Jenkins job
build build build log

1 Jenkins
java -jar jenkins.war --argumentsRealm.passwd.user=password --
argumentsRealm.roles.user=admin

jenkins swordfish
java -jar jenkins.war --argumentsRealm.passwd.jenkins=swordfish --
argumentsRealm.roles.jenkins=admin
2 Manage Jenkins -> Configure System enable security
Security Realm Delegate to servlet container Authorization Legacy Mode

3 login http://yourhost/jenkins/loginEntry
logout

4 developers rebuild developer rebuild job


Trigger builds remotely Authentication Token devbuild
developers http://jenkinsHost/job/project /build?token=token build
Project build job
token Authentication Token
webserver webpage developers build
<h1>Jenkins Force Build Page</h1>
<ul>
<li>
<a href="http://jenkins:8080/job/FOO/build?token=build">Force build of Project FOO on
Jenkins</a>
</li>
</ul>
Jenkins

1 Manage Jenkins -> Configure System -> Enable Security Security Realm
Jenkins's own user database Allow users to sign up Authentication
Matrix-based security

2 signup jenkins
3 signup
signup dev dev job build

%JENKINS_HOME%\config.xml
Jenkins

https://wiki.jenkins-ci.org/display/JENKINS/Quick+and+Simple+Security
https://wiki.jenkins-ci.org/display/JENKINS/Standard+Security+Setup
Jenkins Perforce

Perforce Plugin Jenkins Perforce


Jenkins

perforce build

job

job log
Jenkins clientspec clientspec
workspace clientspec clientroot view
view->mapping

perforce poll build

perforce Jenkins
perforce label build label
perforce label

https://wiki.jenkins-ci.org/display/JENKINS/Plugins
Jenkins trigger

Jenkins trigger

1 build after other projects are built


jobs jobs build jobs
,

2 Trigger builds remotely (e.g., from scripts)


Authentication Token TOKEN_NAME
JENKINS_URL/job/JOBNAME/build?token=TOKEN_NAME build

3 build periodically
schedule cron

4 Poll SCM
schedule SCM server build
continous build

trigger

Maven Dependency Update trigger Maven dependency build


continuous build

BuildResultTrigger Plugin job build

Files Found Trigger build

https://wiki.jenkins-ci.org/display/JENKINS/Plugins
Jenkins MSBuild

Jenkins buildtools

Jenkins Ant|Maven|Windows batch|Shell(Perl,Python)

buildtools
cmakebuilder Plugin cmake
Copy Artifact Plugin
Job Exporter Plugin
MSBuild Plugin MSBuild .NET
NAnt Plugin NAnt;
Python Plugin : python
qmakebuilder Plugin qmake
Rake plugin rake
SCons Plugin Scons
Xcode Plugin MACiphone

MSBuild CsharpHelloWorld

1 CSharp console project

using System;

namespace CSharpHelloWorld
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello World!");
}
}
}

2 Jenkins job CSharpHelloWorld slave msbuild


path C:\Windows\Microsoft.NET\Framework\v4.0.30319
3 build
Jenkins EnvInject

Master/Slave Node Properties

slave

job build parameter

build build
build release debug

build
EnvInject

job ob step build


job post location

job step buildplatform



EnvInject Plugin Tool Environment Plugin


Jenkins Workspace cleanup + Copy
to slave

Workspace Cleanup Plugin

Copy To Slave Plugin

workspace cleanup

build build workspace

Post-build actions delete workspace when build done

Copy to slave

master slave slave master

1 build build master build workspace


SCM build
2 build slave master build build
+
Jenkins VShpere Cloud

VShpere build VSphere Cloud


VSphere

VShphere Cloud Jenkins VMWare VShpere Jenkins


slave snapshot Jenkins snapshot
slave build build Jenkins slave
snapshot

1 VShpere server Jenkins Configure System

2 slave VSphere VM

+
Jenkins Publish Over SSH/CIFS/FTP

Publish build WindowsLinuxFTP

Publish Over CIFS Plugin


Publish Over FTP Plugin
Publish Over SSH Plugin

publish windows share


system configure windows share

job publish over CIFS



Jenkins Deploy
deploy Deploy Plugin

deploy War/Jar Tomcat,JBoss,Glassfish

.NET web

build

0 deploy job JavaHelloWorld

1 Copy Artifact Plugin

2 jobnew job -> build a free-style software project


DeployJavaHelloWorld deploy JavaHelloWorld

3 job build "Build selector for Copy Artifact", copy artifact build
"Specified by build parameter" build
+
4 post-build action deploy job artifact

job build number redploy build


Jenkins Dashboard wall display

dashboard Dashboard View

jenkins

dashboard job

Wall display
jobs

view MyDashboard

+ MyDashboard wall display


Jenkins
Jenkins

Rebuild Plugin

Slave Setup Plugin


Backup Plugin
Dependency Graph View Plugin

Cppcheck Plugin

Static Code Analysis Plug-ins

Doxygen Plugin

NUnit Plugin

xUnit Plugin

JIRA Plugin

Bugzilla Plugin

Trac Plugin

You might also like