<h2>前言</h2> <p>在項目中使用這一套自動集成的體系以後,一直想找個時間總結出來,用於本身記錄也打算將本身的所得分享給園友們,不常常寫文章,可能會有錯誤的地方,但願各位不吝指正,我會及時的改正並表示感謝,但願你們可以一塊兒進步。</p> <h2>前期準備</h2> <p>centos7.5系統環境,關閉防火牆</p> <h3>jenkins in docker 安裝</h3> <pre><code> yum install dockergit
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
</code></pre>docker
<p>-d 後臺運行鏡像<br> -p 80:8080 將鏡像的8080端口映射到服務器的80端口<br> -p 50000:50000 將鏡像的50000端口映射到服務器的50000端口<br> -v jenkins:/var/jenkins_home 掛載卷</p> <blockquote> <p>/var/jenkins_home目錄爲jenkins工做目錄,咱們將硬盤上的一個目錄掛載到這個位置,方便後續更新鏡像後繼續使用原來的工做目錄。該命令會將/var/lib/docker/volumes/jenkins映射到相應路徑,默認的掛載卷都在docker目錄下的volumes文件夾內,能夠本身指定主機內的其餘路徑</p> </blockquote> <p>-v /etc/localtime:/etc/localtime 讓容器使用和服務器一樣的時間設置。<br> --name jenkins 給容器起一個別名</p> <blockquote> <p>我在建立好以後遇到了訪問jenkins界面白屏的問題,重啓容器問題解決,重啓大法好。<br> 重啓命令 <code data-backticks="1">docker service restart</code></p> </blockquote> <h2>配置jenkins</h2> <h3>Publish over SSH插件配置</h3> <p>系統管理->系統設置<br> <code data-backticks="1">Passphrase</code>:用戶密碼</p> <p><img id="img1562076367556" src="https://img2018.cnblogs.com/other/852411/201907/852411-20190702231329615-2044029963.png"></p> <h3>Git憑證添加</h3> <p>進入憑據->系統->全局憑據->添加<br> 添加成功後,點擊Test Configuration 測試是否可以連通<br> <img id="img1562076342172" src="https://img2018.cnblogs.com/other/852411/201907/852411-20190702231329605-147292573.png"></p> <h3>新建構建任務</h3> <p><strong>源碼管理</strong></p> <p>配置以下,憑證選擇咱們上面配置的git憑證,分支調到須要發佈的分支上<br> <img id="img1562077185788" src="https://img2018.cnblogs.com/other/852411/201907/852411-20190702231329608-1680243624.png"></p> <p><strong>構建觸發器</strong></p> <p>選擇輪詢SCM設置爲<code data-backticks="1">H/2 * * * *</code>,即每兩分鐘檢查一次是否有新的提交</p> <p><strong>構建後操做</strong></p> <p>選擇<code data-backticks="1">Send files or execute commands over SSH</code>,這裏咱們不用這個插件進行文件傳輸,而是用它來執行主機中的shell腳本,配置以下</p> <p><img id="img1562076356759" src="https://img2018.cnblogs.com/other/852411/201907/852411-20190702231329614-568533613.png"><br> 腳本內容以下:</p> <pre><code>#!/bin/bashshell
echo '開始執行部署'json
#進入jenkins的工做區 cd /var/lib/docker/volumes/jenkins/_data/workspace/testcentos
echo '更新鏡像'bash
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:masterapp
echo '部署結束' </code></pre>學習
<p>至此,整個構建過程就結束了,可是你在如此構建幾回以後就會發現一個問題<br> <img id="img1562075349916" src="https://img2018.cnblogs.com/other/852411/201907/852411-20190702231329610-1620500217.png"></p> <p>查詢了一下,致使該問題的緣由是</p> <blockquote> <p>從新構建鏡像的時候,該鏡像正在被某容器使用中,那麼在從新構建同名同版本鏡像後,docker保留原來的鏡像,即容器仍是用原來的, 那麼原來的鏡像名稱變成none,tag也成了none</p> </blockquote> <p>解決的辦法是 在shell腳本以後添加一行刪除tag爲none的鏡像的腳本,以下<br> <code data-backticks="3">docker images|grep none|awk '{print $3}'|xargs docker rmi</code></p> <h2>總結</h2> <p>實驗的進程總不會像表面那樣一番風順,期間也會遇到各類各樣的問題,我很享受那種闖過一關又一關看到成果的過程,後續更新我會將我在部署時遇到的一些小問題整理出來,做爲記錄學習,感謝閱讀。</p>測試