新四季網

流水線生成方法、系統、設備及存儲介質與流程

2024-04-15 07:52:05



1.本發明實施例涉及計算機技術領域,具體涉及一種流水線生成方法、系統、設備及存儲介質。


背景技術:

2.持續集成(簡稱ci)和持續交付(簡稱cd)是將軟體從原始碼到軟體產品交付的整個過程。這個過程中涉及到原始碼靜態檢查,產品各階段的測試,產品版本管理,產品發布等環節。
3.jenkins是常用的持續集成工具,可以將ci和cd完全實現自動化,從代碼提交到最終發布中間的步驟串聯起來可以看成一條流水線,每個環節都自動完成,提高環節中各個崗位的工作效率和溝通效率,避免由於人為操作或人為幹預造成問題。且能夠保證每個環節的執行結果不被惡意篡改。通過編寫流水線腳本jenkinsfile的方式實現持續集成和持續交付過程中的流水線。
4.但相關技術中,通過jenkinsfile腳本指定項目運行環境時通常是使用jenkins上固定的pod(節點)配置內容,項目種類多時需要在jenkins上配置大量的pod,所有的pod配置是暴露在jenkins前端界面的,靈活性差,且一旦pod信息被人篡改則會直接導致流水線構建失敗。


技術實現要素:

