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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
JenkinsÓëDockerµÄ³ÖÐø¼¯³Éʵ¼ù
 
  4324  次浏览      28
 2018-5-4 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ×÷ÕߣºADDOPSÍŶӻôÃ÷Ã÷,³ÖÐø¼¯³É£¨CI/CD£©ÊÇÒ»ÖÖÈí¼þ¿ª·¢Êµ¼ù¡£ÓÃÓÚ°ïÖúÍŶӳÉԱƵ·±¡¢¿ìËٵɣ¬²âÊÔËûÃǵŤ×÷³É¹û£¬ÒÔ¾¡¿ì·¢ÏÖ¼¯³É´íÎó¡£

³£¼û³ÖÐø¼¯³É¹¤¾ß

Ŀǰ³ÖÐø¼¯³ÉµÄÉú̬ԽÀ´Ô½ÍêÉÆ£¬¹¤¾ßÒ²Óкܶ࣬¿ªÔ´µÄ»òÉÌÒµµÄ¡£È磺

×î×îÁ÷Ðеģ¬Ò²ÊÇʹÓÃ×î¶àµÄJenkins

ÓÐ×ųÖÐø¼¯³ÉDNAµÄThoughtWorks GO¡£ÀíÄ"Deployment as pipeline" £¨»ªÎªÈÝÆ÷ƽ̨Ӧ¸ÃÊÇ»ùÓÚGO×öµÄ¶þ´Î¿ª·¢ÊµÏÖ£©

Atlassian¹¤¾ßÁ´Ö®Ò»µÄBamboo

ÓëGitlab½ôÃܼ¯³ÉµÄGitlab CI

רΪ¿ªÔ´´òÔìµÄTravis CI£¬ÓëGithub½ôÃܼ¯³É

ʹÓÃPythonÓïÑÔʵÏÖµÄBuildbot£¬ÏàÐÅPythoner¿´µ½»áϲ»¶

ÎÒÃǵÄÑ¡ÐÍÊÇJenkins£¬ËùÒÔÎÒÃÇÀ´¿´ÏÂJenkins¡£

Jenkins

JenkinsÌØµã

JenkinsÊÇ¿ªÔ´µÄÓ¦ÓÃ×î¹ã·ºµÄ³ÖÐø¼¯³É¹¤¾ß£¬Ö§³ÖCI, CD£»

JenkinsÓкܶà²å¼þ£¬¶øÇÒÓû§Ò²¿ÉÒÔ×Ô¶¨Òå²å¼þ£¬¿ÉÀ©Õ¹ÐԷdz£Ç¿£»

Jenkins¶ÔDockerÖ§³Ö·Ç³£ºÃ£¬ÓÐÒ»Ì×ÍêÉÆµÄDocker²å¼þ£»

Jenkins 2.0¿ªÊ¼Ö§³ÖPipeline£¬Ò»¸ö·Ç³£Ç¿´óµÄ²å¼þ£¬Ê¹ÓûùÓÚGroovyµÄDSL£¬Ö§³ÖCI/CDÁ÷Ë®Ïߣ»

Jenkins»ùÓÚJavaÓïÑÔ¿ª·¢£»

Jenkins¼¸¸ö¸ÅÄî

MasterÊÇJenkins°²×°ºÍÔËÐеĵط½£¬Ëü¸ºÔð½âÎöjob½Å±¾£¬´¦ÀíÈÎÎñ£¬µ÷¶È¼ÆËã×ÊÔ´£»

Agent ¸ºÔð´¦Àí´ÓMaster·Ö·¢µÄÈÎÎñ£»

Executor¾ÍÊÇÖ´ÐÐÈÎÎñµÄ¼ÆËã×ÊÔ´£¬Ëü¿ÉÒÔÔÚMaster»òÕßAgentÉÏÔËÐС£¶à¸öExecutorÒ²¿ÉÒÔºÏ×÷Ö´ÐÐһЩÈÎÎñ£»

job ÈÎÎñ£¬ÓÃÀ´¶¨Òå¾ßÌåµÄ¹¹½¨¹ý³Ì£»

