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

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

1、整體流程設計

流程解析: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


2、git相關

本文我用的是本身的githubhttps://github.com/opsonly,上面有一個用於測試的我的django的項目。數據庫

3、Jenkins設置

一、郵件設置

這裏注意要設置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>
複製代碼

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

三、源碼配置

· 四、觸發器配置

根據本身狀況而設置

五、構建配置

選擇執行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"]
複製代碼

六、構建後操做

在列表中選擇「Editable Email Notification」。

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

整個的配置流程大體就是這樣子,能夠根據實際狀況再做調整,好比構建腳本和Dockerfile文件都還有很大的調整空間。

4、效果圖

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

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

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

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


5、總結

一、數據庫問題: 由於上面的django項目用的mysql,而顯然本文中mysql並無用容器實現,若是想要容器化mysql,須要注意mysql和django項目之間的網絡互通問題。django的mysql地址應填入容器mysql的容器名。

二、權限問題: 若是讀者根據上面步驟來試驗,可能會遇到mysql的權限問題,由於個人本地的mysql服務已加入了root@’%’帳號,若是你是初始化的mysql,會出現鏈接失敗的問題。解決方法很簡單,就是根據狀況添加特定的mysql帳號。


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

相關文章
相關標籤/搜索