±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ×÷Õߣº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
Æô¶¯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µÄѹ²â¡¢ÐÔÄÜÀ©Õ¹¡¢¸ß¿ÉÓõȣ¬»¹ÐèÒª³ÖÐøÉîÈëµÄ½éÉÜ¡£ |