前段時間寫了一篇初創團隊持續集成的落地與實現,主要用python接收gitlab的push請求,而後調用不一樣的shell腳原本實現。本文將使用基於Jenkins+Docker來實現另外一套的自動化CI/CD的代碼發佈流程,至於jenkins和docker是什麼這裏就很少說了,能找到這篇文章的應該都知道他們是幹什麼用的,下面是總體的流程和部署。html
流程解析:python
一、開發人員將代碼推送至git倉庫。mysql
二、經過Jenkins上事先設置好的觸發器來拉取git倉庫的代碼。git
三、代碼在Jenkins上經過設置好的規則編譯打包,而後build成docker鏡像,推送至docker倉庫。github
四、Jenkins執行shell,鏈接到服務器上,拉取剛剛build的docker鏡像並運行。web
五、發佈完成後,經過郵件通知測試人員。sql
資源相關:docker
git服務 | github |
---|---|
jenkins | jenkins.test.com |
項目服務器 | 120.78.xxx.xxx |
jenkins服務和項目服務都是咱們線上的測試服務器,因此地址就不公開了。shell
本文我用的是本身的githubhttps://github.com/opsonly
,上面有一個用於測試的我的django的項目。數據庫
一、郵件設置
這裏注意要設置Extended E-mail Notification,不然後面沒法發送郵件!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次構建日誌</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
本郵件由系統自動發出,無需回覆!<br/>
項目 ${PROJECT_NAME }已構建完成!</br>
<td><font color="#CC0000">構建結果 - ${BUILD_STATUS}</font></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">構建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>項目名稱 : ${PROJECT_NAME}</li>
<li>構建編號 : 第${BUILD_NUMBER}次構建</li>
<li>觸發緣由: ${CAUSE}</li>
<li>構建狀態: ${BUILD_STATUS}</li>
<li>構建日誌: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>構建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工做目錄 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>項目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
<h4><font color="#0B610B">失敗用例</font></h4>
<hr size="2" width="100%" />
$FAILED_TESTS<br/>
<h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4>
<hr size="2" width="100%" />
<ul>
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
詳細提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>
</td>
</tr>
</table>
</body>
</html>
複製代碼
二、建立一個任務(自由風格的軟件項目)django-web,選擇參數化構建
三、源碼配置
根據本身狀況而設置
五、構建配置
選擇
執行shell
注意:這裏是整個流程的關鍵步驟,本文中是拉取github上的代碼後,將其cp至另外一個專用於build的目錄,另外也將寫好的Dockerfile文件也複製至該目錄,而後完成docker鏡像的build和push操做。
FROM python:3.7
ADD ./django-web ./app
WORKDIR ./app
RUN pip3 install -r requirements.txt
CMD ["python","manage.py","runserver","0.0.0.0:8000"]
複製代碼
六、構建後操做
在列表中選擇「Editable Email Notification」。
注意:這裏要選擇Editable Email Notification,前面的郵件配置爲Extended E-mail Notification,必定要對應起來,否則沒法成功發送郵件(由於Jenkins還有自帶的一個郵件通知,不過本文中沒有使用)。
整個的配置流程大體就是這樣子,能夠根據實際狀況再做調整,好比構建腳本和Dockerfile文件都還有很大的調整空間。
一、傳入tag參數並構建項目
二、構建成功收到郵件通知:
三、打開剛剛構建成功的項目服務器的url,正常訪問沒有問題.
四、到項目服務器上查看一下啓動狀況:
一、數據庫問題: 由於上面的django項目用的mysql,而顯然本文中mysql並無用容器實現,若是想要容器化mysql,須要注意mysql和django項目之間的網絡互通問題。django的mysql地址應填入容器mysql的容器名。
二、權限問題: 若是讀者根據上面步驟來試驗,可能會遇到mysql的權限問題,由於個人本地的mysql服務已加入了root@’%’帳號,若是你是初始化的mysql,會出現鏈接失敗的問題。解決方法很簡單,就是根據狀況添加特定的mysql帳號。