Gitlab+Jenkins+Docker實現net core持續集成


前言

在項目中使用這一套自動集成的體系之后,一直想找個時間總結出來,用於自己記錄也打算將自己的所得分享給園友們,不經常寫文章,可能會有錯誤的地方,希望各位不吝指正,我會及時的改正並表示感謝,希望大家能夠一起進步。

前期准備

centos7.5系統環境,關閉防火牆

jenkins in docker 安裝

    yum install docker
docker service start

docker pull jenkins

docker run -d -p 8080:8080 -p 50000:50000 \  
    -v jenkins:/var/jenkins_home \  
    -v /etc/localtime:/etc/localtime \  
    --name jenkins   \
    docker.io/jenkins/jenkins  

-d 后台運行鏡像
-p 80:8080 將鏡像的8080端口映射到服務器的80端口
-p 50000:50000 將鏡像的50000端口映射到服務器的50000端口
-v jenkins:/var/jenkins_home 掛載卷

/var/jenkins_home目錄為jenkins工作目錄,我們將硬盤上的一個目錄掛載到這個位置,方便后續更新鏡像后繼續使用原來的工作目錄。該命令會將/var/lib/docker/volumes/jenkins映射到相應路徑,默認的掛載卷都在docker目錄下的volumes文件夾內,可以自己指定主機內的其他路徑

-v /etc/localtime:/etc/localtime 讓容器使用和服務器同樣的時間設置。
--name jenkins 給容器起一個別名

我在創建好之后遇到了訪問jenkins界面白屏的問題,重啟容器問題解決,重啟大法好。
重啟命令 docker service restart

配置jenkins

Publish over SSH插件配置

系統管理->系統設置
Passphrase:用戶密碼

Git憑證添加

進入憑據->系統->全局憑據->添加
添加成功后,點擊Test Configuration 測試是否能夠連通

新建構建任務

源碼管理

配置如下,憑證選擇我們上面配置的git憑證,分支調到需要發布的分支上

構建觸發器

選擇輪詢SCM設置為H/2 * * * *,即每兩分鍾檢查一次是否有新的提交

構建后操作

選擇Send files or execute commands over SSH,這里我們不用這個插件進行文件傳輸,而是用它來執行主機中的shell腳本,配置如下


腳本內容如下:

#!/bin/bash

echo '開始執行部署'

進入jenkins的工作區

cd /var/lib/docker/volumes/jenkins/_data/workspace/test

echo '更新鏡像'

echo '---------------重新構建鏡像----------------------'
cp testCore/Dockerfile Dockerfile

執行net core 程序的dockerfile,生成程序鏡像

docker build --no-cache -t testCore:master .
echo '---------------鏡像構建成功----------------------'

容器創建

docker run -d -it
-v /home/configs/testCore/appsettings.json:/app/appsettings.json
-v /etc/localtime:/etc/localtime:ro
-p 6000:80
--restart=always
--name test testCore:master

echo '部署結束'

至此,整個構建過程就結束了,但是你在如此構建幾次之后就會發現一個問題

查詢了一下,導致該問題的原因是

重新構建鏡像的時候,該鏡像正在被某容器使用中,那么在重新構建同名同版本鏡像后,docker保留原來的鏡像,即容器還是用原來的, 那么原來的鏡像名稱變成none,tag也成了none

解決的辦法是 在shell腳本之后添加一行刪除tag為none的鏡像的腳本,如下
docker images|grep none|awk '{print $3}'|xargs docker rmi

總結

實驗的進程總不會像表面那樣一番風順,期間也會遇到各種各樣的問題,我很享受那種闖過一關又一關看到成果的過程,后續更新我會將我在部署時遇到的一些小問題整理出來,作為記錄學習,感謝閱讀。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM