Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Jenkins Pipeline ÏîÄ¿³ÖÐø¼¯³É½»»¥Êµ¼ù·¾¶
 
  7498  次浏览      28
 2017-11-28  
 
±à¼­ÍƼö:
±¾ÎÄÀ´Ô´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/'
}
   
7498 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