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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓà Jenkins + Ansible ʵÏÖ×Ô¶¯»¯²¿Êð Nginx
 
΢ÐŹ«ÖÚºÅjenkins
  6050  次浏览      31
  2020-1-2 
 
±à¼­ÍƼö:
Ö÷Òª´ÓʵÑé»·¾³½éÉÜ£¬Æô¶¯ÊµÑé»·¾³¡¢ÔÚ Jenkins ÉÏ´´½¨²¿ÊðÈÎÎñ¡¢ÊÖ¹¤´¥·¢Ò»´Î×Ô¶¯»¯¹¹½¨¡¢´úÂë½²½âµÈ·½Ãæ½éÉÜ¡£
±¾ÎÄÀ´Î¢ÐŹ«ÖÚºÅjenkins£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­ÍƼö¡£

±¾ÎĽéÉÜÈçºÎʹÓà Jenkins + Ansible ʵÏÖ¶Ô Nginx µÄ×Ô¶¯»¯²¿Êð¡£×îÖÕ´ïµ½µÄЧ¹ûÓÐÈçϼ¸µã£º

Ö»ÒªÄ㽫 Nginx µÄÅäÖÃÍÆË͵½ GitHub ÖУ¬Jenkins ¾Í»á×Ô¶¯Ö´Ðв¿Êð£¬È»ºóÄ¿±ê·þÎñÆ÷µÄ Nginx ÅäÖÃ×Ô¶¯ÉúЧ¡£Õâ¸ö¹ý³ÌÊÇÃݵȣ¨idempotent£©µÄ£¬Ö»Òª´úÂë²»±ä£¬Ö´ÐжàÉٱ飬×îÖÕЧ¹û²»±ä¡£

Èç¹ûÄ¿±ê»úÆ÷ûÓа²×° Nginx£¬Ôò»á×Ô¶¯°²×° Nginx¡£

×Ô¶¯ÉèÖ÷þÎñÆ÷·À»ðǽ¹æÔò¡£

1. ʵÑé»·¾³½éÉÜ

±¾´ÎʵÑéʹÓà Docker Compose ´î½¨ Jenkins ¼° Jenkins agent¡£Ê¹Óà Vagrant Æô¶¯Ò»Ì¨ÐéÄâ»ú£¬ÓÃÓÚ²¿Êð Nginx¡£Ê¹Óà Vagrant ÊÇ¿ÉÑ¡µÄ£¬¶ÁÕß¿ÉÒÔʹÓà VirtualBox Æô¶¯Ò»¸öÐéÄâ»ú¡£Ê¹Óà Vagrant ÍêÈ«ÊÇΪÁË×Ô¶¯»¯´î½¨ÊµÑé»·¾³¡£

ÒÔÏÂÊÇÕû¸öʵÑé»·¾³µÄ¼Ü¹¹Í¼£º

×¢Ò⣬ͼÖÐµÄ 5123 <-> 80 ´ú±í½«ËÞÖ÷»úµÄ 5123 ¶Ë¿ÚÇëÇóת·¢µ½ÐéÄâ»úÖÐµÄ 80 ¶Ë¿Ú¡£

Vagrant£ºÐéÄâ»ú¹ÜÀí¹¤¾ß£¬Í¨¹ýËü£¬ÎÒÃÇ¿ÉÒÔʹÓÃÎı¾À´¶¨Òå¡¢¹ÜÀíÐéÄâ»ú¡£

Ansible£º×Ô¶¯»¯ÔËά¹¤¾ß

Docker Compose£ºËüÊÇÒ»¸öÓÃÓÚ¶¨ÒåºÍÔËÐжàÈÝÆ÷ Docker Ó¦ÓóÌÐòµÄ¹¤¾ß¡£¿ÉÒÔʹÓà YAML ÎļþÀ´ÅäÖÃÓ¦ÓóÌÐòµÄ·þÎñ¡£

2. Æô¶¯ÊµÑé»·¾³

¿Ë¡´úÂë²¢½øÈëÎļþ¼Ð

git clone https://github.com/zacker330/jenkins-ansible-nginx.git
cd jenkins-ansible-nginx

 

¹¹½¨ Jenkins agent µÄ¾µÏñ ÐèÒª×Ô¶¨Òå Jenkins agent ¾µÏñÓÐÁ½¸öÔ­Òò£º

docker build -f JenkinsSlaveAnsibleDockerfile -t jenkins-swarm-ansible .

 

 

±¾´ÎʵÑ飬ʹÓà Swarm ²å¼þʵÏÖ Jenkins master Óë agent Ö®¼äµÄͨÐÅ£¬ËùÒÔ Jenkins agent ÐèÒªÆô¶¯ swarm ¿Í»§¶Ë¡£