GroovyÊÇÒ»ÖÖ»ùÓÚJVM£¨JavaÐéÄâ»ú£©µÄÃô½Ý¿ª·¢ÓïÑÔ£¬Ëü½áºÏÁËPython¡¢RubyºÍSmalltalkµÄÐí¶àÇ¿´óµÄÌØÐÔ£¬Groovy´úÂëÄܹ»ÓëJava´úÂëºÜºÃµØ½áºÏ£¬Ò²ÄÜÓÃÓÚÀ©Õ¹ÏÖÓдúÂë¡£ÓÉÓÚÆäÔËÐÐÔÚ JVM ÉϵÄÌØÐÔ£¬Groovy¿ÉÒÔʹÓÃÆäËûJavaÓïÑÔ±àдµÄ¿â¡£JenkinsÓÃGroovy×÷ΪDSL£»

Pipeline Á÷Ë®Ïß¼´´úÂ루Pipeline as Code£©£¬Í¨¹ý±àÂë¶ø·ÇÅäÖóÖÐø¼¯³É/³ÖÐø½»¸¶£¨CI/CD£©ÔËÐй¤¾ßµÄ·½Ê½¶¨Ò岿Êð¡£Á÷Ë®ÏßʹµÃ²¿ÊðÊÇ¿ÉÖØÏÖ¡¢¿ÉÖØ¸´µÄ£»

Á÷Ë®Ïß°üÀ¨½Úµã£¨Node£©¡¢½×¶Î£¨Stage£©ºÍ²½Ö裨Step£©¡£

Á÷Ë®ÏßÖ´ÐÐÔÚ½ÚµãÉÏ¡£½ÚµãÊÇJenkins°²×°µÄÒ»²¿·Ö¡£Á÷Ë®Ïßͨ³£°üº¬¶à¸ö½×¶Î¡£Ò»¸ö½×¶Î°üº¬¶à¸ö²½Öè¡£Á÷Ë®ÏßÉÏÊÖÖ¸ÄÏ¿ÉÒԲ鿴µ½¸ü¶àµÄÄÚÈÝ¡£

nodeÔÚPipelineÖеÄcontextÖУ¬nodeÊÇjobÔËÐеĵط½¡£ node»á¸øjob´´½¨Ò»¸ö¹¤×÷¿Õ¼ä¡£¹¤×÷¿Õ¼ä¾ÍÊÇÒ»¸öÎļþĿ¼£¬ÕâÊÇΪÁ˱ÜÃâ¸ú×ÊÔ´Ïà¹ØµÄ´¦Àí»¥Ïà²úÉúÓ°Ïì¡£¹¤×÷¿Õ¼äÊÇnode´´½¨µÄ£¬ÔÚnodeÀïµÄËùÓÐstep¶¼Ö´ÐÐÍê±Ïºó»á×Ô¶¯É¾³ý¡£

stage½×¶Î£¬stageÊÇÒ»¸öÈÎÎñÖ´Ðйý³ÌµÄ¶ÀÁ¢µÄ²¢ÇÒΨһµÄÂß¼­¿é£¬Pipeline¶¨ÒåÔÚÓï·¨ÉϾÍÊÇÓÉһϵÁеÄstage×é³ÉµÄ¡£ ÿһ¸östageÂß¼­¶¼°üº¬Ò»¸ö»ò¶à¸östep¡£

step²½Ö裬һ¸östepÊÇÕû¸öÁ÷³ÌÖеÄһϵÁÐÊÂÇéÖеÄÒ»¸ö¶ÀÁ¢µÄÈÎÎñ£¬stepÊÇÓÃÀ´¸æËßJenkinsÈçºÎ×ö¡£

Jenkinfile JenkinsÖ§³Ö´´½¨Á÷Ë®Ïß¡£ËüʹÓÃÒ»ÖÖ»ùÓÚGroovyµÄÁ÷Ë®ÏßÁìÓòÌØ¶¨ÓïÑÔ£¨Pipeline DSL£©µÄ¼òµ¥½Å¡£¶øÕâЩ½Å±¾£¬Í¨³£Ãû×Ö½ÐJenkinsfile¡£Ëü¶¨ÒåÁËһЩ¸ù¾ÝÖ¸¶¨²ÎÊýÖ´Ðмòµ¥»ò¸´ÔÓµÄÈÎÎñµÄ²½Öè¡£Á÷Ë®Ïß´´½¨ºÃºó£¬¿ÉÒÔÓÃÀ´¹¹½¨´úÂ룬»òÕß±àÅÅ´Ó´úÂëÌá½»µ½½»¸¶¹ý³ÌÖÐËùÐèµÄ¹¤×÷¡£JenkinsÖеÄJenkinsfileÓеãÀàËÆDockerÖеÄDockfileµÄ¸Ð¾õ

