±à¼ÍƼö: |
±¾ÎÄÀ´Ô´csdn£¬ÎªÄúÏêϸ½éÉÜÁËJenkins Pipeline ÏîÄ¿³ÖÐø¼¯³É½»»¥Öвå¼þ¡¢Óï·¨¡¢½Å±¾Ê¾Àý¡¢²¿ÊðʾÀýµÈ¡£ |
|
Jenkins Pipleline²å¼þ½éÉÜ

Jenkins 2.xµÄ¾«ËèÊÇPipeline as Code£¬ÊǰïÖúJenkinsʵÏÖCIµ½CDת±äµÄÖØÒª½ÇÉ«¡£Ê²Ã´ÊÇPipeline£¬¼òµ¥À´Ëµ£¬¾ÍÊÇÒ»Ì×ÔËÐÐÓÚJenkinsÉϵŤ×÷Á÷¿ò¼Ü£¬½«Ô±¾¶ÀÁ¢ÔËÐÐÓÚµ¥¸ö»òÕß¶à¸ö½ÚµãµÄÈÎÎñÁ¬½ÓÆðÀ´£¬ÊµÏÖµ¥¸öÈÎÎñÄÑÒÔÍê³ÉµÄ¸´ÔÓ·¢²¼Á÷³Ì¡£PipelineµÄʵÏÖ·½Ê½ÊÇÒ»Ì×Groovy DSL£¬Èκη¢²¼Á÷³Ì¶¼¿ÉÒÔ±íÊöΪһ¶ÎGroovy½Å±¾£¬²¢ÇÒJenkinsÖ§³Ö´Ó´úÂë¿âÖ±½Ó¶ÁÈ¡½Å±¾£¬´Ó¶øÊµÏÖÁËPipeline as CodeµÄÀíÄî¡£
PipelineµÄ¼¸¸ö»ù±¾¸ÅÄ
- Stage: ½×¶Î£¬Ò»¸öPipeline¿ÉÒÔ»®·ÖΪÈô¸É¸öStage£¬Ã¿¸öStage´ú±íÒ»×é²Ù×÷¡£×¢Ò⣬StageÊÇÒ»¸öÂß¼·Ö×éµÄ¸ÅÄ¿ÉÒÔ¿ç¶à¸öNode¡£
- Node: ½Úµã£¬Ò»¸öNode¾ÍÊÇÒ»¸öJenkins½Úµã£¬»òÕßÊÇMaster£¬»òÕßÊÇAgent£¬ÊÇÖ´ÐÐStepµÄ¾ßÌåÔËÐÐÆÚ»·¾³¡£
- Step: ²½Ö裬StepÊÇ×î»ù±¾µÄ²Ù×÷µ¥Ôª£¬Ð¡µ½´´½¨Ò»¸öĿ¼£¬´óµ½¹¹½¨Ò»¸öDocker¾µÏñ£¬Óɸ÷ÀàJenkins PluginÌṩ¡£
Jenkins Pipleline²å¼þ£º
https://wiki.jenkins.io/display/JENKINS/Pipeline+Plugin
ʹÓÃʱ£¬JenkinsÐèÒª°²×°PipelineºÍMaven²å¼þ¡£
Jenkins PipelineÓï·¨²Î¿¼
ÒÔÏÂÊÇÍêÕûµÄJenkins PipelineÓï·¨²Î¿¼¿¨¡£ µ±È»£¬µ±ÄúÌí¼Ó²å¼þ»ò²å¼þ¸üÐÂʱ£¬ÐµÄÁ÷Ë®Ï߽ű¾ÔªËؽ«ÔÚÄúµÄ»·¾³ÖпÉÓᣠPipeline´úÂë¶ÎÉú³ÉÆ÷ºÍUI½«×Ô¶¯Ìí¼ÓÕâЩºÍÈκÎÏà¹ØµÄ°ïÖúÎı¾£¬ÒÔ±ãÄúÖªµÀÈçºÎʹÓÃËüÃÇ£¡
Basics

Advanced

File System

Flow Control

Docker