Jenkins agent ±ØÐëÖ§³Ö Ansible¡£

Æô¶¯ Jenkins master ¼° Jenkins agent

docker-compose up -d

ͨ¹ý http://localhost:8080 ·ÃÎÊ Jenkins master£¬Èç¹û³öÏÖ¡°½âËøÃÜÂë¡±Ò³Ãæ£¬ÈçÏÂͼ£¬ÔòÖ´ÐÐÃüÁî docker-compose logs jenkins ²é¿´ Jenkins master Æô¶¯ÈÕÖ¾¡£½«ÈÕÖ¾ÖеĽâËøÃÜÂëÊäÈëµ½±íµ¥ÖС£È»ºó¾ÍÒ»²½²½°´Ìáʾ°²×°¼´¿É¡£

°²×° Jenkins ²å¼þ ±¾´ÎʵÑéÐèÒª°²×°ÒÔϲå¼þ£º

Pipeline 2.6

Swarm 3.15 ÓÃÓÚ ÊµÏÖ Jenkins master Óë Jenkins agent ×Ô¶¯Á¬½Ó

Git 3.9.3

ÅäÖà Jenkins master ²»Ö´ÐÐÈÎÎñ ½øÈëÒ³Ãæ£ºhttp://localhost:8080/computer/(master)/configure£¬ÈçÏÂͼËùʾÉèÖãº

È·ÈÏ Jenkins °²È«ÅäÖÃÓдò¿ª¶Ë¿Ú£¬ÒÔ¹© Jenkins agent Á¬½Ó¡£ÎÒÃÇÉèÖà Jenkins master ¿ª·ÅµÄ¶Ë¿Ú£¬¶Ë¿Ú¿ÉÒÔÊǹ̶¨µÄ 50000 £¬Ò²¿ÉÒÔÉèÖÃÎªËæ»ú¡£ÉèÖÃÁ´½Ó£ºhttp://localhost:8080/configureSecurity/¡£

Æô¶¯Ä¿±ê»úÆ÷£¬ÓÃÓÚ²¿Êð Nginx ÔÚÃüÁîÐÐÖÐÖ´ÐÐÒÔÏÂÃüÁ

vagrant up

×¢Ò⣬Vagrantfile ÎļþÖÐµÄ config.vm.box Öµ±ØÐë¸Ä³ÉÄãµÄ vagrant box ¡£

ÖÁ´Ë£¬ÊµÑé»·¾³ÒѾ­´î½¨ºÃÁË¡£½ÓÏÂÀ´¾Í¿ÉÒÔн¨ Jenkins ÈÎÎñÁË¡£

3. ÔÚ Jenkins ÉÏ´´½¨²¿ÊðÈÎÎñ

1¡¢Ð½¨Á÷Ë®ÏßÈÎÎñ

2¡¢ÅäÖÃÁ÷Ë®Ïß ÅäÖà Jenkins ÈÎÎñ´ÓÔ¶³Ì²Ö¿âÀ­È¡ Jenkinsfile£¬ÈçÏÂͼËùʾ£º

³ý´ËÖ®Í⣬²»ÐèÒªÆäËüÅäÖÃÁË£¬ÊDz»ÊǺܼòµ¥£¿

4. ÊÖ¹¤´¥·¢Ò»´Î×Ô¶¯»¯¹¹½¨

µã»÷¡°Á¢¼´¹¹½¨¡±£º

×îÖÕÖ´ÐÐÈÕÖ¾ÈçÏ£º

ÖÁ´Ë£¬²¿ÊðÒѾ­Íê³É¡£ÒÔºóÐÞ¸Ä Nginx µÄÅäÖã¬Ö»ÐèÒªÐ޸ĴúÂ룬ȻºóÍÆË͵½Ô¶³Ì²Ö¿â£¬¾Í»á×Ô¶¯»¯²¿Êð¡£²»ÐèÒªÊÖ¹¤µÇ¼µ½Ä¿±ê»úÆ÷ÊÖ¹¤ÐÞ¸ÄÁË¡£

×îºó£¬ÎÒÃÇ¿ÉÒÔͨ¹ý·ÃÎÊ http://localhost:5123£¬Èç¹û³öÏÖÈçÏÂÒ³ÃæËµÃ÷²¿Êð³É¹¦£º

5. ´úÂë½²½â

ÒÔÉϲ½Öè²¢²»ÄÜ¿´³ö×Ô¶¯»¯²¿ÊðÕæÕý×öÁËʲô¡£ÄÇÊÇÒòΪÎÒÃÇËùÓеÄÂß¼­¶¼Ð´ÔÚ´úÂëÖС£Êǵģ¬¿ÉÒÔ˵ÊÇ everything is code¡£

½ÓÏÂÀ´ÎÒÃǽéÉÜ´úÂë²Ö¿â¡£

% tree -L 2
©À©¤©¤ JenkinsSlaveAnsibleDockerfile # Jenkins agent ¾µÏñ Dockerfile
©À©¤©¤ Jenkinsfile # Á÷Ë®ÏßÂß¼­
©À©¤©¤ README.md
©À©¤©¤ Vagrantfile # Vagrant ÐéÄâ»ú¶¨ÒåÎļþ
©À©¤©¤ docker-compose.yml # Jenkins ʵÏÖ»·¾³
©À©¤©¤ env-conf # ËùÓÐÓ¦ÓÃÅäÖÃ
©¦ ©¸©¤©¤ dev # dev »·¾³µÄÅäÖÃ
©À©¤©¤ deploy # Ansible ²¿Êð½Å±¾ËùÔÚÎļþ¼Ð
©¦ ©À©¤©¤ playbook.yaml
©¦ ©¸©¤©¤ roles
©¸©¤©¤ swarm-client.sh # Jenkins swarm ²å¼þµÄ¿Í»§¶Ë

5.1Á÷Ë®ÏßÂß¼­

Jenkinsfile ÎļþÓÃÓÚÃèÊöÕûÌõÁ÷Ë®ÏßµÄÂß¼­¡£´úÂëÈçÏ£º

pipeline{
// ÈÎÎñÖ´ÐÐÔÚ¾ßÓÐ ansible ±êÇ©µÄ agent ÉÏ
agent { label "ansible"}
environment{
// ÉèÖà Ansible ²»¼ì²é HOST_KEY
ANSIBLE_HOST_KEY_CHECKING = false
}
triggers {
pollSCM('H/1 * * * *')
}
stages{
stage("deploy nginx"){
steps{
sh "ansible-playbook -i env-conf/dev deploy/playbook.yaml"
}
}}}

 

environment ²¿·Ö£ºÓÃÓÚ¶¨ÒåÁ÷Ë®ÏßÖ´Ðйý³ÌÖеĻ·¾³±äÁ¿¡£

triggers ²¿·Ö£ºÓÃÓÚ¶¨ÒåÁ÷Ë®ÏߵĴ¥·¢»úÖÆ¡£pollSCM ¶¨ÒåÁËÿ·ÖÖÓÅжÏÒ»´Î´úÂëÊÇ·ñÓб仯£¬Èç¹ûÓб仯Ôò×Ô¶¯Ö´ÐÐÁ÷Ë®Ïß¡£

agent ²¿·Ö£ºÓÃÓÚ¶¨ÒåÕûÌõÁ÷Ë®ÏßµÄÖ´Ðл·¾³¡£

stages ²¿·Ö£ºÁ÷Ë®ÏßµÄËùÓн׶Σ¬¶¼±»¶¨ÒåÔÚÕⲿ·Ö¡£

ÒÔÉÏÖ»ÊǶ¨ÒåÁ÷Ë®ÏßÊÇÈçºÎÖ´Ðеģ¬Ä¿Ç°ÕûÌõÁ÷Ë®ÏßÖ»ÓÐÒ»¸ö deploy nginx ½×¶Î£¬²¢ÇÒÖ»Ö´ÐÐÁËÒ»Ìõ ansible-playbook ÃüÁî¡£µ«ÊÇËü²¢Ã»ÓиæËßÎÒÃDz¿ÊðÂß¼­ÊÇÔõôÑùµÄ¡£

5.2 ²¿ÊðÂß¼­

ËùÓеIJ¿ÊðÂß¼­£¬°üÀ¨ Nginx µÄ°²×°Æô¶¯¡¢ÅäÖõĸüÐÂÒÔ¼°¼ÓÔØ£¬¶¼·ÅÔÚ Ansible ½Å±¾ÖС£¶Ô Ansible ²»ÊìµÄͬѧ£¬¿ÉÒÔÔÚ±¾ÎÄĩβÕÒµ½½éÉÜ Ansible µÄÎÄÕ¡£

Õû¸ö²¿ÊðÂß¼­µÄÈë¿ÚÔÚ deploy/playbook.yaml£¬´úÂëÈçÏ£º

- hosts: "nginx"
become: true
roles:
# Nginx µÄ²¿Êð
- ansible-role-nginx
# ¶Ô·À»ðǽµÄÉèÖÃ
- ansible-role-firewall

hosts£º¶¨ÒåÁË playbook ²¿ÊðµÄÄ¿±êÖ÷»ú·Ö×éÃûΪ nginx¡£

