咱們爲何要使用 git參數呢? 每一個項目代碼庫都會有不一樣的分支,(若是你沒有用多分支流水線的狀況下)對於普通的流水線項目咱們能夠 讓一條流水線來支持多個分支的發佈,其實有時候你會發現每一個分支的集成步驟都是差很少的。若是出現差別步驟咱們也能夠在jenkinsfile中根據不一樣的分支執行不一樣的stage。node
如何解決固定分支問題? 起初咱們的流水線項目配置分支多是採用的選項參數。 建立一個選項參數而後把項目常常用到的分支給更新上去,最後開發人員在發佈的時候來選擇對應的分支。看似解決了固定分支問題,可是後期維護起來很是困難,須要不斷的更改參數值。 git
建立一個字符參數設置一個默認值,而後 交給開發人員本身填寫。這樣的確方便了配置管理人員,給開發人員增長了負擔,手動輸入避免不了帶來了錯誤發生的可能。 異步
咱們來經過下面的內容,掌握如何使用 git參數實現動態分支構建呢?maven
當你的項目尚未使用pipeline,能夠參考如下的配置來使用git參數。固然若是你在調試pipeline項目的時候使用git參數常常出現問題的話,也能夠看下在freestyle項目中如何使用,瞭解git參數的工做原理。ide
咱們在項目的配置中,勾選參數化構建。而後添加git參數。選擇變量名稱和參數類型。工具
而後鼠標滾動到下面,填寫項目代碼庫的信息。gitlab
最後保存配置,回到做業首頁,咱們點擊項目的參數化構建。此時你會看到項目代碼庫對應的全部分支已經出現了,咱們能夠選擇分支並構建了。測試
這裏把普通的pipeline項目定義爲 未將Jenkinsfile內容保存在版本控制系統中,而是存儲在該JOB中。ui
首先咱們添加一個srcUrl
參數定義項目代碼庫的地址,便於後期在pipeline中調用。url
而後添加git參數branchName
,定義爲分支類型。
編寫Jenkinsfile
//pipeline pipeline{ agent { node { label "build"}} stages{ stage("CheckOut"){ steps{ script{ println("${branchName}") checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gitlab-admin-user', url: "${srcUrl}"]]]) } } } } }
而後保存配置,回到做業首頁。構建一次,而後就可以獲取到項目代碼庫的分支了。
對於將jenkinsfile保存在做業中,這種方式有利有弊,好處是能夠方便咱們進行代碼調試,壞處是不利於統一管理。你們酌情使用。
這裏流行的Pipeline項目咱們理解爲 此job使用的jenkinsfile文件存儲在git版本控制系統中。
首先咱們建立一個測試jenkinsfile,保存在git項目中,命名爲git.jenkinsfile。此文件內容與上面那種方式是同樣的,只不過將jenkinsfile歸入了版本控制。
//pipeline pipeline{ agent { node { label "build"}} stages{ stage("CheckOut"){ steps{ script{ println("${branchName}") checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gitlab-admin-user', url: "${srcUrl}"]]]) } } } } }
而後咱們來建立一個新的流水線項目。注意狀況咱們 如今用到了兩個倉庫,一個是Jenkinsfile倉庫,另外一個是 項目代碼倉庫。 建立一個參數srcUrl
用於存儲項目 代碼倉庫的URL。
默認git參數會識別到Jenkinsfile的倉庫,因此咱們須要在git參數的高級設置中指定咱們要使用的倉庫地址。 80%錯誤由於沒有指定倉庫致使獲取分支錯誤等問題。
填寫Jenkinsfile倉庫信息。
最後咱們來構建一次就可以獲取到項目代碼倉庫的分支信息了。這裏常常出現獲取 分支的問題,請仔細參考上面的步驟必定要在git參數中指定好咱們要用的倉庫,不然會出現分支獲取失敗等問題。
咱們將參數信息所有放到Jenkinsfile中存儲。此時生成的代碼就不區分在做業中保存仍是在版本控制系統中保存了。 不過仍是建議你們把jenkinsfile歸入版本控制系統中保存。
咱們如何生成Jenkinsfile代碼? 很方便的工具,咱們導航到 流水線語法-> Declarative Directive Generator 。
最後完整的Jenkinsfile以下所示:
//pipeline pipeline{ agent { node { label "build"}} parameters { string defaultValue: 'http://192.168.1.200:30088/idevops/idevops-maven-service.git', description: '', name: 'srcUrl', trim: false gitParameter branch: '', branchFilter: '.*', defaultValue: 'origin/master', description: '', name: 'branchName', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH', useRepository: 'http://192.168.1.200:30088/idevops/idevops-maven-service.git' } stages{ stage("CheckOut"){ steps{ script{ println("${branchName}") checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gitlab-admin-user', url: "${srcUrl}"]]]) } } } } }
一樣的配置過程,咱們構建 一次以後就可以 正常獲取到項目代碼庫的分支信息了。
你是否是在使用git參數時也遇到了相同的問題呢? 此文章可以 幫助到你們避免問題的出現。這個git參數仍是有些不方便的。隨着內部devops平臺的功能擴展,目前發佈都是經過 devops平臺中來完成參數的選擇,最後生成一個Jenkins做業來運行。 這種狀況下選擇分支和標籤就放在了外圍的devops平臺中了,這樣jenkins的參數使用什麼類型都無所謂了。