基於Jenkins+Docker的自動化代碼發佈流程

前段時間寫了一篇初創團隊持續集成的落地與實現,主要用python接收gitlab的push請求,然後調用不同的shell腳本來實現。本文將使用基於Jenkins+Docker來實現另一套的自動化CI/CD的代碼發佈流程,至於jenkins和docker是什麼這裏就不多說了,能找到這篇文章的應該都知道他們是幹什麼用的,下面是整體的流程和部署。

一、總體流程設計

流程解析:
1、開發人員將代碼推送至git倉庫。
2、通過Jenkins上事先設置好的觸發器來拉取git倉庫的代碼。
3、代碼在Jenkins上通過設置好的規則編譯打包,然後build成docker鏡像,推送至docker倉庫。
4、Jenkins執行shell,連接到服務器上,拉取剛剛build的docker鏡像並運行。
5、發佈完成後,通過郵件通知測試人員。

資源相關:

git服務 github
jenkins jenkins.test.com
項目服務器 120.78.xxx.xxx

jenkins服務和項目服務都是我們線上的測試服務器,所以地址就不公開了。


二、git相關

本文我用的是自己的githubhttps://github.com/opsonly,上面有一個用於測試的個人django的項目。

三、Jenkins設置

1、郵件設置

這裏注意要設置Extended E-mail Notification,否則後面無法發送郵件!

  • 網站內容類型用的html,模板如下:
<!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>

2、創建一個任務(自由風格的軟件項目)django-web,選擇參數化構建

3、源碼配置


·
4、觸發器配置

根據自己情況而設置

5、構建配置

選擇執行shell

注意:這裏是整個流程的關鍵步驟,本文中是拉取github上的代碼後,將其cp至另一個專用於build的目錄,另外也將寫好的Dockerfile文件也複製至該目錄,然後完成docker鏡像的build和push操作。

  • 項目服務器上的發佈腳本如下
  • Dockerfile文件如下:
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"]

6、構建後操作

在列表中選擇“Editable Email Notification”。

注意:這裏要選擇Editable Email Notification,前面的郵件配置爲Extended E-mail Notification,一定要對應起來,不然無法成功發送郵件(因爲Jenkins還有自帶的一個郵件通知,不過本文中沒有使用)。

整個的配置流程大致就是這樣子,可以根據實際情況再作調整,比如構建腳本和Dockerfile文件都還有很大的調整空間。

四、效果圖

1、傳入tag參數並構建項目

2、構建成功收到郵件通知:

3、打開剛剛構建成功的項目服務器的url,正常訪問沒有問題.

4、到項目服務器上查看一下啓動情況:


五、總結

1、數據庫問題:
因爲上面的django項目用的mysql,而顯然本文中mysql並沒有用容器實現,如果想要容器化mysql,需要注意mysql和django項目之間的網絡互通問題。django的mysql地址應填入容器mysql的容器名。
2、權限問題:
如果讀者根據上面步驟來試驗,可能會遇到mysql的權限問題,因爲我的本地的mysql服務已加入了root@’%’賬號,如果你是初始化的mysql,會出現連接失敗的問題。解決方法很簡單,就是根據情況添加特定的mysql賬號。


喜歡我寫的東西的朋友可以關注一下我的公衆號,上面有我的學習資源以及一些其他福利。:Devops部落

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章