roles£º°üº¬ÁËÁ½¸öÖ´ÐоßÌ岿Êð¶¯×÷µÄ role£¬ÖÁÓÚ role ÄÚ²¿Âß¼­£¬²»ÔÚ±¾ÎÄÌÖÂÛ·¶Î§£¬ÓÐÐËȤµÄͬѧÔĶÁÔ´Âë¡£

5.3 ÅäÖùÜÀí

̸µ½²¿Ê𣬾Ͳ»µÃ²»Ì¸ÅäÖùÜÀí¡£

»Ø¹ËǰÎÄÖÐÁ÷Ë®ÏßÖÐÖ´ÐÐµÄ shell ÃüÁansible-playbook -i env-conf/dev deploy/playbook.yaml ÎÒÃÇͨ¹ý -i ²ÎÊýÖ¸¶¨²¿ÊðʱËùʹÓõĻ·¾³ÅäÖá£Í¨¹ýÕâÖÖ·½Ê½ÊµÏÖ»·¾³ÅäÖÃÓëÖ´Ðнű¾µÄ·ÖÀë¡£ÕâÑù´øÀ´ÒÔϼ¸¸öºÃ´¦£º

ÐÂÔö»·¾³Ê±£¬Ö»ÐèÒª¸´ÖÆÏÖÓеĻ·¾³£¬È»ºó½«ÀïÃæµÄ±äÁ¿µÄÖµ¸Ä³Éл·¾³µÄ¼´¿É¡£±ÈÈ磬Ҫ¶Ô²âÊÔ»·¾³½øÐв¿Êð£¬Ö»ÐèÒª½« -i ²ÎÊýÖµ¸Ä³É£ºenv-conf/test¡£

¶ÔÅäÖð汾»¯¿ØÖÆ¡£

±¾´ÎʵÑéÖУ¬¸÷¸ö»·¾³µÄÅäÖ÷ÅÔÚ env-conf Ŀ¼ÖУ¬Ä¿Ç°Ö»ÓÐ dev »·¾³£¬ÒÔÏÂÊÇ env-conf/ Ŀ¼½á¹¹£º

% cd env-conf/
% tree
©¸©¤©¤ dev
©À©¤©¤ group_vars
©¦ ©¸©¤©¤ nginx.yaml
©À©¤©¤ host_vars
©¦ ©¸©¤©¤ 192.168.52.10
©¸©¤©¤ hosts

hostsÎļþ£ºAnsible ÖÐͨ¹ý¡°·Ö×顱À´ÊµÏÖ¶ÔÖ÷»úµÄ¹ÜÀí¡£hosts ÎļþÄÚÈÝÈçÏ£º

[nginx]
192.168.52.10

host_vars Ŀ¼£ºÓÃÓÚ´æ·ÅÖ÷»ú¼¶±ðµÄÅäÖñäÁ¿£¬±¾ÀýÖÐ 192.168.52.10 ÊÇÒ»¸ö YAML ¸ñʽÎļþ¡£×¢ÒâÎļþÃûÊǸÃÖ÷»úµÄ IP¡£ÎÒÃÇÔÚÎļþÖзÅÖ÷»úÏà¹ØµÄÅäÖ㬱ÈÈç Ansible Á¬½ÓÖ÷»úʱʹÓõ½µÄÓû§ÃûºÍÃÜÂë¡£

group_vars Ŀ¼£ºÓÃÓÚ´æ·Å×é¼¶±ðµÄÅäÖñäÁ¿¡£±ÈÈç nginx.yaml ¶ÔÓ¦µÄ¾ÍÊÇ

nginx

Õâ¸ö×éµÄµÄÅäÖñäÁ¿¡£ÎļþÃûÓë hosts ÖеÄ×éÃû¶ÔÓ¦

×ܽá

µ½´Ë£¬ÎÒÃÇÍêÕûµÄ×Ô¶¯»¯²¿ÊðÒѾ­½²½âÍê³É¡£µ«ÊÇ»¹ÒÅÁôÏÂһЩÎÊÌ⣺

±¾ÎÄÖ»Êǰ²×°ÁËÒ»¸ö¡°¿Õ¡±µÄ Nginx£¬µ«ÊÇûÓнéÉÜ Nginx ÕæÕýÅäÖá£

ĿǰÖ÷»úµÄÁ¬½ÓÐÅÏ¢£¨SSH ÃÜÂ룩ÊÇÃ÷ÎÄдÔÚhost_vars/192.168.52.10ÎļþÖе쬴æÔÚ°²È«·çÏÕ¡£

ûÓнéÉÜÈçºÎµ± Java Ó¦Óò¿Êðʱ£¬ÈçºÎ×Ô¶¯¸üРNginx µÄÅäÖá£

   
6050 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

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

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

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