Jenkins ²¿Êð

Jenkins×é¼þÆäʵ·Ç³£ÉÙ£¬°²×°²¿ÊðÒ²·Ç³£¼òµ¥¡£ Jenkins°´½ÇÉ«¾ÍÁ½Àࣺ master½ÚµãºÍslave½Úµã¡£master°²×°Íê³Éºó£¬ÔÚ¿ØÖÆÌ¨ÖÐÌí¼Ó½Úµã¼´¿É¡£

ÏÂÃæÒÔDcokerµÄ²¿Êð·½Ê½ÎªÀý˵һÏÂJenkinsµÄ²¿Êð£º

Master½Úµã

²é¿´ docker hub ÖÐ jenkins µÄ image

[root@k3128v /home/huomingming]# docker search jenkinsNAME

¿ÉÒÔ¿´µ½µÚÒ»¸öÊǹٷ½ÌṩµÄ£¬ËùÒÔÎÒÃÇÑ¡ÔñÕâ¸ö¼´¿É¡£

À­È¡jenkins image

docker pull jenkins

Æô¶¯JenkinsÈÝÆ÷

JenkinsûÓÐÊý¾Ý¿â£¬ËùÓÐÊý¾Ý¶¼ÊÇ´æ·ÅÔÚÎļþÖеģ¬Ê×ÏÈÔÚ±¾µØ´´½¨JenkinsÊý¾ÝĿ¼£¬ÓÃÓÚ±£´æJenkinsµÄÊý¾Ý Õâ¸öĿ¼ÐèÒª¶¨ÆÚµÄ±¸·Ý£¬ÓÃÓÚÈÝÔÖ£¨µ±Ç°JenkinsÈÝÆ÷ËùÔÚ½ÚµãÓÉÓÚ²»¿É¿¹ÒòËØÎÞ·¨Ê¹ÓÃʱ£¬¿ÉÒÔÔÚлúÆ÷ÉÏʹÓñ¸·ÝµÄÊý¾ÝÆô¶¯ÐµÄjenkins master½Úµã£©¡£

sudo mkdir /var/jenkins
sudo chown 1000:1000 /var/jenkins
sudo docker run -p 8080:8080 -p 50000:50000 -v /var/jenkins:/var/jenkins_home --name

ÕâÑùJenkins¾Í³É¹¦ÅÜÆðÀ´ÁË¡£¿ÉÒÔÖ±½Óͨ¹ý»úÆ÷µÄ8080¶Ë¿Ú·ÃÎÊJenkins£¬±¾µØµÄ/var/jenkins¾ÍÏ൱ÓÚÈÝÆ÷ÀïJenkinsÓû§µÄÓû§Ö÷Ŀ¼£¬ËùÒÔÒª±£Ö¤¸ÃĿ¼µÄȨÏÞΪuidΪj1000µÄÓû§Ä¿Â¼¡£

ÅäÖÃJenkins

Æô¶¯Íê jenkins master ºó£¬ÔÚä¯ÀÀÆ÷ÖÐÊý¾ÝÊäÈë http://jenkins_master_ip:8080 µÇ¼Jenkins¿ØÖÆÌ¨½øÐнÓÏÂÀ´µÄ°²×°ºÍÅäÖᣠ¾ßÌåͼ¾Í²»Ìù³öÀ´ÁË¡£

²é¿´JenkinsµÄ°æ±¾

java -jar /usr/share/jenkins/jenkins.war --version

slave ½Úµã

°²×°Java JDK

yun install java-1.8.0-openjdk

´´½¨JenkinsÓû§

$ useradd -m jenkins -d /home/jenkins$ passwd jenkins

´´½¨¹¤×÷Ŀ¼

