±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬±¾ÎÄÖ÷ÒªÌṩÁ˼òµ¥µÄÒ»ÖÖ·½Ê½,½éÉÜÏ»ùÓÚJenkins+docker
ʵÏÖ×Ô¶¯»¯²¿Êð,Ï£Íû¶Ô´ó¼ÒµÄѧϰÓÐËù°ïÖú¡£ |
|
ǰÑÔ
Ëæ×ÅÒµÎñµÄÔö³¤£¬ÐèÇóÒ²¿ªÊ¼Ôö¶à£¬Ã¿¸öÐèÇóµÄ´óС£¬¿ª·¢ÖÜÆÚ£¬·¢²¼Ê±¼ä¶¼²»Ò»Ö¡£»ùÓÚ΢·þÎñµÄϵͳ¼Ü¹¹£¬¹¦Äܵĵþ¼Ó£¬¶ÔÓ¦µÄ·þÎñµÄÊýÁ¿Ò²ÔÚÔö¼Ó£¬´óС¹¦ÄܵĿìËÙµü´ú£¬¸ü¼ÓÒªÇó²¿ÊðµÄ¿ìËÙ»¯£¬ÖÇÄÜ»¯¡£Òò´Ë£¬´«Í³µÄÈ˹¤²¿ÊðÒѾÐÄÓÐÓà¶øÁ¦²»×ã¡£
³ÖÐø¼¯³É£¬³ÖÐø²¿Ê𣬳ÖÐø½»»¥¶ÔÓÚ΢·þÎñ¿ª·¢À´Ëµ£¬ÊÇÌá¸ßÍŶÓÕûÌåЧÂʲ»¿É»òȱµÄÒ»»·¡£ºÏÀíµÄʹÓÃCI,CDÄܹ»¼«´óµÄÌá¸ßÁËÉú²úЧÂÊ£¬Ò²Ìá¸ßÁ˲úÆ·µÄ½»»¥ÖÊÁ¿¡£
Jenkins + Docker
ÏÂͼÊǹ¹ÏëµÄÍøÂç½á¹¹Í¼

´óÌå½á¹¹
1.¿ª·¢ÈËÔ±ÔÚgitLabÉÏ´òÁËÒ»¸ötag
2.gitLab°ÑtagʼþÍÆË͵½Jenkins
3.Jenkins »ñÈ¡tagÔ´Â룬±àÒ룬´ò°ü£¬¹¹½¨¾µÏñ
4.Jenkins push ¾µÏñµ½°¢ÀïÔÆ²Ö¿â
5.Jenkins Ö´ÐÐÔ¶³Ì½Å±¾
5-1. Ô¶³Ì·þÎñÆ÷ pull Ö¸¶¨¾µÏñ
5-2. Í£Ö¹Àϰ汾ÈÝÆ÷£¬Æô¶¯Ð°汾ÈÝÆ÷
6.֪ͨ²âÊÔÈËÔ±²¿Êð½á¹û
»ùÓÚmaven¹¹½¨¾µÏñ£¬ÉÏ´«°¢ÀïÔÆdocker²Ö¿â
maven ¹¹½¨¾µÏñÅäÖÃ
pom.xml ÎļþÌí¼Ódocker²å¼þ
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.11</version> <configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<imageTags> <imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag> </imageTags>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources> <resource> <targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource> </resources> </configuration>
</plugin> |
1.${docker.image.prefix} ÊǾµÏñµÄǰ׺
2.${project.artifactId} ÊǾµÏñÃû×Ö
3.${project.version} °æ±¾ºÅ£¬´Ë´¦Ò²ÓÃÀ´µ±×ö¾µÏñµÄ°æ±¾ºÅ
docker-maven-plugin ʹÓÿÉÒÔ×ÔÐаٶȡ£
src/main/docker Ŀ¼ÏÂÐÂÔöÎļþ Dockerfile£¬ÄÚÈÝÈçÏ£º
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD demo-service-ver-0.0.1.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java
$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom
-jar /app.jar" ] |
ÒÔÉϵÄÅäÖÿÉÒÔ°ÑÒ»¸ö·þÎñ´ò°ü³É¾µÏñ£¬Ö»ÐèÒªÖ´ÐÐ
$ sudo mvn package
docker:build |
°¢ÀïÔÆdocker²Ö¿âʹÓÃ
×¢²á»òÕ߯ôÓð¢ÀïÔÆdocker²Ö¿â¾Í²»×¸Êö¡£ÏÂÃæ¼òµ¥½éÉÜÉÏ´«ÀÈ¡docker¾µÏñ
怬
$ sudo docker
login --username=Óû§Ãû --password=ÃÜÂë registry-internal.cn-hangzhou.aliyuncs.com
|
push ֮ǰÉú³ÉµÄ¾µÏñ
$ sudo docker
tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xxx/demo-service:[¾µÏñ°æ±¾ºÅ]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/xxx/demo-service:[¾µÏñ°æ±¾ºÅ]
|
xxx : ÊÇÄã¾µÏñ²Ö¿âµÄnamespace
Ò»¶Ñpushºó£¬Äã¾Í¿ÉÒÔÔÚ°¢ÀïÔÆµÄDocker¾µÏñ²Ö¿âÀïÃæ¿´µ½Äã¶ÔÓ¦µÄ¾µÏñÁË¡£ÏÂͼÊÇÎÒÃǹ«Ë¾µÄ²¿·Ö¾µÏñÁбí

¾µÏñÁбí
pull ¾µÏñ
µÇ¼²Ù×÷ͬÉÏ
$ sudo docker
pull registry.cn-hangzhou.aliyuncs.com/xxx/demo-service:[¾µÏñ°æ±¾ºÅ]
|
jenkins ²¿ÊðÅäÖÃ
¹¹½¨Jenkins¾µÏñ
FROM jenkins
USER root
RUN apt-get update && apt-get install
-y sudo && rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL"
>> /etc/sudoers
USER jenkins |
Ò»¿ªÊ¼Ê¹Óùٷ½µÄ¾µÏñÖ±½ÓÆôÓã¬Ò»Ð©²å¼þºÍÅäÖöàÉÙ¶¼ÓеãÎÊÌ⣬±ÈÈç²»ÄÜʹÓÃsudo£¬µÈµÈ¡£Òò´Ë»ùÓÚ¹Ù·½¾µÏñ¹¹½¨Ò»¸ö¸ü·ûºÏÎÒÃÇÐèÒªµÄ¾µÏñ¡£
¹¹½¨ÃüÁ
$ sudo docker
build -t buxiaoxia/jenkins:1.0 |
Æô¶¯JenkinsÈÝÆ÷
sudo docker run
--memory 1.5G --name buxiaoxia-jenkins \
-p 18181:8080 -p 50000:50000 -u root -d \
--env JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxNewSize=256m"
\
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /home/buxiaoxia/software/jenkins:/var/jenkins_home
\
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
\
buxiaoxia/jenkins:1.0 |
¼òµ¥½âÊÍÏ£º
-v/var/run/docke
r.sock:/var/run/docker.sock Óë -v / usr/bin/docker:/usr/bin/docker
ÊǰÑËÞÖ÷»údocker Ó³Éäµ½ÈÝÆ÷ÄÚ¡£
-v/home/buxiaoxia/software/jenkins:/var/jenkins
_ home Ö¸¶¨JenkinsµÄËÞÖ÷»ú´æ´¢Â·¾¶
-v/usr/lib64/libltdl.so.7 :/usr/lib/x86_64
- linux - gnu/libltdl.so .
|
7 ÔÚcentos7 ϵͳÏ»á³öÏÖ¸ö±ðµÄ°ü¶ªÊ§£¬¶ÔÓ¦µÄÒýÏÂËÞÖ÷»úµÄ°ü¾Í¿ÉÒÔ¡£
dockerÔÚÈÝÆ÷ÄÚ¹¹½¨µÄʱºò£¬Èç¹û³öÏÖȨÏÞ²»¹»Ê²Ã´µÄ¡£¿ÉÒÔÔÚËÞÖ÷»úÖÐʹÓÃÒÔÏÂÁ½ÖÖ·½Ê½£º
$ sudo chmod
777 /var/run/docker.sock |
»òÕß
$ usermod -a
-G docker jenkin |
jenkins Æô¶¯ºó£¬·ÃÎʶÔÓ¦µÄJenkinsÒ³Ãæ£¬³õʼ»¯Ö»ÒªÒ»²½²½¸ú×Å×߾ͿÉÒÔÁË¡£
JenkinsÅäÖÃ
²å¼þÏÂÔØ
ËùÐèÒªµÄ²å¼þ£º
1.Maven Integration plugin
2.docker-build-step
3.Docker plugin
4.Gitlab Hook Plugin
5.GitLab Plugin
ÒòΪʹÓõÄÊÇgitlab£¬¶ÔÓ¦µÄ²å¼þÒ²ÊDZØÐëµÄ¡£ÏÂÔØÍê²å¼þºó£¬mavenµÈÏà¹Ø²å¼þÅäÖú㨴˴¦Ê¡ÂÔ...£©
maven ¾µÏñµØÖ·ÅäÖÃ
¿ÉÒÔÖ±½ÓÔÚËÞÖ÷»úÐ޸ģ¬Â·¾¶ÔÚ:/home/buxiaoxia /
software / jenkins / tools / hudson .tasks .Maven_MavenInstallation
/ maven3-1 / conf Ï嵀 settings . xml
setting.xml ¾µÏñ¸Ä³É°¢ÀïÔÆµÄ¾ÍOK£¬·ÉÆð¡£¡£¡£
н¨Ò»¸ömaven job
Ô´ÂëÅäÖÃ

¹¹½¨

¹¹½¨ºóÖ´ÐÐÌØ¶¨½Å±¾

½Å±¾ÄÚÈÝÈçÏ£º
echo '================¿ªÊ¼ÍÆË;µÏñ================'
sudo docker login --username=Óû§Ãû --password=ÃÜÂë
registry-internal.cn-hangzhou.aliyuncs.com
sudo docker push registry-internal.cn-hangzhou.aliyuncs.com/xxx/demo-service
echo '================½áÊøÍÆË;µÏñ================'
echo '================¿ªÊ¼Ô¶³ÌÆô¶¯================'
ssh buxiaoxia@192.168.100.2 -tt << remotessh
###Ê×ÏÈÒªsshÉÏÈ¥×¢ÒâÕâÀïµÄ<< remotessh£¬ÐèÒª×ö¹«Ô¿ÃÜÔ¿
####´ÓÕâÀ↑ʼ¶¼ÊÇÔÚÔ¶³Ì»úÆ÷ÉÏÖ´ÐÐÃüÁî
cd /home/buxiaoxia/xiaw
./jenkins.sh registry-internal.cn-hangzhou.aliyuncs.com/xxx/demo-service
sudo docker login --username=Óû§Ãû --password=ÃÜÂë
registry-internal.cn-hangzhou.aliyuncs.com
sudo docker pull registry-internal.cn-hangzhou.aliyuncs.com/xxx/demo-service
sudo docker run -d -m 300m --name=demo-service-`date
+%Y-%m-%d` --restart=always registry-internal.cn-hangzhou.aliyuncs.com/xxx/demo-service
echo "finished!"
#####Ö´ÐÐÍê±Ï
exit ###Í˳öÔ¶³Ì»úÆ÷
remotessh ###½áβŶ
echo '================½áÊøÔ¶³ÌÆô¶¯================'
|
jenkins.sh ½Å±¾ÄÚÈÝ£º
#!/bin/sh
sudo docker stop $(sudo docker ps | grep $1|awk
'{print $1}'|sed 's/%//g') |
ÒÔÉϾÍÍê³ÉÁËÒ»¸ö¼òµ¥µÄ×Ô¶¯»¯¹¹½¨
gitlabÅäÖÃwebhook
Jenkins°²×°Íê¶ÔÓ¦µÄgitlab²å¼þ£¬ÅäÖÃÖеĹ¹½¨´¥·¢Ñ¡ÔñÈçÏÂ