Jenkins Pipleline ½Å±¾Ê¾Àý
²Î¿¼µØÖ·£ºhttps://www.cloudbees.com/blog/using-pipeline-plugin-accelerate-continuous-delivery-part-3
stage 'build'
node {
git 'https://github.com/cloudbees/todo-api.git'
withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
sh "mvn -B ¨CDmaven.test.failure.ignore=true clean package"
}
stash excludes: 'target/', includes: '**', name: 'source'
}
stage 'test'
parallel 'integration': {
node {
unstash 'source'
withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
sh "mvn clean verify"
}
}
}, 'quality': {
node {
unstash 'source'
withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
sh "mvn sonar:sonar"
}
}
}
stage 'approve'
timeout(time: 7, unit: 'DAYS') {
input message: 'Do you want to deploy?', submitter: 'ops'
}
stage name:'deploy', concurrency: 1
node {
unstash 'source'
withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
sh "mvn cargo:deploy"
}
} |
×¢:m3±íʾJenkinsÅäÖõÄmavenÃû³Æ¡£
Jenkins Pipeline Docker½Å±¾Ê¾Àý
Docker Pipeline Plugin (ʾÀý)
Docker Pipeline²å¼þ¹«¿ªÁËÒ»¸öDockerÈ«¾Ö±äÁ¿£¬ËüΪÆÕͨµÄDocker²Ù×÷ÌṩDSL£¬Ö»ÐèÒªÔÚÔËÐв½ÖèµÄÖ´ÐгÌÐòÉÏʹÓÃÒ»¸öDocker¿Í»§¶Ë£¨ÔÚÄúµÄ½Úµã²½ÖèÖÐʹÓÃÒ»¸ö±êÇ©À´¶¨Î»ÆôÓÃDockerµÄ´úÀí£©¡£
ĬÈÏÇé¿öÏ£¬DockerÈ«¾Ö±äÁ¿Á¬½Óµ½±¾µØDockerÊØ»¤³ÌÐò¡£ Äú¿ÉÒÔʹÓÃdocker.withServer²½ÖèÁ¬½Óµ½Ô¶³ÌDockerÖ÷»ú¡£ ͼÏñ²½ÖèÎªÌØ¶¨µÄDockerͼÏñÌṩ¾ä±ú£¬²¢ÔÊÐíÖ´ÐÐÆäËûÓëͼÏñÏà¹ØµÄÆäËû²½Ö裬°üÀ¨image.inside²½Öè¡£ ÄÚ²¿²½Ö轫Æô¶¯Ö¸¶¨µÄÈÝÆ÷²¢ÔÚ¸ÃÈÝÆ÷ÖÐÔËÐÐÒ»¸ö²½Ö裺
ʾÀý1£º
docker.image('maven:3.3.3-jdk8').inside('-v ~/.m2/repo:/m2repo') {
sh 'mvn -Dmaven.repo.local=/m2repo clean package'
} |
ʾÀý2(²Î¿¼£ºhttp://www.youruncloud.com/blog/127.html)£º
node{
// ´úÂë¼ì³ö
stage('get Code') {
git credentialsId: 'git-credentials-id', url: 'http://192.168.19.250/ufleet/uflow.git'
}
// ¾µÏñÖнøÐе¥Ôª²âÊÔ
stage('unit testing'){
// Æô¶¯golnag:1.7²¢ÔÚgolangÄÚ±àÒë´úÂë
docker.image('golang:1.7').inside {
sh './script/unittest.sh'
}
}
// ¾µÏñÖдúÂë¹¹½¨
stage('Build'){
def confFilePath = 'conf/app.conf'
def config = readFile confFilePath
writeFile file: confFilePath, text: config
// Æô¶¯golnag:1.7²¢ÔÚgolangÄÚ±àÒë´úÂë
docker.image('golang:1.7').inside {
sh './script/build.sh'
}
}
// ±àÒë¾µÏñ²¢pushµ½²Ö¿â
def imagesName = '192.168.18.250:5002/ufleet/ uflow:v0.9.1.${BUILD_NUMBER}'
stage('Image Build And Push'){
docker.withRegistry('http://192.168.18.250:5002', 'registry-credentials-id') {
docker.build(imagesName).push()
}
}
// Æô¶¯¸ÕÔËÐеÄÈÝÆ÷
stage('deploy iamegs'){
// ÐèҪɾ³ý¾É°æ±¾µÄÈÝÆ÷£¬·ñÔò»áµ¼Ö¶˿ÚÕ¼ÓöøÎÞ·¨Æô¶¯¡£
try{
sh 'docker rm -f cicdDemo'
}catch(e){
// err message
}
docker.image(imagesName).run('-p 9091:80 --name cicdDemo')
}
} |
¸ü¶àʹÓ÷½·¨Çë²Î¿¼Jenkins Pipeline dockerÓï·¨¡£
ÁíÍâ¿ÉÒÔ½èÖúPipeline SyntaxÀ´Éú³É»ù±¾µÄ½Å±¾£º

Jenkins Pipeline war °ü²¿ÊðʾÀý
Pipelineͨ¹ýÔöÇ¿stageÔÓïÀ´Ìṩ´Ë¹¦ÄÜ¡£ ÀýÈ磬һ¸ö½×¶Î¿ÉÒÔ¾ßÓÐÒ»¸ö¶¨ÒåµÄ²¢·¢¼¶±ð£¬ÒÔָʾÔÚÈκÎʱºòÖ»ÓÐÒ»¸öÏß³ÌÓ¦¸ÃÔڸý׶ÎÖÐÔËÐС£ ÕâʵÏÖÁËÔËÐв¿ÊðµÄÆÚÍû״̬£¬¾ÍÏñÔËÐÐÒ»Ñù¿ì¡£
²Î¿¼£ºhttps://jenkins.io/doc/book/pipeline-as-code/
stage name: 'Production', concurrency: 1
node {
unarchive mapping: ['target/x.war' : 'x.war']
deploy 'target/x.war', 'production'
echo 'Deployed to http://localhost:8888/production/'
} | |