mkdir /data/jenkinschown jenkins.jenkins /data/jenkins

Ìí¼ÓJenkinsÓû§µ½DockerÓû§×é

sudo usermod -a -G docker jenkins

ÅäÖÃSSH»¥ÐÅ£¬MasterÃâÃÜÂëµÇ½Slave

MasterÓжàÖÖ¹ÜÀíSlaveµÄ·½Ê½£¬ÎÒÃÇÑ¡ÔñSSH·½Ê½ÔÚMaster½ÚµãÖУ¬Çл»µ½JenkinsÓû§ssh-keygen -t rsa´´½¨ÃØÔ¿¶Ô°Ñ¹«Ô¿¿½±´µ½Slave½Úµã

scp ~/.ssh/id_rsa.pub jenkins@slave_ip:~/.ssh/authorized_keys

È·±£ÔÚscpǰ£¬slave½Úµã¸ùĿ¼ÏÂ.sshĿ¼ÒÑ´æÔÚ

chmod 700 authorized_keys

ʹÓÃJenkinsÀ´¹¹½¨DockerÊÇÐèÒª°²×°²å¼þµÄ¡£ÄÇÎÒÃÇÐèÒª°²×°ÄÄЩ²å¼þÄØ£¿

JenkinsÓÐÄÄЩDockerµÄPlugins

ÊǷdz£·á¸»µÄ£¬µ«²¢²»ÊÇÎÒÃǶ¼ÄÜÓõÄÉÏ£¬ËùÒÔÐèÒª¸ù¾ÝÄãʹÓõĻ·¾³ºÍƽ̨À´Ñ¡ÔñÊʺÏ×Ô¼ºµÄPlugin°²×°¾Í¿ÉÒÔÁË¡£ ÿ¸öPlugin¶¼ÐèÒªÊÊÅä JenkinsµÄ°æ±¾£¬ÇÒÿ¸öPluginÒ²ÐèÒªÒÀÀµÒ»Ð©ÆäËüPlugin£¬ÉÏÃæ¶¼ÒѾ­×öÁ˱ê×¢£¬ÐèÒªÅäÌ×À´Óá£

ÕâÀï½éÉܼ¸¸ö³£ÓõÄDocker²å¼þ£º

Docker Commons Plugin

Æä»ù±¾¹¦ÄÜ£º

API for managing Docker image and container fingerprints

Credentials and location of Docker Registry

Credentials and location of Docker Daemon (aka Docker Remote API)

ToolInstallation for Docker CLI clients

DockerImageExtractor extension point to get Docker image relations from jobs

Simple UI referring related image fingerprints in Docker builds

Docker Plugins£¬¸Ã²å¼þÊǽ«Docker×÷ΪJenkinsµÄslaveÀ´Ê¹Óã¬À´ÔÚDockerÈÝÆ÷ÖÖÍê³ÉÏîÄ¿µÄbuild£¬buildÍê³Éºó¸ÃÈÝÆ÷slaveÈÝÆ÷¾Í»á±»Ïú»Ù¡£ËùÓеŤ×÷¶¼ÊÇÔÚslaveÈÝÆ÷ÄÚÍê³É¡£

docker-build-step

¸Ã²å¼þÔÚ build ¹ý³ÌÖÖÔö¼ÓÁË¶Ô Docker ÃüÁîµÄÖ§³Ö¡£

Docker Pipeline Plugin£¬»ùÓÚDocker Commons PluginʵÏÖµÄһЩÉϲãµÄ»ùÓÚDockerµÄPipeline±àÅÅ¡£

Docker Hub Notification Trigger Plugin£¬¸Ã²å¼þÌṩÁ˵±RegistryÖеÄimage·¢Éú±ä»¯Ê±´¥·¢buildоµÏñµÄ¹¦ÄÜ¡£

CloudBees Docker Build and Publish£¬¸Ã²å¼þÌṩÁËͨ¹ýDockerfileÀ´¹¹½¨ÏîÄ¿²¢½«Éú³ÉµÄ¾µÏñÉÏ´«µ½¾µÏñ²Ö¿âµÄ¹¦ÄÜ¡£

