overview:
多分支工做流程帶來了如下幾個關鍵能力:java
- 在代碼倉庫中,每一個新分支都有本身單獨的工做流水線(job)。
- 每一個工做流水線都記錄了對應分支的構建和變動歷史。
- 能夠自定義設置流水線隨着分支的刪除而刪除或修建。
- 經過重寫父屬性(若是須要),能夠靈活地單獨配置分支流水線屬性。
Jenkins pipeline-as-code 使您能夠在項目/應用程序源代碼存儲庫中維護CI / CD工做流邏輯,而無需在Jenkins中爲每一個分支維護其配置。用於構建/測試/部署的流水線代碼始終和你的項目/應用程序源代碼同步。在倉庫中咱們用jenkinsfile對流水線代碼進行描述。關於jenkinsfile,其簡介及語法可參考官方文檔git
do it:
1.jenkins須要安裝多分支流水線插件:
首先打開插件中心:jenkins>Manage Jenkins>Manage Pluginsweb
而且安裝以下兩個插件(有可能已經安裝了):express
2.新建一個多分支流水線項目:
2.1 jenkins>新建Item
2.2 填寫項目,代碼源相關信息
建立完以後在首頁會顯示json
建立完成。curl
3.接下來在咱們的項目根目錄添加jenkinsfile(如下用已經存在的項目作演示)
而後在Jenkinsfile中編寫流水線代碼(pipeline代碼語法請參考 語法,如下爲示例gitlab
pipeline { options { buildDiscarder(logRotator(numToKeepStr: '7', artifactNumToKeepStr: '10', daysToKeepStr: '5')) timeout(time: 12, unit: 'MINUTES') disableConcurrentBuilds() } agent { label 'master' } environment { JOB_NAME = 'pipeline-demo' } parameters { booleanParam(name: 'FAST_MODE', defaultValue: false, description: '此操做將會跳過單元測試以及代碼質量檢查。') } stages { stage('pipeline環境準備') { steps { script { echo "開始構建" if(!env.BRANCH_NAME.startsWith('feature-') && !env.BRANCH_NAME.startsWith('release-')){ error("自動構建分支名稱必須以feature-或release-開頭,當前分支名稱爲: ${env.BRANCH_NAME}") } if (env.BRANCH_NAME.startsWith('feature-') ) { env.env = "beta" } if (env.BRANCH_NAME.startsWith('release-')) { env.env = "stage" } sh "echo 當前分支 : ${env.BRANCH_NAME}" sh "echo 當前環境 : ${env.env}" sh "echo 當前提交 : ${env.commit}" sh "echo WORKSPACE : ${env.WORKSPACE}" sh "echo GIT_BRANCH : ${env.GIT_BRANCH}" sh "echo BUILD_NUMBER : ${env.BUILD_NUMBER}" sh "echo JOB_NAME : ${env.JOB_NAME}" sh "./mvnw -v" sh "java -version" } } } stage("運行測試&收集報告"){ when{ expression { params.FAST_MODE == false } } steps{ script { echo "開始運行測試" sh "./mvnw clean test jacoco:report" } } } stage('代碼靜態檢查') { when{ expression { params.FAST_MODE == false } } steps { withSonarQubeEnv( installationName: 'sonar_server') { sh './mvnw sonar:sonar' } } } stage("檢查結果分析") { when{ expression { params.FAST_MODE == false } } steps { timeout(time: 1, unit: 'HOURS') { waitForQualityGate abortPipeline: true } } } stage("發佈應用") { steps { script { echo "開始發佈" sh "curl --location --request POST 'http://0.0.0.0:8080/job/${env.JOB_NAME}/buildWithParameters' \ --header 'Authorization: ${env.ecarx_jenkins_auth}' \ --form 'env=${env.env}' \ --form 'branchname=origin/${env.BRANCH_NAME}'" } } } } }
4.在咱們的代碼倉庫中添加webhook
以下(示例中使用gitlab,若是是其餘倉庫,可參考各倉庫文檔):單元測試
上圖中一系列trigger的多選框,咱們只選push事件,意味着在push的時候觸發jenkins構建。 以後點擊add webhook保存。測試
⚠️:每一個不一樣的代碼倉庫可能webhook地址的組成不一樣,因此添加前可查看各個倉庫文檔。ui
準備就緒。
5.push代碼
將帶有Jenkinsfile的項目代碼push的遠程代碼倉庫,回到jenkins控制檯
每當有分支push代碼時,都會自動觸發Jenkins的自動構建。
從而實現ci/cd。
6.總結:
jenkins能讓咱們輕鬆實現持續集成/持續部署(ci/cd)。ci/cd讓咱們實現代碼質量內建,ci/cd中最重要的是測試自動化,沒有自動化測試的持續集成只是一堆不會帶來任何用處的垃圾。咱們在流水線中嵌入測試自動化,代碼質量檢查來保證咱們的開發質量。流水線可以及時給開發者反饋,這種反饋很是重要,當咱們的流水線失敗的時候,咱們須要第一時間修復它,從而斷絕錯誤進一步積累(解決錯誤最好的時機就是錯誤出現的那一刻),而不是繼續開發別的功能。不然等到失敗積累到必定程度,咱們在去修復的時候,須要付出的成本將是更大的。