天天看點

jenkins+docker 持續建構非docker in docker

工欲善其事必先利其器,為了解脫程式員的,我們程式員本身發明了很多好用的工具,通過各種工具的組合來達到我們想要的結果

本文采用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+docker 持續建構非docker in docker

第一步 重新建構自己的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

jenkins+docker 持續建構非docker in docker

更詳細的 請大家浏覽上面的網址檢視。

我并沒有用上面的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插件

系統管理->管理插件->可選插件

jenkins+docker 持續建構非docker in docker

安裝相關maven插件

同樣安裝docker相關插件,安裝完後如下圖

jenkins+docker 持續建構非docker in 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      
jenkins+docker 持續建構非docker in docker

然後重新整理配置檔案重新開機docker

sudo systemctl daemon-reload
sudo systemctl restart docker      

這樣docker就會監聽2375端口我們就可以對他進行遠端操作

docker -H IP:2375 ps      

執行docker指令時指定IP和端口号

jenkins+docker 持續建構非docker in docker

第四部 配置我們的jenkins

系統管理->系統設定

選擇 svn使用版本

設定Docker builder 位址這裡一定要主要 是tcp協定不是http,填寫完一定要測試一下連結确定是否聯通

jenkins+docker 持續建構非docker in docker

然後進行全局工具配置

系統管理->全局工具配置

進行maven配置 其中jdk在jenkins中已經存在jdk環境是以不需要設定

jenkins+docker 持續建構非docker in docker

 選擇完後點選儲存

第五部 建立item

jenkins+docker 持續建構非docker in docker

 首先配置svn

jenkins+docker 持續建構非docker in docker

然後在設定建構步驟

這裡的基本思想是 首先maven将工程達成jar包,然後用Dockerfile檔案生成docker鏡像然後在上傳到私有倉庫再然後遠端執行部署和更新指令

首先設定maven建構

jenkins+docker 持續建構非docker in docker

然後設定鏡像建構

jenkins+docker 持續建構非docker in docker

選擇完Execute Docker command 之後在選擇 Create/build image

jenkins+docker 持續建構非docker in docker

這裡說明一下

最上面選擇 

jenkins+docker 持續建構非docker in docker

隻有建構成功才進行下一步操作

然後在進行選擇進行鏡像推送

jenkins+docker 持續建構非docker in docker

最後我們遠端執行docker指令進行運作建立容器

jenkins+docker 持續建構非docker in docker
$WORKSPACE/src/docker      

上面的路徑是java工程的路徑Dockerfile檔案在上面的路徑在工程中寫好另外我們工程生成的java包也是需要生成輸出到這個目錄的

$BUILD_NUMBER  這個全局變量是自增的每次建構都會+1可以用它來标記版本

到這裡我們的jenkins基本上已經設定完成可以儲存進行應用建構執行了。

最後 我們看下我們的項目結構

jenkins+docker 持續建構非docker in docker

再附上本人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架構等知識

上面忘記了 如果要持續建構的話 

需要設定一下

jenkins+docker 持續建構非docker in docker

每5分鐘建構一次這樣就可以 我們編輯完代碼 上傳svn就會馬上釋出到測試版

解放Control+c Control+v操作

上一篇: 我的2017