溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用Jenkins多分支管道

發(fā)布時(shí)間:2021-09-13 10:27:09 來(lái)源:億速云 閱讀:319 作者:柒染 欄目:web開(kāi)發(fā)

如何使用Jenkins多分支管道,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

Jenkins多分支管道是設(shè)計(jì)CI/CD工作流的最佳方法之一,因?yàn)樗耆腔趃it的pipeline  as code。

多分支管道是一種基于Git分支自動(dòng)創(chuàng)建Jenkins  Pipeline的概念。這意味著,它可以在SCM(Github)中創(chuàng)建時(shí)自動(dòng)發(fā)現(xiàn)新的Git分支,并自動(dòng)為該分支創(chuàng)建管道。當(dāng)管道構(gòu)建開(kāi)始時(shí),Jenkins在該分支中使用Jenkinsfile進(jìn)行構(gòu)建階段。

SCM可以是Github,Bitbucket或Gitlab存儲(chǔ)庫(kù)。

如何使用Jenkins多分支管道

如果不希望所選分支出現(xiàn)在帶有Java正則表達(dá)式的自動(dòng)管道中,則可以選擇排除。多分支管道支持基于PR的分支發(fā)現(xiàn)。這意味著,如果有人從分支提出PR(拉動(dòng)請(qǐng)求),則會(huì)在管道中自動(dòng)發(fā)現(xiàn)分支。如果啟用了此配置,則僅在提PR時(shí)才會(huì)觸發(fā)構(gòu)建。因此,如果您正在尋找基于PR的Jenkins構(gòu)建工作流程,這是一個(gè)不錯(cuò)的選擇。

您可以向Jenkinsfile添加條件邏輯,以根據(jù)分支需求構(gòu)建作業(yè)。例如,如果您希望 功能  分支僅運(yùn)行單元測(cè)試和Sonar分析,則可以設(shè)置條件以使用when條件跳過(guò)部署階段,如下所示。

如何使用Jenkins多分支管道

因此,每當(dāng)開(kāi)發(fā)人員將PR從功能分支提交到其他分支時(shí),管道將運(yùn)行單元測(cè)試和Sonar分析階段,從而跳過(guò)部署階段。而且,多分支流水線不僅限于連續(xù)交付應(yīng)用程序。您也可以使用它來(lái)管理基礎(chǔ)結(jié)構(gòu)代碼。

多分支管道如何工作?

我將引導(dǎo)您完成基本的構(gòu)建和部署工作流程,以了解多分支管道的工作方式。

假設(shè)我希望Jenkins管道在以下條件下構(gòu)建和部署應(yīng)用程序。

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 開(kāi)發(fā)人員通過(guò)向功能分支提交代碼來(lái)從功能分支開(kāi)始。

  3. 每當(dāng)開(kāi)發(fā)人員從功能分支提PR來(lái)開(kāi)發(fā)分支時(shí),Jenkins管道都應(yīng)觸發(fā)以運(yùn)行單元測(cè)試和靜態(tài)代碼分析。

  4. 在功能分支中成功測(cè)試代碼后,開(kāi)發(fā)人員將PR合并到開(kāi)發(fā)分支。

  5. 當(dāng)代碼準(zhǔn)備發(fā)布時(shí),開(kāi)發(fā)人員將PR從develop分支提到master。它應(yīng)該觸發(fā)一個(gè)構(gòu)建管道,該管道將運(yùn)行單元測(cè)試用例,代碼分析并將其部署到dev /  QA環(huán)境。

從以上條件可以看出,沒(méi)有手動(dòng)觸發(fā)Jenkins作業(yè)的情況,并且每當(dāng)有分支請(qǐng)求請(qǐng)求時(shí),都需要自動(dòng)觸發(fā)管道并為該分支運(yùn)行所需的步驟。此工作流程為工程師建立了一個(gè)很好的反饋循環(huán),并避免了依賴DevOps團(tuán)隊(duì)在非產(chǎn)品環(huán)境中進(jìn)行構(gòu)建和部署。開(kāi)發(fā)人員可以在Github上檢查構(gòu)建狀態(tài),然后決定下一步要做的事情。

通過(guò)Jenkins多分支管道可以輕松實(shí)現(xiàn)此工作流程。下圖顯示了以上示例構(gòu)建過(guò)程的多分支管道工作流的外觀

如何使用Jenkins多分支管道

這是多分支管道的工作方式。

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 當(dāng)開(kāi)發(fā)人員從功能分支創(chuàng)建PR來(lái)開(kāi)發(fā)分支時(shí),Github將帶有PR信息的Webhook發(fā)送給Jenkins。

  3. Jenkins收到PR,并找到相關(guān)的多分支管道并自動(dòng)創(chuàng)建分支管道。然后,它按照功能分支中Jenkinsfile中提到的步驟運(yùn)行作業(yè)。簽出期間,PR中的源分支和目標(biāo)分支將合并。PR合并將在Github上被阻止,直到從Jenkins返回構(gòu)建狀態(tài)為止。

  4. 構(gòu)建完成后,Jenkins會(huì)將狀態(tài)更新為Github  PR。現(xiàn)在您將能夠合并代碼。另外,如果您想查看Jenkins構(gòu)建日志,則可以在PR狀態(tài)下找到Jenkins構(gòu)建日志鏈接。

多分支Pipleline Jenkinsfile

在開(kāi)始實(shí)施之前,讓我們看一下可在管道中使用的多分支管道Jenkins示例Jenkinsfile。

為了使多分支管道正常工作,您需要在SCM存儲(chǔ)庫(kù)中包含Jenkinsfile。

如果您正在學(xué)習(xí)/測(cè)試,則可以使用下面提供的多分支管道Jenkinsfile。它具有一個(gè)檢出階段和其他階段,它們會(huì)回顯消息。

另外,您可以克隆并使用具有此Jenkinsfile的Github存儲(chǔ)庫(kù)

注意:將代理標(biāo)簽“ master”替換為您的Jenkins代理名稱。master也可以工作,但不建議它在實(shí)際的項(xiàng)目環(huán)境中運(yùn)行。

pipeline {    agent {       node {           label 'master'       }   }    options {       buildDiscarder logRotator(                   daysToKeepStr: '16',                   numToKeepStr: '10'           )   }    stages {               stage('Cleanup Workspace') {           steps {               cleanWs()               sh """               echo "Cleaned Up Workspace For Project"               """           }       }        stage('Code Checkout') {           steps {               checkout([                   $class: 'GitSCM',                   branches: [[name: '*/main']],                   userRemoteConfigs: [[url: 'https://github.com/spring-projects/spring-petclinic.git']]               ])           }       }        stage(' Unit Testing') {           steps {               sh """               echo "Running Unit Tests"               """           }       }        stage('Code Analysis') {           steps {               sh """               echo "Running Code Analysis"               """           }       }        stage('Build Deploy Code') {           when {               branch 'develop'           }           steps {               sh """               echo "Building Artifact"               """                sh """               echo "Deploying Code"               """           }       }    }   }

設(shè)置Jenkins多分支管道

在這里,我將逐步引導(dǎo)您逐步在Jenkins上建立多分支管道。該設(shè)置將基于Github和最新的Jenkins  2.x版本。您還可以將Bitbucket或Gitlab用作多分支管道的SCM源。

步驟1:在Jenkins主頁(yè)上創(chuàng)建一個(gè)“新項(xiàng)目”。

如何使用Jenkins多分支管道

步驟2:從選項(xiàng)中選擇“多分支管道”,然后單擊“確定”。

如何使用Jenkins多分支管道

步驟3:點(diǎn)擊“添加來(lái)源”,然后選擇Github。

如何使用Jenkins多分支管道

步驟4:在認(rèn)證字段下,選擇Jenkins并使用您的Github用戶名和密碼創(chuàng)建一個(gè)認(rèn)證。

如何使用Jenkins多分支管道

步驟5:選擇創(chuàng)建的憑據(jù),然后提供您的Github存儲(chǔ)庫(kù)以驗(yàn)證憑據(jù),如下所示。

如果您正在測(cè)試多分支管道,則可以克隆演示Github存儲(chǔ)庫(kù)并使用它。https://github.com/devopscube/multibranch-pipeline-demo。

如何使用Jenkins多分支管道

第6步:選擇所需的選項(xiàng)以符合您的要求。您可以選擇發(fā)現(xiàn)存儲(chǔ)庫(kù)中的所有分支,也可以僅選擇具有“拉取請(qǐng)求”的分支。

管道還可以從分叉的倉(cāng)庫(kù)中發(fā)現(xiàn)具有PR的分支。

選擇這些選項(xiàng)取決于所需的工作流程。

如何使用Jenkins多分支管道

您可以從“添加”按鈕中選擇其他行為。

例如,如果選擇不從存儲(chǔ)庫(kù)中發(fā)現(xiàn)所有分支,則可以選擇正則表達(dá)式或通配符方法從存儲(chǔ)庫(kù)中發(fā)現(xiàn)分支,如下所示。

如何使用Jenkins多分支管道

這是一個(gè)正則表達(dá)式和通配符示例。

如何使用Jenkins多分支管道

步驟7:如果選擇為Jenkinsfile使用其他名稱,則可以通過(guò)在構(gòu)建配置中指定名稱來(lái)實(shí)現(xiàn)。在“腳本路徑”選項(xiàng)中,您可以提供所需的名稱。確保倉(cāng)庫(kù)中的Jenkinsfile與您在管道配置中提供的名稱相同。

另外,啟用“放棄舊版本”以僅保留所需的生成日志,如下所示。

如何使用Jenkins多分支管道

步驟8:保存所有作業(yè)配置。Jenkins掃描已配置的Github存儲(chǔ)庫(kù),以查找所有提升了PR的分支。

下圖顯示了掃描三個(gè)分支的作業(yè),并且由于我沒(méi)有提出任何拉取請(qǐng)求,Jenkins不會(huì)創(chuàng)建任何基于分支的管道。我將展示如何在設(shè)置Webhook之后測(cè)試自動(dòng)管道創(chuàng)建。

如何使用Jenkins多分支管道

到目前為止,我們已經(jīng)在Jenkins完成了配置,可以根據(jù)PR請(qǐng)求掃描分支。為了擁有完整的工作流程,我們需要在Github中配置一個(gè)Webhook,以將所有事件(提交,PR等)發(fā)送給Jenkins,因?yàn)榭梢宰詣?dòng)觸發(fā)管道。

為多分支管道配置Webhook

請(qǐng)按照以下步驟在存儲(chǔ)庫(kù)上設(shè)置Jenkins Webhook。

第1步:轉(zhuǎn)到Github存儲(chǔ)庫(kù),然后單擊設(shè)置。

如何使用Jenkins多分支管道

步驟2:選擇左側(cè)的webhook選項(xiàng),然后單擊“添加Webhook”按鈕。

如何使用Jenkins多分支管道

步驟3:在有效負(fù)載URL下添加您的Jenkins URL,后跟“ /github-webhook /”。選擇內(nèi)容類(lèi)型為“  application/json”,然后單擊“添加Webhook”

注意:您可以選擇要在Jenkins中接收的Webhook類(lèi)型。例如,您只想在PR期間觸發(fā)管道。然后,您可以從“讓我選擇單個(gè)事件”選項(xiàng)中僅選擇PR事件。

如何使用Jenkins多分支管道

您將在成功的 Webhook配置上看到一個(gè)綠色的勾號(hào) ,如下所示。

