隨着DevOps理念和敏捷理念的發展,咱們但願經過自動化技術,加快項目的迭代。尤爲是當使用微服務方案後,面臨在大量的項目構建和部署工做,藉助於jenkins的持續集成,能夠快速把應用打包成docker鏡像,實現自動部署。javascript
如圖演示瞭如下的場景:css
我搭建的環境都是在本地,gitlab、jenkins、docker私有倉庫都部署在本地,如下是操做步驟:java
使用docker拉取registry鏡像,而後啓動容器linux
docker run -d -p 5000:5000 -v ~/docker-registry:/tmp/registry registry
這樣就能夠在本地運行一個私有鏡像註冊中心,經過鏡像名稱前綴127.0.0.1:5000能夠將鏡像推送到這個地址git
拉取gitlab鏡像,並啓動github
docker pull gitlab/gitlab-ce
sudo docker run --detach \
--hostname gitlab.bill.com \
--publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume ~/gitlab/config:/etc/gitlab \ --volume ~/gitlab/logs:/var/log/gitlab \ --volume ~/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
由於部署在本地,又指定了gitlab.bill.com做爲域名,因此在/etc/hosts配置下,這樣能夠經過域名訪問gitlab。docker
127.0.0.1 gitlab.bill.com
初次登陸能夠修改密碼,或者從新註冊一個用戶,我註冊了一新用戶,並在gitlab中建立了一個demo項目shell
建立了一個空項目後,而後根據github上的提示,將本地的git項目推送到gitlabruby
上傳完後Gitlab項目以下:bash
安裝jenkins
使用docker 下載jenkins鏡像 jenkinsci/jenkins,並啓動
docker run -d \
-p 8080:8080 \ -p 50000:50000 \ --name jenkins \ --link gitlab:gitlab.bill.com \ -u root \
-v /opt/data/jenkins:/var/jenkins_home \
-v /opt/data/jenkins/wars:/usr/share/jenkins \
-v /opt/data/jenkins/ref:/usr/share/jenkins/ref \
-v /usr/share/maven:/usr/local/maven \
-v /usr/lib/jvm/jdk1.8:/usr/local/jdk \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 \
jenkinsci/jenkins:latest
8080端口是jenkins的端口,5000端口是master和slave通訊端口(沒錯,jenkins能夠部署集羣,在本次中沒有配置)
並將宿主機maven和jdk映射到對應的容器目錄上,同時經過配置--link鏈接gitlab,由於要從gitlab下代碼。
初次啓動的時候,能夠經過docker logs -f jenkins
查看控制檯的密碼,經過這個密碼登陸系統,執行建立用戶等操做
安裝插件
啓動項目後,下載所需的插件(尤爲要下載Git Plugin和Maven Intergration Plugin插件),若是缺乏Maven Integration Plugin插件,在建立job時,不會有新建一個maven項目選項
注意:在Global Tool Configuration中配置Maven和Jdk,按道理能夠配置經過配置JAVA_HOME 和MAVEN_HOME,分別指向/usr/local/jdk
,/usr/local/maven
,可是經過測試JAVA_HOME生效了,但MAVEN_HOME沒成效,提示說沒有找到maven,因此又經過自動化安裝從新配置了maven
配置項目
新建一個項目,輸入項目名稱demo
,並選擇Maven project
,而後在配置中作以下配置:
每隔5檢查是否有新代碼發佈,若是有則自動執行構建
點開項目,點擊左側菜單build now
則立馬開始一次構建,點開當前構建信息,左側Console Output
中,可查看構建的明細
在上述的命令中,基本完成集成,可是尚未使用docker,構建的jar包也沒法推送到測試環境或者生產環境,咱們能夠經過以下思路解決:
在項目生成jar包以後,調用項目中Dockerfile文件,使用docker構建鏡像,將鏡像推送到私有鏡像中心的同時,使用該鏡像啓動一個容器(啓動前刪除同名容器)
代碼以下所示:
# 定義變量 API_NAME="demo" API_VERSION="0.0.1" API_PORT=58080 IMAGE_NAME="127.0.0.1:5000/billjiang/$API_NAME:$BUILD_NUMBER" CONTAINER_NAME=$API_NAME-$API_VERSION # 進入target 目錄複製Dockerfile 文件 cd $WORKSPACE/target cp classes/Dockerfile . #構建docker 鏡像 docker build -t $IMAGE_NAME . #推送docker鏡像 docker push $IMAGE_NAME #刪除同名docker容器 cid=$(docker ps | grep "$CONTAINER_NAME" | awk '{print $1}') if [ "$cid" != "" ]; then docker rm -f $cid fi #啓動docker 容器 docker run -d -p $API_PORT:8080 --name $CONTAINER_NAME $IMAGE_NAME #刪除 Dockerfile 文件 rm -f Dockerfile
以上未聲明的變量, $WORKSPACE爲jenkins的變量