CloudBees Docker Custom Build Environment£¬This plugin allows the definition of a build environment for a job using a Docker container¡£¸Ã²å¼þÊÊÓÃÓÚ ¡°×ÔÓÉ·ç¸ñµÄÈí¼þÏîÄ¿¡±£¬Èçͼ£º

CloudBees Docker Traceability£¬ÓÃÓÚ×·×Ùͨ¹ýJenkinsÆôÍ£µÄÈÝÆ÷µÄʼþ¡£

Kubernetes, This plugin allows Jenkins agents to be dynamically provisioned on a Kubernetes cluster. The aim of the Kubernetes plugin is to be able to use a Kubernetes cluster to dynamically provision a Jenkins agent (using Kubernetes scheduling mechanisms to optimize the loads), run a single build, then tear-down that slave.

ÓëKubernetes½áºÏ£¬Í¨¹ýKubernetesÌṩJenkinsµÄ slave ½Úµã¡£ÀûÓÃKubernetesµÄµ÷¶È¹¦ÄÜÌṩ¿ìËÙµÄÆôÍ£ slave ½ÚµãÖ´ÐÐ build µÈÈÎÎñ¡£Ä¿Ç°ÊÇ0.11°æ±¾£¬Îȶ¨ÐÔÓдýÑéÖ¤¡£

JenkinsÓÐûÓÐAPI£¿

ÒòΪ£¬ÎÒÃDz»ÊÇÖ±½ÓÔÚJenkinsµÄDashbordÀ´²Ù×÷£¬ ¶øÊǼ¯³Éµ½ÏÖÓÐÆ½Ì¨£¬ËùÒÔÎÒÃÇÐèҪʹÓÃËüµÄAPI¡£

JenkinsµÄRemote APIÒÔRESTµÄÐÎʽ½øÐÐÌṩ¡£ÀýÈ磬ÎÒÃǴµÄJenkinsÕ¾µãΪhttp://myjenkins.com:8080¡£ÄÇô£¬·ÃÎÊhttp://myjenkins.com:8080/api ¼´¿É²é¿´µ½¸ÃÕ¾µãËùÓпÉÓõÄAPI¡£

²éѯ²Ù×÷

Ö´ÐÐһЩ¶¯×÷

ÀýÈ磬ÎÒÒª´´½¨Ò»¸ö job£¬Ãû×ÖΪ my_job£¬my_jobµÄÅäÖÃÎļþ£º

<?xml version='1.0' encoding='UTF-8'?><project>
<actions/>
<description></description>
<keepDependencies>false </keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding> false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding> false</blockBuildWhenUpstreamBuilding>
<triggers class="vector"/>
<concurrentBuild>false </concurrentBuild>
<builders/>
<publishers/>
<buildWrappers/></project>

µ÷ÓÃAPI´´½¨ my_job£º

curl -X POST http://www.xxx.xxx/jenkins/createItem ?name=my_job --user uname:pass --data-binary

È»ºó£¬Äã¾Í¿ÉÒÔÔÚJenkins DashboardÉÏ¿´µ½Õâ¸öjobÁË¡£ËüµÄ¹ÜÀíÒ³ÃæÎªhttp://myjenkins.com:8080/job/my_job¡£ÄÇôÎÒÃÇ·ÃÎÊ /my_job/api/ ¼´¿É²é¿´µ½¸Ãjob¿ÉÓõÄAPI¡£

¸ü¶àµÄAPI½éÉÜ¿ÉÒԲο¼JenkinsµÄ¹Ù·½wiki£¬ÕâÀïÖ»ÊǸöÒý×Ó£¬Ôڴ˾Ͳ»¹ý¶à½øÐнéÉÜ¡£

×ܽá

¸ÃƪÎÄÕÂÖ÷ÒªÊǽéÉÜÁËJenkinsºÍDockerµÄ³ÖÐø¼¯³ÉµÄʵÏÖ²¿·Ö£¬ºóÐø»¹ÓйØÓÚJenkinsµÄѹ²â¡¢ÐÔÄÜÀ©Õ¹¡¢¸ß¿ÉÓõȣ¬»¹ÐèÒª³ÖÐøÉîÈëµÄ½éÉÜ¡£

   
4324 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

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

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

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