在項目中使用這一套自動集成的體系以後,一直想找個時間總結出來,用於本身記錄也打算將本身的所得分享給園友們,不常常寫文章,可能會有錯誤的地方,但願各位不吝指正,我會及時的改正並表示感謝,但願你們可以一塊兒進步。git
centos7.5系統環境,關閉防火牆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 restart
bash
系統管理->系統設置
Passphrase
:用戶密碼服務器
進入憑據->系統->全局憑據->添加
添加成功後,點擊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
實驗的進程總不會像表面那樣一番風順,期間也會遇到各類各樣的問題,我很享受那種闖過一關又一關看到成果的過程,後續更新我會將我在部署時遇到的一些小問題整理出來,做爲記錄學習,感謝閱讀。