工欲善其事必先利其器,為了解脫程序員的,我們程序員本身發明了很多好用的工具,通過各種工具的組合來達到我們想要的結果
本文采用jenkins docker svn maven作為相關工具,項目spring boot框架
使用 個軟件版本
jenkins Jenkins ver. 2.90
docker 17.10-ce
svn 1.6
maven 3.5
spring boot 1.5.6
centos7
實現目標:當我們遷入代碼時自動升級到測試服務器,如下圖
第一步 重新構建自己的jenkins鏡像
構建我們自己的jenkins,jenkins 我們在docker容器中運行,但是 我們還要用jenkins來構建docker鏡像這是就需要 jenkins容器中可以執行docker命令,所以我們需要構建自己的jenkins鏡像
這里借鑒 大橋下的蝸牛 的博客 同時也向大家推薦一下 https://blog.lab99.org/post/docker-2016-07-14-faq.html#ru-he-zai-docker-rong-qi-nei-shi-yong-docker-ming-ling-bi-ru-zai-jenkins-rong-qi-zhong
更詳細的 請大家瀏覽上面的網址查看。
我並沒有用上面的Dockerfile來構建jenkins鏡像因為上面使用的jenkins版本有點老不過依然能用下面不上我自己的 Dockerfile
FROM jenkinsci/jenkins:2.90-alpine # 下載安裝Docker CLI USER root RUN curl -O https://get.docker.com/builds/Linux/x86_64/docker-latest.tgz \ && tar zxvf docker-latest.tgz \ && cp docker/docker /usr/local/bin/ \ && rm -rf docker docker-latest.tgz # 將 `jenkins` 用戶的組 ID 改為宿主 `docker` 組的組ID,從而具有執行 `docker` 命令的權限。 ARG DOCKER_GID=999 USER jenkins:${DOCKER_GID}
然后 docker build -t myjenkins:0.0.1 . 進行構建
運行
docker run --name jenkins \ -d \ -p 8081:8080 \ -v /var/run/docker.sock:/var/run/docker.sock \ myjenkins:0.0.1
然后就等待容器起來之后打開界面這樣打鏡像有一個問題(1、很難在線/離線安裝jdk除非在構建鏡像是就進行安裝實際上jenkins基礎鏡像有jdk環境 2、不知道為什么 不能再掛載volume)
起來之后我們會看到 初始化安裝插件等等 這里就不截圖展示了
第二步 安裝jenkins插件
系統管理->管理插件->可選插件
安裝相關maven插件
同樣安裝docker相關插件,安裝完后如下圖
上面的插件 有很多都是開始的時候安裝的。
第三步 設置docker遠程訪問
本人使用的是centos7操作系統
首先打開docker安裝文件路徑如下
/usr/lib/systemd/system
修改 docker.service文件
ExecStart=/usr/bin/docker --tls=false -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
然后刷新配置文件重啟docker
sudo systemctl daemon-reload
sudo systemctl restart docker
這樣docker就會監聽2375端口我們就可以對他進行遠程操作
docker -H IP:2375 ps
執行docker命令時指定IP和端口號
第四部 配置我們的jenkins
系統管理->系統設置
選擇 svn使用版本
設置Docker builder 地址這里一定要主要 是tcp協議不是http,填寫完一定要測試一下鏈接確定是否聯通
然后進行全局工具配置
系統管理->全局工具配置
進行maven配置 其中jdk在jenkins中已經存在jdk環境所以不需要設置
選擇完后點擊保存
第五部 創建item
首先配置svn
然后在設置構建步驟
這里的基本思想是 首先maven將工程達成jar包,然后用Dockerfile文件生成docker鏡像然后在上傳到私有倉庫再然后遠程執行部署和更新命令
首先設置maven構建
然后設置鏡像構建
選擇完Execute Docker command 之后在選擇 Create/build image
這里說明一下
最上面選擇 只有構建成功才進行下一步操作
然后在進行選擇進行鏡像推送
最后我們遠程執行docker命令進行運行創建容器
$WORKSPACE/src/docker
上面的路徑是java工程的路徑Dockerfile文件在上面的路徑在工程中寫好另外我們工程生成的java包也是需要生成輸出到這個目錄的
$BUILD_NUMBER 這個全局變量是自增的每次構建都會+1可以用它來標記版本
到這里我們的jenkins基本上已經設置完成可以保存進行應用構建執行了。
最后 我們看下我們的項目結構
再附上本人java工程的Dockerfile文件
FROM java:8 VOLUME /tmp ADD testdemo-0.0.5.jar app.jar RUN bash -c 'touch /app.jar' EXPOSE 10005 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
本文還涉及很多其他知識比如私有倉庫的搭建Spring boot框架等知識
上面忘記了 如果要持續構建的話
需要設置一下
每5分鍾構建一次這樣就可以 我們編輯完代碼 上傳svn就會馬上發布到測試版
解放Control+c Control+v操作