學習Jenkins持續整合(三)Jenkins專案構建觸發器、引數化構建及郵件傳送

Liu_Shihao發表於2020-10-27

一、構建觸發器

1.常用的構建觸發器

Jenkins內建4種構建觸發器:

  1. 觸發遠端構建
    身份驗證令牌 算是我們自己設定的一個token 一般是加密的

在這裡插入圖片描述
在這裡插入圖片描述

然後 通過 瀏覽器位址列訪問JENKINS_URL/job/wxpublic/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
JENKINS_URL替換Jenkins的地址,TOKEN_NAME替換為設定的token令牌:http://139.196.231.13:8888/job/wxpublic/build?token=liushihao即可通過遠端訪問,來立即構建。

  1. 其他工程構建後觸發(Build after other projects are build)
    即當關注的專案構建完成後,這個專案也會觸發構建
    在這裡插入圖片描述

  2. 定時構建(Build periodically)
    在這裡插入圖片描述

定時字串從左往右分別為: 分 時 日 月 周

一些定時表示式的例子:
每30分鐘構建一次:H代表形參 H/30 * * * * 10:02 10:32
每2個小時構建一次: H H/2 * * *
每天的8點,12點,22點,一天構建3次: (多個時間點中間用逗號隔開) 0 8,12,22 * * * 每天中午12點定時構建一次 H 12 * * *
每天下午18點定時構建一次 H 18 * * * 在每個小時的前半個小時內的每10分鐘 H(0-29)/10 * * * *
每兩小時一次,每個工作日上午9點到下午5點(也許是上午10:38,下午12:38,下午2:38,下午 4:38) H H(9-16)/2 * * 1-5

  1. 輪詢SCM(Poll SCM)
    在這裡插入圖片描述

輪詢SCM,是指定時掃描原生程式碼倉庫的程式碼是否有變更,如果程式碼有變更就觸發專案構建。
注意:這次構建觸發器,Jenkins會定時掃描本地整個專案的程式碼,增大系統的開銷,不建議使用。
注意:設定的兩分鐘,不一定會構建,只有專案程式碼變更了後才會構建。

2.Git hook自動觸發構建(*)

剛才我們看到在Jenkins的內建構建觸發器中,輪詢SCM可以實現Gitlab程式碼更新,專案自動構建,但是 該方案的效能不佳。那有沒有更好的方案呢? 有的。就是利用Gitlab的webhook實現程式碼push到倉 庫,立即觸發專案自動構建。
安裝Gitlab Hook外掛 需要安裝兩個外掛: Gitlab Hook和GitLab
但由於我是使用Gogs搭建的個人倉庫 ,所以需要安裝gogs外掛
在這裡插入圖片描述
Jenkins設定自動構建
在這裡插入圖片描述
在這裡插入圖片描述

3.Jenkins的引數化構建

在這裡插入圖片描述

4.配置郵箱伺服器傳送構建結果

在這裡插入圖片描述

在這裡插入圖片描述
在郵箱設定中找到 開啟(qq郵箱)
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
email模板

<!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>
        <td>(本郵件是程式自動下發的,請勿回覆!)</td>
    </tr>
    <tr>
        <td>
            <h2>
                <font color="#0000FF">構建結果 - ${BUILD_STATUS}</font>
            </h2>
        </td>
    </tr>
    <tr>
        <td><br />
            <b>
                <font color="#0B610B">構建資訊</font>
            </b>
            <hr size="2" width="100%" align="center" />
        </td>
    </tr>
    <tr>
        <td>
            <ul>
                <li>專案名稱&nbsp;:&nbsp;${PROJECT_NAME}</li>
                <li>構建編號&nbsp;:&nbsp;第${BUILD_NUMBER}次構建</li>
                <li>觸發原因:&nbsp;${CAUSE}</li>
                <li>構建日誌:&nbsp;<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                <li>構建&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${BUILD_URL}">${BUILD_URL}</a></li>
                <li>工作目錄&nbsp;:&nbsp;<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
                <li>專案&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
            </ul>
        </td>
    </tr>
    <tr>
        <td>
            <b>
                <font color="#0B610B">Changes Since Last Successful Build:</font>
            </b>
            <hr size="2" width="100%" align="center" />
        </td>
    </tr>
    <tr>
        <td>
            <b><font color="#0B610B">變更資訊:</font></b>
            <hr size="2" width="100%" align="center" />
        </td>
    </tr>
    <tr>
        <td>
            <ul>
                <li>上次構建成功後變化 :  ${CHANGES_SINCE_LAST_SUCCESS}</a></li>
            </ul>
        </td>
    </tr>
    <tr>
        <td>
            <ul>
                <li>上次構建不穩定後變化 :  ${CHANGES_SINCE_LAST_UNSTABLE}</a></li>
            </ul>
        </td>
    </tr>
    <tr>
        <td>
            <ul>
                <li>歷史變更記錄 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
            </ul>
        </td>
    </tr>
<!--    <tr>-->
<!--        <td>-->
<!--            <ul>-->
<!--                <li>變更集:${JELLY_SCRIPT,template="html"}</a></li>-->
<!--            </ul>-->
<!--        </td>-->
<!--    </tr>-->
<!--    <tr>-->
<!--        <td><b>Failed Test Results</b>-->
<!--            <hr size="2" width="100%" align="center" />-->
<!--        </td>-->
<!--    </tr>-->
<!--    <tr>-->
<!--        <td>-->
<!--            <pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">${FAILED_TESTS}</pre>-->
<!--            <br/>-->
<!--        </td>-->
<!--    </tr>-->
    <tr>
        <td><b>
            <font color="#0B610B">構建日誌 (最後 100):</font>
        </b>
            <hr size="2" width="100%" align="center" />
        </td>
    </tr>
    <tr>
        <td><textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG,maxLines=100}</textarea>
        </td>
    </tr>
</table>
</body>

</html>

新增傳送郵件指令碼:
在這裡插入圖片描述

在這裡插入圖片描述
傳送郵件指令碼:

pipeline {
    agent any

    stages {
        stage('拉取程式碼') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '00b15bbd-d044-4db1-9eb6-063c16781dc4', url: 'http://139.196.231.13:3000/liushihao/monitor.git']]])
            }
        }
        stage('編譯構建') {
            steps {
                sh label: '', script: 'mvn clean package'
            }
        }
         stage('構建完成') {
            steps {
                echo '構建完成'
            }
        }
    }
    post {
          always {
             emailext(
                subject: '構建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
                body: '${FILE,path="email.html"}',
                to: '******@qq.com,******4@qq.com,******76@qq.com'
             )
          }
    }
}

效果:
在這裡插入圖片描述

相關文章