如何使用Jenkins多分支管道

如果您沒(méi)有看到綠色的勾號(hào)或警告標(biāo)志,請(qǐng)單擊Webhook鏈接,然后單擊最后一個(gè)Webhook。您應(yīng)該能夠使用狀態(tài)代碼查看為什么Webhook傳遞失敗。

如何使用Jenkins多分支管道

現(xiàn)在,我們完成了多分支管道的所有必需配置。下一步是測(cè)試多分支管道工作流觸發(fā)器。

測(cè)試多分支管道

出于演示目的,我選擇了“僅將分支作為PR的分支”選項(xiàng)。使用此選項(xiàng),僅發(fā)現(xiàn)具有PR請(qǐng)求的分支。

要使用多分支管道,可以將此回購(gòu)與示例Jenkinsfile一起使用。https://github.com/devopscube/multibranch-pipeline-demo

這個(gè)倉(cāng)庫(kù)有三個(gè)分支。更新功能分支中自述文件中的某些內(nèi)容,并提高PR以進(jìn)行開(kāi)發(fā)。它將向Jenkins發(fā)送一個(gè)Webhook,并且Jenkins將發(fā)送回Jenkins的工作詳細(xì)信息,并且PR將進(jìn)入檢查狀態(tài),如下所示。

如何使用Jenkins多分支管道

如果單擊“詳細(xì)信息”,它將帶您到Jenkins構(gòu)建日志。您可以在您的Jenkins文件中編寫(xiě)自定義檢查,以用于構(gòu)建審核。

現(xiàn)在,如果您選擇了Jenkins,您將在Jenkins中找到功能分支的管道,如下所示。

如何使用Jenkins多分支管道

如果構(gòu)建失敗,則可以將更改提交到功能分支,并且只要PR打開(kāi),它將觸發(fā)功能管線。

在Jenkinfile中,如果分支未開(kāi)發(fā),我添加了一個(gè)條件以跳過(guò)部署階段。您可以在Jenkins構(gòu)建日志中進(jìn)行檢查。另外,如果您在藍(lán)海儀表板中檢查構(gòu)建流程,則可以清楚地看到跳過(guò)的部署階段,如下所示。

如何使用Jenkins多分支管道

現(xiàn)在合并功能分支PR并將新的PR從development提升到master分支。

Jenkins將收到來(lái)自Github的Webhook,以獲取新的PR,并如下所示創(chuàng)建開(kāi)發(fā)管道。

如何使用Jenkins多分支管道

對(duì)于開(kāi)發(fā)分支,啟用了部署階段,如果您檢查了Blue Ocean的構(gòu)建流程,則可以看到所有階段都已成功觸發(fā)。

如何使用Jenkins多分支管道

對(duì)多分支管道進(jìn)行故障排除

我將討論在多分支管道中可能會(huì)遇到的一些錯(cuò)誤,以及如何解決這些錯(cuò)誤。

分支發(fā)現(xiàn)問(wèn)題

有時(shí),即使在SCM中創(chuàng)建了新分支之后,它也可能不會(huì)反映在Jenkins管道中。您可以嘗試運(yùn)行“立即掃描存儲(chǔ)庫(kù)”選項(xiàng)以再次掃描存儲(chǔ)庫(kù)。另外,檢查管道中的存儲(chǔ)庫(kù)掃描配置。

Webhooks 不會(huì)觸發(fā)管道

當(dāng)Webhook沒(méi)有觸發(fā)管道時(shí),請(qǐng)檢查Github中的Webhook交付狀態(tài)代碼和錯(cuò)誤。另外,請(qǐng)檢查Jenkins URL是否正確。

還要從Manage Jenkins-> System Logs-> All  Jenkins日志中檢查Jenkins日志。如果Jenkins能夠接收Webhook,則日志應(yīng)顯示未觸發(fā)作業(yè)的原因。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI