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鏡像

構建我們自己的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操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章