5.鑑於以上所述現有技術的缺點,本發明實施例提供一種流水線生成方法、系統、設備及存儲介質,以解決上述技術問題。
6.本發明實施例提供的流水線生成方法,所述方法包括:
7.獲取目標項目的觸發請求信息,所述觸發請求信息包括觸發方式信息和所述目標項目的觸發項目標識信息;
8.根據所述觸發方式信息確定流水線模板;
9.根據所述觸發項目標識信息從預設項目資料庫中確定所述目標項目的項目預設信息;
10.基於所述項目預設信息從預設共享庫的預設工作容器庫中確定目標節點配置數據,以在集群環境中創建目標容器,所述目標容器用於運行流水線腳本;
11.從所述預設方法共享庫中確定所述流水線模板對應的目標方法,根據所述目標方法生成流水線腳本,以生成待生成流水線。
12.於本發明一實施例中,從所述預設方法共享庫中確定所述流水線模板對應的目標方法包括:
13.獲取所述預設方法共享庫中確定所述流水線模板對應的多個預設方法,以及各所述預設方法的方法標識和方法更新時間;
14.若存在至少兩個具有相同方法標識的所述預設方法,將所述方法更新時間與當前
時間最近的一個所述預設方法確定為目標方法。
15.於本發明一實施例中,根據所述觸發項目標識信息從預設項目資料庫中確定所述目標項目的項目預設信息之前,所述方法還包括:
16.獲取用戶通過看板系統寫入的寫入信息,基於所述寫入信息生成所述項目預設信息。
17.於本發明一實施例中,從所述預設方法共享庫中確定所述流水線模板對應的目標方法,根據所述目標方法生成所述待生成流水線的流水線腳本,以生成所述待生成流水線之後,所述方法還包括
18.通過所述目標容器運行所述流水線腳本;
19.當所述待生成流水線執行完成,釋放所述流水線腳本,並釋放所述目標容器。
20.於本發明一實施例中,根據所述觸發方式信息確定待生成流水線的流水線模板包括以下至少之一:
21.若所述觸發方式信息包括管理人員手動觸發,將所述流水線模板確定為產品構建流水線模板;
22.若所述觸發方式信息包括運維人員手動觸發,將所述流水線模板確定為軟體部署流水線模板;
23.若所述觸發方式信息包括定時觸發,將所述流水線模板確定為定時檢查流水線模板;
24.若所述觸發方式信息包括代碼合併請求觸發,將所述流水線模板確定為代碼合併檢查流水線模板;
25.若所述觸發項目標識信息為預設目標項目標識,將所述流水線模板確定為自定義流水線模板,並在所述預設項目資料庫中配置所述預設目標項目標識對應的自定義項目的項目自定義信息。
26.於本發明一實施例中,從所述預設共享庫中確定所述流水線模板對應的目標方法,根據所述目標方法生成流水線腳本,以生成待生成流水線之後,所述方法還包括:
27.再次獲取所述目標項目的新的觸發請求信息;
28.獲取所述目標方法的方法更新狀態;
29.若所述方法更新狀態為已更新,以更新後的更新方法替換所述目標方法,以生成新的所述待生成流水線。
30.本發明實施例提供的一種流水線生成系統,所述系統包括:
31.獲取模塊,用於獲取目標項目的觸發請求信息,所述觸發請求信息包括觸發方式信息和所述目標項目的觸發項目標識信息;
32.模板確定模塊,用於根據所述觸發方式信息確定流水線模板;
33.項目信息確定模塊,用於根據所述觸發項目標識信息從預設項目資料庫中確定所述目標項目的項目預設信息;
34.工作空間創建模塊,用於基於所述項目預設信息從預設共享庫的預設工作容器庫中確定目標節點配置數據,以在集群環境中創建目標容器,所述目標容器用於運行流水線腳本;
35.動態生成腳本模塊,用於從所述預設方法共享庫中確定所述流水線模板對應的目
標方法,根據所述目標方法生成流水線腳本,以生成待生成流水線。
36.於本發明一實施例中,所述系統還包括預設共享庫,所述預設共享庫包括預設工作容器庫,其中:
37.所述預設工作容器庫包括多個工作容器的預設配置數據,以供將至少一個所述預設配置數據確定為所述目標節點配置數據,以在集群環境中創建所述待生成流水線的目標容器,所述預設配置數據包括所述工作容器的依賴鏡像、空間大小、掛載到宿主機路徑。
38.於本發明一實施例中,所述系統還包括預設共享庫,所述預設共享庫還包括預設方法共享庫,所述預設方法共享庫包括資料庫接口、外圍系統接口庫、執行模塊庫、結果發布庫中至少之一,以提供所述目標方法。
39.於本發明一實施例中,所述系統還包括預設共享庫,所述預設共享庫還包括預設自定義庫,以供用戶輸入自定義方法內容。
40.本發明實施例提供的一種電子設備,所述電子設備包括:
41.一個或多個處理器;
42.存儲裝置,用於存儲一個或多個程序,當所述一個或多個程序被所述一個或多個處理器執行時,使得所述電子設備實現上述任一項實施例所述的流水線生成方法。
43.本發明實施例提供的一種計算機可讀存儲介質,其上存儲有電腦程式,當所述電腦程式被計算機的處理器執行時,使計算機執行上述任一項實施例所述的流水線生成方法。
44.本發明實施例的有益效果:本發明實施例中的流水線生成方法、系統、設備及存儲介質,該方法通過獲取目標項目的觸發請求信息,根據觸發方式信息確定流水線模板,根據觸發項目標識信息從預設項目資料庫中確定目標項目的項目預設信息,基於項目預設信息從預設共享庫的預設工作容器庫中確定目標節點配置數據,以在集群環境中創建目標容器,從預設方法共享庫中確定流水線模板對應的目標方法,根據目標方法生成流水線腳本,以生成待生成流水線,通過預設共享庫來對預設工作容器庫進行管理,能夠防止目標節點配置數據暴露在jenkins伺服器中被人篡改導致流水線構建失敗的風險,靈活性高。
45.應當理解的是,以上的一般描述和後文的細節描述僅是示例性和解釋性的,並不能限制本技術。
附圖說明
46.此處的附圖被併入說明書中並構成本說明書的一部分,示出了符合本技術的實施例,並與說明書一起用於解釋本技術的原理。顯而易見地,下面描述中的附圖僅僅是本技術的一些實施例,對於本領域普通技術者來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。在附圖中:
47.圖1為本技術一示例性實施例示出的系統架構圖;
48.圖2是本技術的一示例性實施例示出的流水線生成方法的流程圖;
49.圖3是本發明一示例性實施例示出的流水線動態生成時序圖;
50.圖4是本發明一示例性實施例示出的流水線業務流程圖;
51.圖5是本發明一示例性實施例示出的流水線動態生成流程圖;
52.圖6是本技術的一示例性實施例示出的流水線生成系統的框圖;
53.圖7示出了適於用來實現本技術實施例的電子設備的計算機系統的結構示意圖。
具體實施方式
54.以下將參照附圖和優選實施例來說明本發明的實施方式,本領域技術人員可由本說明書中所揭露的內容輕易地了解本發明的其他優點與功效。本發明還可以通過另外不同的具體實施方式加以實施或應用,本說明書中的各項細節也可以基於不同觀點與應用,在沒有背離本發明的精神下進行各種修飾或改變。應當理解,優選實施例僅為了說明本發明,而不是為了限制本發明的保護範圍。
55.需要說明的是,以下實施例中所提供的圖示僅以示意方式說明本發明的基本構想,遂圖式中僅顯示與本發明中有關的組件而非按照實際實施時的組件數目、形狀及尺寸繪製,其實際實施時各組件的型態、數量及比例可為一種隨意的改變,且其組件布局型態也可能更為複雜。
56.在下文描述中,探討了大量細節,以提供對本發明實施例的更透徹的解釋,然而,對本領域技術人員來說,可以在沒有這些具體細節的情況下實施本發明的實施例是顯而易見的,在其他實施例中,以方框圖的形式而不是以細節的形式來示出公知的結構和設備,以避免使本發明的實施例難以理解。
57.請參見圖1,圖1為本技術一示例性實施例示出的系統架構圖。如圖1所示,本技術實施例提供的方法可以支持多種業務域項目,如車雲域、座艙域、車控域、駕駛域、其他域等,每一個業務域可以包括一個或多個項目。可以通過預先設定的觸發方式實現該項目的流水線的觸發,基於不同的觸發方式信息所對應的觸發方式,可以確定相應的模板,模板通常包括代碼合併檢查流水線、定時檢查流水線、產品構建流水線、部署流水線,上述四種流水線模板包含了從代碼提交到交付的各個環節。但有時,上述四種流水線模板不能滿足某些特徵項目的需要,本實施例提供的系統架構還提供了自定義流水線模板(圖中的自定義流水線),這樣,用戶可以通過項目信息庫中配置指定環節來自定義流水線,滿足用戶的多樣需求。
58.在本實施例提供的方法中,所有的環節都被提取到共享庫(也即預設共享庫)中進行統一管理,按照執行的環節和項目的特徵調取共享庫中的目標方法(資料庫接口的方法、外圍系統接口庫的方法、執行模塊庫的方法以及結果發布庫的方法中至少之一,也即資料庫接口、外圍系統接口庫、執行模塊庫、結果發布庫,為流水提供了公共方法),可實現不同環節的具體執行內容。共享庫中的pod庫(節點庫,也即預設工作容器庫)用於對pod(節點,容器)進行統一管理。通過共享庫的方式對pod進行統一管理。避免pod配置內容暴露在jenkins伺服器上被人篡改。也能讓不同項目同時使用相同的pod內容。若共享庫中的方法無法滿足特殊項目的需求,則可編寫自定義方法庫(圖中的自定義庫),該項目動態生成腳本時從自定義庫中獲取指定的方法,最後實現腳本的動態生成。
59.持續集成(簡稱ci)和持續交付(簡稱cd)是將軟體從原始碼到軟體產品交付的整個過程。這個過程中涉及到原始碼靜態檢查,產品各階段的測試,產品版本管理,產品發布等環節。
60.jenkins是常用的持續集成工具,可以將ci和cd完全實現自動化,從代碼提交到最終發布中間的步驟串聯起來可以看成一條流水線,每個環節都自動完成,提高環節中各個
崗位的工作效率和溝通效率,避免由於人為操作或人為幹預造成問題。且能夠保證每個環節的執行結果不被惡意篡改。通過編寫流水線腳本jenkinsfile的方式實現持續集成和持續交付過程中的流水線。
61.發明人發現,相關技術中的方案至少存在以下問題:
62.1、項目和jenkinsfile腳本是一對一的關係,甚至是一對多的關係,即一個項目至少有一個流水線腳本,如果流水線的環節不同,則可能會存在一個項目需要維護多個流水線腳本。如果有成百上千個項目接入到jenkins中進行持續集成,則可能需要管理成百上千個jenkinsfile腳本文件。
63.2、如果同類型項目在持續集成和發布的過程中需要執行的環節相同,那麼jenkinsfile腳本文件可能存在大量的內容重複。
64.3、一旦外部通用服務接口發生變化,那麼所有涉及到通用接口的jenkinsfile腳本都需要進行修改,如果腳本已經部署到jenkins上,那麼需要修改後進行重新部署,存在維護困難且容易出錯的問題。
65.4、通過jenkinsfile腳本指定項目運行環境時通常是使用jenkins上固定的pod(節點)配置內容,項目種類多時需要在jenkins上配置大量的pod,所有的pod配置是暴露在jenkins前端界面的,靈活性差,且一旦pod信息被人篡改則會直接導致流水線構建失敗。
66.為解決上述問題,本技術的實施例分別提出一種流水線生成方法、一種流水線生成系統、一種電子設備、一種計算機可讀存儲介質以及一種電腦程式產品,以下將對這些實施例進行詳細描述。
67.請參閱圖2,圖2是本技術的一示例性實施例示出的流水線生成方法的流程圖。該方法可以通過圖1所示的系統架構所執行,也可以通過本領域技術人員所知曉的其他實施環境執行。如圖2所示,在一示例性的實施例中,該流水線生成方法至少包括步驟s201至步驟s205,詳細介紹如下:
68.步驟s201,獲取目標項目的觸發請求信息。
69.觸發請求信息包括觸發方式信息和目標項目的觸發項目標識信息。
70.目標項目為當前觸發流水線生成的項目,該目標項目可以為圖1中的業務域項目中的一個或多個項目,當存在多個項目時,則逐一對項目的流水線進行生成。
71.觸發項目標識信息表示該目標項目的身份信息,基於該身份信息可以便於後續在預設項目資料庫中確定得到該目標項目的項目預設信息。觸發項目標識信息可以為項目名稱等。
72.步驟s202,根據觸發方式信息確定流水線模板。
73.其中,觸發方式信息表徵流水線的觸發方式,觸發方式包括手動觸發和自動觸發,手動觸發又根據觸發人員的身份不同分為管理人員手動觸發和運維人員手動觸發,自動觸發分為定時觸發和代碼合併請求觸發。此外,還存在某些項目當前的模板並不能夠滿足需要的情形,本技術實施例還提供了若觸發項目標識信息為預設目標項目標識,將流水線模板確定為自定義流水線模板,並在預設項目資料庫中配置預設目標項目標識對應的自定義項目的項目自定義信息的方式,以實現自定義的流水香模板的補充。
74.在一個實施例中,根據觸發方式信息確定待生成流水線的流水線模板包括以下至少之一:
75.若觸發方式信息包括管理人員手動觸發,將流水線模板確定為產品構建流水線模板;
76.若觸發方式信息包括運維人員手動觸發,將流水線模板確定為軟體部署流水線模板;
77.若觸發方式信息包括定時觸發,將流水線模板確定為定時檢查流水線模板;
78.若觸發方式信息包括代碼合併請求觸發,將流水線模板確定為代碼合併檢查流水線模板;
79.若觸發項目標識信息為預設目標項目標識,將流水線模板確定為自定義流水線模板,並在預設項目資料庫中配置預設目標項目標識對應的自定義項目的項目自定義信息。
80.手動觸發的方式可以是通過預先設置的觸發控制項,如設置觸發按鈕,並將觸發按鈕顯示在人機互動界面,用戶(運維人員或管理人員)通過點擊、按壓等方式觸發該觸發按鈕,以這樣的方式生成觸發請求信息。
81.定時觸發的方式可以通過接收代碼倉庫周期性發送的代碼觸發請求,根據該代碼觸發請求周期性的觸發流水線任務。
82.例如,可以通過觸發器來觸發流水線,根據觸發器的觸發方式確定流水線的類型(也即確定流水線模板)。觸發可分為自動觸發和手動觸發兩種方式,代碼管理倉庫中由於合併請求導致的自動觸發會匹配上代碼合併檢查流水線;由於定時條件滿足導致的自動觸發會匹配上定時檢查流水線;軟體產品管理人員手動進行的觸發會匹配產品構建流水線;運維人員手動進行的觸發會匹配軟體部署流水線。
83.步驟s203,根據觸發項目標識信息從預設項目資料庫中確定目標項目的項目預設信息。
84.預設項目資料庫中預先設定有不同項目的項目預設信息。
85.在一實施例中,根據觸發項目標識信息從預設項目資料庫中確定目標項目的項目預設信息之前,該方法還包括:
86.獲取用戶通過看板系統寫入的寫入信息,基於寫入信息生成項目預設信息。
87.項目管理者通過看板系統(具有輸入裝置的設備)寫入所有項目的基本信息。流水線觸發後會自動從資料庫中獲取觸發項目的基本信息(也即項目預設信息),並將這些項目預設信息作為流水線中的環境變量,用於後續各個構建環節。
88.例如,將流水線的類型分成5類,也即預先設置五種流水線模板,包括代碼合併前的代碼質量檢查流水線、定時觸發檢查流水線、產品構建流水線和產品部署流水線,自定義流水線。前4個類型的流水線包含了從代碼提交到交付的所有環節,絕大多數項目可以通過這4種類型的流水線完成產品交付。每種類型根據其目的的不同,定義了不同執行環節。例如合併前代碼質量檢查流水線包含代碼靜態掃描,單元測試,與看板系統交互等環節,只有代碼質量檢查合格才能被允許合入代碼倉庫的發布分支。定時檢查流水線包含構建、單元測試、測試環境部署、接口測試、測試環境恢復等環節。產品構建流水線包含軟體構建,軟體產品上傳等環節,合格的軟體產品才能被上傳到統一的管理平臺進行版本管理,也為後續的部署提供軟體基礎。部署流水線包含代碼靜態檢查和軟體部署等環節,從軟體產品的管理平臺選擇定版後的產品部署到生產環境。4類通用的流水線模板無法滿足某些特殊項目,則可使用自定義流水線模板,通過在項目信息庫中配置指定環節來自定義流水線。
89.需要說明的是,上述步驟s202根據觸發方式信息確定流水線模板和步驟s203根據觸發項目標識信息從預設項目資料庫中確定目標項目的項目預設信息的執行步驟的順序並不做限定,本領域技術人員可以根據需要依次執行步驟s202根據觸發方式信息確定流水線模板和步驟s203根據觸發項目標識信息從預設項目資料庫中確定目標項目的項目預設信息,或者先執行步驟s203根據觸發項目標識信息從預設項目資料庫中確定目標項目的項目預設信息,再執行步驟s202根據觸發方式信息確定流水線模板,又或者可以同時執行步驟s203根據觸發項目標識信息從預設項目資料庫中確定目標項目的項目預設信息和步驟s202根據觸發方式信息確定流水線模板。
90.步驟s204,基於項目預設信息從預設共享庫的預設工作容器庫中確定目標節點配置數據,以在集群環境中創建待生成流水線的目標容器。
91.其中,該目標容器用於運行流水線腳本。該預設共享庫中包含了對pod庫(預設工作容器庫)的管理,防止pod配置信息(目標節點配置數據)暴露在jenkins伺服器中被人篡改導致流水線構建失敗的風險。
92.基於項目基本信息(項目預設信息),從預設共享庫中的pod庫(預設工作容器庫)獲取指定的節點配置(目標節點配置數據),並根據這些配置數據在kubernetes集群環境中自動創建流水線的工作容器,也即目標容器。
93.共享庫中的pod庫(預設工作容器庫)用於對pod進行統一管理。每次執行流水線時都會在kubernetes集群中動態創建一個容器作為流水線的工作空間。pod庫中以yaml的形式存放了不同的pod配置,配置中指定依賴的鏡像、動態創建容器的空間大小、掛載到宿主機路徑等等。流水線觸發後從pod庫中選取匹配的pod配置文件來創建工作空間。通過共享庫的方式對pod進行統一管理。避免pod配置內容暴露在jenkins伺服器上被人篡改。也能讓不同項目同時使用相同的pod內容。
94.步驟s205,從預設方法共享庫中確定流水線模板對應的目標方法,根據目標方法生成流水線腳本,以生成待生成流水線。
95.在一實施例中,從預設方法共享庫中確定流水線模板對應的目標方法包括:
96.獲取預設方法共享庫中確定流水線模板對應的多個預設方法,以及各預設方法的方法標識和方法更新時間;
97.若存在至少兩個具有相同方法標識的預設方法,將方法更新時間與當前時間最近的一個預設方法確定為目標方法。
98.在一實施例中,從預設共享庫中確定流水線模板對應的目標方法,根據目標方法生成流水線腳本,以生成待生成流水線之後,該方法還包括:
99.再次獲取目標項目的新的觸發請求信息;
100.獲取目標方法的方法更新狀態,方法更新狀態可以通過該方法的配置文件的更新時間來確定,若存在至少兩個更新時間,且距離當前時間最近的更新時間晚於該方法的最後一次執行時間,則該目標方法的方法更新狀態為已更新,否則為未更新;
101.若方法更新狀態為已更新,以更新後的更新方法替換目標方法,以生成新的待生成流水線。
102.通過上述方式,一旦需要對方法進行新增或更新,不需要重新定義流水線,只需要在流水線執行過程中拉取最新的方法作為目標方法即可。
103.其中,可以根據流水線類型(流水線模板)確定需要執行的環節,根據從預設項目資料庫中獲取到的預設項目信息,調用執行模塊庫中的方法。若預設共享庫中的方法無法滿足特殊項目的需求,則可編寫自定義方法庫,該項目動態生成腳本時從自定義庫中獲取指定的方法,最後實現腳本的動態生成。jenkins根據jenkinsfile腳本完成各環節的任務。
104.在一個實施例中,該方法還包括:
105.並按照流水線中預先定義的評判標準判斷軟體代碼是否存在問題,根據流水線各環節執行的結果進行最終結果的發布。
106.在一個實施例中,從預設方法共享庫中確定流水線模板對應的目標方法,根據目標方法生成待生成流水線的流水線腳本,以生成待生成流水線之後,方法還包括
107.通過目標容器運行流水線腳本;
108.當待生成流水線執行完成,釋放流水線腳本,並釋放目標容器。
109.通過在流水線完成之後流水線腳本被及時釋放,節約維護腳本成本,降低由於jenkinsfile腳本問題導致軟體持續集成和持續發布失敗的問題。
110.jenkins結合kubernetes集群的方式,在執行流水線時可根據jenkinsfile腳本文件中編寫的條件動態創建工作空間(目標容器),執行過程中可實現動態伸縮,執行完流水線後釋放工作空間(目標容器),不額外佔用主機資源,能夠提高伺服器利用率,也能夠有效防止原始碼洩漏。
111.上述實施例提供的方法,所有的環節都被提取到預設共享庫中進行統一管理,按照執行的環節和項目的特徵調取共享庫中的方法,可實現不同環節的具體執行內容。共享庫中的執行模塊庫可適配不同類型的項目,例如執行編譯環節時,共享庫中包含了適用於不同編碼語言的編譯指令,根據從項目信息庫中獲取到的項目編碼語言,調取相應的執行編譯模塊。執行代碼單元測試環節時,不同項目使用的測試框架不同,涉安項目和非涉安項目使用的單元測試也完全不同,本實施例中的共享庫的執行模塊庫中囊括了超過7種單元測試方法。執行部署環節,根據項目類型不同共享庫中的執行模塊可執行雲端項目的部署、上下位機項目的部署、作業系統部署等等。除了多元的執行模塊庫外,為實現多業務融合,此外,還提供了自定義執行庫的接口,使用者可隨時添加自定義方法。
112.例如,可以通過資料庫接口、外圍系統接口庫、執行模塊庫、結果發布庫等中至少之一為流水線提供了公共方法,執行流水線時,按照不同流水線類型(流水線模板)去共享庫中動態獲取需要訪問的外部接口等信息。如果外部接口有變更,只需要修改共享庫接口庫的內容,再次執行流水線時,動態生成的流水線會自動獲取最新的接口方法。例如流水線與看板系統交互的接口發生變化,既有的接口參數只有流水線最後的執行結果,但新的看板系統接口參數不僅包含最後執行結果,也需要包含各個環節的執行結果,那麼只需修改一個接口庫內容則可適用到所有項目中。所有項目使用和維護一套共享庫,項目和jenkinsfile腳本成了n對一的關係,大大降低了jenkinsfile腳本文件的維護成本,也極大程度上降低了腳本出錯機率。
113.在一實施例中,從預設方法共享庫中確定流水線模板對應的目標方法,根據目標方法生成流水線腳本包括:
114.獲取流水線模板的模板內容,其中模板內容包括編譯、單元測試、掃描、自動化測試、部署中至少之一;
115.根據所述模板內容確定目標方法,其中目標方法包括編譯方法、單元測試方法、掃描方法、自動化測試方法、部署方法中至少之一。
116.在一實施例中,獲取流水線模板的模板內容之前,該方法還包括:
117.獲取自定義方法狀態,若存在自定義方法,則獲取自定義方法。
118.通過上述方式可以實現流水線的動態生成。
119.下面通過一個示例性的使用場景對本發明實施例提供的流水線生成方法進行示例性的說明。汽車領域內項目包括座艙相關項目,雲端服務相關項目,智能控制相關項目等。座艙域內某一項目是gradle項目,使用sonar工具進行掃描,執行單元測試時需要將編譯生成的apk推送到車機上,結合外部接口進行測試,也需要在車機上進行接口或者ui測試,生成的最終產物是apk。雲端域內某一項目是maven項目,使用sonar工具掃描,該項目發布的時候需要將編譯後生成jar包並打包到docker裡進行docker發布。智控域內某一項目是matlab項目,使用polyspace掃描工具,使用matlab的單元測試工具。智控域內某一項目是c語言編程的項目,使用cppcheck掃描工具,使用cmake工具進行編譯,使用gtest工具進行單元測試,生成的二進位文件作為最終產物需要部署到車機中。採用本實施例提供的方法需要適配多元化的業務類型,以滿足不用項目的需求。在項目信息資料庫中每個項目都會有相應的項目類型,掃描工具,單元測試工具,產物類型等信息。本實施例提供的方法可根據這些信息從共享庫中提取出針對不同項目的執行方法。並將這些方法按照jenkins腳本的規則動態組裝成流水線腳本。
120.下面再通過另一個示例性的使用場景對本發明實施例提供的流水線生成方法進行示例性的說明。目前接入到jenkins上包含各業務域的一百多個項目,由於項目所處的階段不同和目的不同,一個項目對應多條流水線,因此目前jenkins上存在三百多條流水線。流水線執行的所有信息需要上傳到看板系統進行展示,因此所有流水線都會調用看板系統的接口,並向接口傳送指定參數。由於業務域需求變更,流水線向看板系統傳送的參數也需求變更。傳統的方式將流水線腳本以自動化或非自動話生成之後分別部署到項目流水線中。如果要變更傳統方式腳本,需要將所有流水線的腳本搜集起來,變更三百多個腳本中與看板系統通信的接口內容,再將變更後的腳本重新部署到jenkins。本實施例的方法使用共享庫集中管理,且動態生成腳本的方式。只需要在共享庫中變更與看板系統通信的接口內容,不需要對某個具體的流水線進行改變。流水線再次執行時,動態拉取共享庫中最新的接口方法,實現執行方法的實時更新。
121.參見圖3,圖3是本發明一示例性實施例示出的流水線動態生成時序圖,如圖3所示,通過觸發器來觸發流水線,持續集成工具jenkins接收到觸發器發送的觸發請求信息,基於觸發請求的觸發方式來確定流水線類型,也即從模板庫中確定流水線模板,基於觸發項目標識信息從預設項目資料庫(也即圖中的項目資料庫)中確定項目預設信息,通過jenkins發送獲取項目信息消息到項目資料庫,接收項目資料庫返回的項目信息(項目預設信息)實現。項目資料庫基於項目預設信息從預設共享庫的預設工作容器庫(也即圖中的pod庫)中獲取工作空間信息(目標節點配置數據),通過項目資料庫發送獲取工作空間信息給pod庫,接收pod庫返回的工作空間信息實現,該返回工作空間信息中就包括目標節點配置數據。基於該目標節點配置數據創建目標容器,也即圖中的創建流水線工作空間。從自定義庫和預設方法共享庫中至少之一獲取共享方法(目標方法),該目標方法可以是通過自定
義庫自定義的方法,也可以是預設方法共享庫中現有的方法,基於上述目標方法動態生成腳本(流水線腳本),得到待生成流水線。執行該流水線腳本,並在執行完成後釋放該流水線腳本和上述配置好的目標容器。
122.參見圖4,圖4是本發明一示例性實施例示出的流水線業務流程圖,如圖4所示,可以通過運維人員/管理人員進行手動觸發圖示觸發器,也可以通過研發人員對代碼倉庫的代碼合併請求觸發圖示觸發器,還可以通過預先設定的定時器timer對圖示觸發器進行觸發,得到觸發請求信息,以觸發流水線,將該觸發請求消息傳輸給jenkins流水線,基於目標項目的觸發項目標識信息從資料庫(也即預設項目資料庫)中獲取項目信息(也即項目預設信息),其中資料庫中的項目信息可以是預先通過看板系統寫入的項目信息。在流水線執行過程中動態創建運行環境(確定目標容器),從共享庫(預設共享庫)中確定目標方法,目標方法的類型包括但不限於拉取代碼、編譯、掃描、單元測試、自動化測試、打包、部署等,基於該目標方法生成流水線腳本,執行流水線指令,並生成執行結果,將該執行結果通知給到相關人員,相關人員包括但不限於運維人員、管理人員、研發人員中至少之一,可以根據觸發方式確定相關人員。在執行完成後,釋放空間(目標容器)和流水線腳本。
123.參見圖5,圖5是本發明一示例性實施例示出的流水線動態生成流程圖,如圖5所示,首先根據流水線jobname獲取項目名(觸發項目標識信息),基於該項目名獲取項目信息(項目預設信息),首先判斷是否存在自定義方法,若有則獲取自定義內容(自定義方法),否則,獲取與外部系統接口,判斷是否執行編譯,若是,獲取編譯方法,若否判斷是否執行單元測試,若是,獲取單元測試方法,若否判斷是否掃描,若是則獲取掃描方法,若否判斷是否自動化測試,若是則獲取自動化測試方法,若否則判斷是否部署,若是則獲取是否部署方法,若是則動態生成流水線腳本,將該流水線腳本部署到對應的流水線中,完成流水線的動態生成。
124.上述實施例提供的流水線生成方法,通過獲取目標項目的觸發請求信息,根據觸發方式信息確定流水線模板,根據觸發項目標識信息從預設項目資料庫中確定目標項目的項目預設信息,基於項目預設信息從預設共享庫的預設工作容器庫中確定目標節點配置數據,以在集群環境中創建目標容器,從預設方法共享庫中確定流水線模板對應的目標方法,根據目標方法生成流水線腳本,以生成待生成流水線,通過預設共享庫來對預設工作容器庫進行管理,能夠防止目標節點配置數據暴露在jenkins伺服器中被人篡改導致流水線構建失敗的風險,靈活性高。
125.上述實施例提供的流水線生成方法能夠適配多種業務,其生成過程可以為動態的過程,旨在對所有項目的jenkinsfile腳本文件進行統一處理和管理,每次執行流水線工作的時候動態生成完成的流水線腳本,增加腳本的可維護性。降低由於jenkins上配置信息被篡改導致jenkinsfile腳本不能使用的風險。
126.通過將流水線模板歸納為5個大類,其中一個是自定義流水線,總的來說只有4個jenkinsfile腳本文件框架為成百上千個項目服務。當生成一個流水線後,當獲取到新的新增項目的觸發消息,若觸發方式與該流水線生成時的觸發方式相同,則此時該新增項目對應的新增流水線模塊與之前生成的流水線的模板相同,此時,可以直接復用該流水線的流水線腳本執行該新增項目,實現一個流水線腳本服務多個項目。
127.通過對jenkinsfile腳本的各執行環節進行抽象管理,把接入到jenkins中的項目
的所有執行環節整合成一套並按照框架形式進行管理,共享庫中存放多種編譯方法,多種掃描方法,多種部署方法等等,能適配不同編碼方式和不同類型的業務。
128.通過使用動態生成腳本的方式,在執行流水線時動態生成腳本,保證流水線中執行的方法是實時獲取到共享庫中的最新方法,且流水線完成之後腳本被及時釋放,節約維護腳本成本,降低由於jenkinsfile腳本問題導致軟體持續集成和持續發布失敗的問題。
129.通過構建共享庫,且該共享庫中包含了對pod庫的管理,防止pod配置信息暴露在jenkins伺服器中被人篡改導致流水線構建失敗的風險。
130.圖6是本技術的一示例性實施例示出的流水線生成系統的框圖。如圖6所示,該示例性的流水線生成系統600包括:
131.獲取模塊601,用於獲取目標項目的觸發請求信息,觸發請求信息包括觸發方式信息和目標項目的觸發項目標識信息;
132.模板確定模塊602,用於根據觸發方式信息確定流水線模板;
133.項目信息確定模塊603,用於根據觸發項目標識信息從預設項目資料庫中確定目標項目的項目預設信息;
134.工作空間創建模塊604,用於基於項目預設信息從預設共享庫的預設工作容器庫中確定目標節點配置數據,以在集群環境中創建目標容器,目標容器用於運行流水線腳本;
135.動態生成腳本模塊605,用於從預設方法共享庫中確定流水線模板對應的目標方法,根據目標方法生成流水線腳本,以生成待生成流水線。
136.在一實施例中,該系統還包括預設共享庫,預設共享庫包括預設工作容器庫,其中:
137.預設工作容器庫包括多個工作容器的預設配置數據,以供將至少一個預設配置數據確定為目標節點配置數據,以在集群環境中創建待生成流水線的目標容器,預設配置數據包括工作容器的依賴鏡像、空間大小、掛載到宿主機路徑。
138.在一實施例中,該該系統還包括預設共享庫,預設共享庫還包括預設方法共享庫,預設方法共享庫包括資料庫接口、外圍系統接口庫、執行模塊庫、結果發布庫中至少之一,以提供目標方法。
139.在一實施例中,該系統還包括預設共享庫,預設共享庫還包括預設自定義庫,以供用戶輸入自定義方法內容。
140.需要說明的是,上述實施例所提供的流水線生成系統與上述實施例圖2所提供的流水線生成方法屬於同一構思,其中各個模塊和單元執行操作的具體方式已經在方法實施例中進行了詳細描述,此處不再贅述。上述實施例所提供的流水線生成系統在實際應用中,可以根據需要而將上述功能分配由不同的功能模塊完成,即將裝置的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能,本處也不對此進行限制。
141.本技術的實施例還提供了一種電子設備,包括:一個或多個處理器;存儲裝置,用於存儲一個或多個程序,當所述一個或多個程序被所述一個或多個處理器執行時,使得所述電子設備實現上述各個實施例中提供的流水線生成方法。
142.圖7示出了適於用來實現本技術實施例的電子設備的計算機系統的結構示意圖。需要說明的是,圖7示出的電子設備的計算機系統1100僅是一個示例,不應對本技術實施例的功能和使用範圍帶來任何限制。
143.如圖7所示,計算機系統1100包括中央處理單元(central processing unit,cpu)1101,其可以根據存儲在只讀存儲器(read-only memory,rom)1102中的程序或者從儲存部分1108加載到隨機訪問存儲器(random access memory,ram)1103中的程序而執行各種適當的動作和處理,例如執行上述實施例中所述的方法。在ram1103中,還存儲有系統操作所需的各種程序和數據。cpu 1101、rom 1102以及ram1103通過總線1104彼此相連。輸入/輸出(input/output,i/o)接口1105也連接至總線1104。
144.以下部件連接至i/o接口1105:包括鍵盤、滑鼠等的輸入部分1106;包括諸如陰極射線管(cathode ray tube,crt)、液晶顯示器(liquid crystal display,lcd)等以及揚聲器等的輸出部分1107;包括硬碟等的儲存部分1108;以及包括諸如lan(local area network,區域網)卡、數據機等的網絡接口卡的通信部分1109。通信部分1109經由諸如網際網路的網絡執行通信處理。驅動器1110也根據需要連接至i/o接口1105。可拆卸介質1111,諸如磁碟、光碟、磁光碟、半導體存儲器等等,根據需要安裝在驅動器1110上,以便於從其上讀出的電腦程式根據需要被安裝入儲存部分1108。
145.特別地,根據本技術的實施例,上文參考流程圖描述的過程可以被實現為計算機軟體程序。例如,本技術的實施例包括一種電腦程式產品,其包括承載在計算機可讀介質上的電腦程式,該電腦程式包含用於執行流程圖所示的方法的電腦程式。在這樣的實施例中,該電腦程式可以通過通信部分1109從網絡上被下載和安裝,和/或從可拆卸介質1111被安裝。在該電腦程式被中央處理單元(cpu)1101執行時,執行本技術的系統中限定的各種功能。
146.需要說明的是,本技術實施例所示的計算機可讀介質可以是計算機可讀信號介質或者計算機可讀存儲介質或者是上述兩者的任意組合。計算機可讀存儲介質例如可以是電、磁、光、電磁、紅外線、或半導體的系統、裝置或器件,或者任意以上的組合。計算機可讀存儲介質的更具體的例子可以包括但不限於:具有一個或多個導線的電連接、可攜式計算機磁碟、硬碟、隨機訪問存儲器(ram)、只讀存儲器(rom)、可擦式可編程只讀存儲器(erasable programmable read only memory,eprom)、快閃記憶體、光纖、可攜式緊湊磁碟只讀存儲器(compact disc read-only memory,cd-rom)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本技術中,計算機可讀的信號介質可以包括在基帶中或者作為載波一部分傳播的數據信號,其中承載了計算機可讀的電腦程式。這種傳播的數據信號可以採用多種形式,包括但不限於電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質還可以是計算機可讀存儲介質以外的任何計算機可讀介質,該計算機可讀介質可以發送、傳播或者傳輸用於由指令執行系統、裝置或者器件使用或者與其結合使用的程序。計算機可讀介質上包含的電腦程式可以用任何適當的介質傳輸,包括但不限於:無線、有線等等,或者上述的任意合適的組合。
147.附圖中的流程圖和框圖,圖示了按照本技術各種實施例的系統、方法和電腦程式產品的可能實現的體系架構、功能和操作。其中,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,上述模塊、程序段、或代碼的一部分包含一個或多個用於實現規定的邏輯功能的可執行指令。也應當注意,在有些作為替換的實現中,方框中所標註的功能也可以以不同於附圖中所標註的順序發生。例如,兩個接連地表示的方框實際上可以基本並行地執行,它們有時也可以按相反的順序執行,這依所涉及的功能而定。也要注意
的是,框圖或流程圖中的每個方框、以及框圖或流程圖中的方框的組合,可以用執行規定的功能或操作的專用的基於硬體的系統來實現,或者可以用專用硬體與計算機指令的組合來實現。
148.描述於本技術實施例中所涉及到的單元可以通過軟體的方式實現,也可以通過硬體的方式來實現,所描述的單元也可以設置在處理器中。其中,這些單元的名稱在某種情況下並不構成對該單元本身的限定。
149.本技術的另一方面還提供了一種計算機可讀存儲介質,其上存儲有電腦程式,該電腦程式被計算機的處理器執行時,使計算機執行如前所述的流水線生成方法。該計算機可讀存儲介質可以是上述實施例中描述的電子設備中所包含的,也可以是單獨存在,而未裝配入該電子設備中。
150.本技術的另一方面還提供了一種電腦程式產品或電腦程式,該電腦程式產品或電腦程式包括計算機指令,該計算機指令存儲在計算機可讀存儲介質中。計算機設備的處理器從計算機可讀存儲介質讀取該計算機指令,處理器執行該計算機指令,使得該計算機設備執行上述各個實施例中提供的流水線生成方法。
151.上述實施例僅示例性說明本發明的原理及其功效,而非用於限制本發明。任何熟悉此技術的人士皆可在不違背本發明的精神及範疇下,對上述實施例進行修飾或改變。因此,但凡所屬技術領域中具有通常知識者在未脫離本發明所揭示的精神與技術思想下所完成的一切等效修飾或改變,仍應由本發明的權利要求所涵蓋。
152.需要說明的是,本技術中,「第一」、「第二」等僅為對相似對象的區分,並非是對相似對象的順序限定或先後次序限定。所描述的「包括」、「具有」等變形,表示該詞語的主語所涵蓋的範圍除該詞語所示出的示例外,並不排他。
153.可以理解的是,在本技術中記載的各種數字編號、步序編號等標號為描述方便進行的區分,並不用來限制本技術的範圍。本技術標號的大小並不意味著執行順序的先後,各過程的執行順序應以其功能和內在邏輯確定。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