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

前言

在項目中使用這一套自動集成的體系以後,一直想找個時間總結出來,用於本身記錄也打算將本身的所得分享給園友們,不常常寫文章,可能會有錯誤的地方,但願各位不吝指正,我會及時的改正並表示感謝,但願你們可以一塊兒進步。git

前期準備

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

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 掛載卷shell

/var/jenkins_home目錄爲jenkins工做目錄,咱們將硬盤上的一個目錄掛載到這個位置,方便後續更新鏡像後繼續使用原來的工做目錄。該命令會將/var/lib/docker/volumes/jenkins映射到相應路徑,默認的掛載卷都在docker目錄下的volumes文件夾內,能夠本身指定主機內的其餘路徑json

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

我在建立好以後遇到了訪問jenkins界面白屏的問題,重啓容器問題解決,重啓大法好。
重啓命令 docker service restartbash

配置jenkins

Publish over SSH插件配置

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

Git憑證添加

進入憑據->系統->全局憑據->添加
添加成功後,點擊Test Configuration 測試是否可以連通
app

新建構建任務

源碼管理學習

配置以下,憑證選擇咱們上面配置的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

總結

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

相關文章
相關標籤/搜索