¸´Öƺì¿òÖеÄurl
ÔÙÔÚgitlabµÄ¶ÔÓ¦ÏîÄ¿ÖÐwebhooksÒ³ÃæÖеÄurlÌîÈëÇ°Ãæ¸´ÖƵÄurl

±£´æ¼´¿É£¬ÓÒϽǿÉÒÔµã»÷²âÊÔŶ¡£
ÅäÖÃÍê³Éºó£¬Ã¿´Î¸ÃÏîÄ¿Óиötag push event £¬¶¼»á´¥·¢JenkinsµÄ×Ô¶¯¹¹½¨¡£½Ó×Å£¬Jenkins¾ÍÖ´ÐÐ
ÀȡԴÂë -> ±àÒë -> ¹¹½¨¾µÏñ -> ÍÆË;µÏñ -> Ö´ÐÐÔ¶³ÌÆô¶¯½Å±¾Íê³É²¿Êð¡£
×ܽá
Ò»²½²½µÄÅäÖ㬻ù±¾¾ÍÅÜͨÁËÎÒÃÇ»ùÓÚJenkins£¬dockerʵÏÖ×Ô¶¯»¯²¿ÊðµÄ³õʼ°æ±¾¡£¿ª·¢ÈËÔ±Íê³É¹¦ÄÜ¿ª·¢ºó£¬ÐèÒª½»»¥Ò»¸ö²âÊÔ°æ±¾£¬Ö»ÐèÒªÍÆËÍÒ»¸ötagµ½git²Ö¿â£¬¾ÍÄܹ»½«´úÂë×Ô¶¯²¿Êðµ½Ìض¨µÄ·þÎñÆ÷ÉÏ¡£¿Éϲ¿ÉºØ~
¿ÉÒÔʡȥһ¶ÑµÄ´ÓÒ»¸ö·þÎñÆ÷Åܵ½ÁíÒ»¸ö·þÎñÆ÷£¬È»ºóÖ´Ðи÷ÖÖÃüÁîµÄËöËé²Ù×÷¡£¡£¡£
¹ØÓÚÅäÖÃ
ĿǰÎÒÊÇʹÓÃÁËconsulµÄÅäÖù²Ïí£¬°Ñ²»Í¬»·¾³µÄÅäÖ÷ÅÔÚÁËconsulÉÏ£¬¾µÏñÖÐûÓб£Áô¿É±äµÄÅäÖ㬶øÊǸù¾ÝÆô¶¯µÄ²ÎÊý¾Í¿ÉÒÔ×ÔÓÉÇл»»·¾³ÅäÖá£
µ±È»£¬consulµÄÅäÖù²Ïí¿ÉÒÔ¿´¿´ÎÒgitÉϹØÓÚconsulµÄÏîÄ¿£ºhttp://git.oschina.net/buxiaoxia/spring-demo
´æÔÚÎÊÌâ
1.dockerδʹÓñàÅÅ£¬½ÏΪ¶ÀÁ¢£¬ÐèÒªÖªµÀÌØ¶¨µÄ·þÎñÆ÷ÍøÂçλÖÃ
2.docker¾µÏñµÄpushÓëpull£¬¶¼ÐèÒªÃ÷ÎÄÖ´Ðа¢ÀïÔÆÕ˺ÅÃÜÂ룬¿É½øÒ»²½¸Ä½ø
3.δ¹¹½¨°æ±¾»ØÍËÁ÷³Ì
4.shell½Å±¾½¡×³ÐÔ²»¹»£¬Ò쳣δ´¦Àí
ÓÅ»¯
¿ÉÒÔÕë¶ÔÒÔÉÏÎÊÌâ×öÏàÓ¦µÄÓÅ»¯£¬ÍêÉÆ³õʼ»¯°æ±¾µÄCDÁ÷³Ì¡£ÀýÈ磬docker ʹÓÃswarm£¬ÈÃswarm¹ÜÀídocker
ÈÝÆ÷µÈµÈ¡£
|