本申請(qǐng)涉及語言編譯,具體涉及一種基于容器的異架混合編譯方法及系統(tǒng)。
背景技術(shù):
1、在現(xiàn)代軟件開發(fā)中,跨架構(gòu)編譯是支持多平臺(tái)發(fā)布和兼容性的關(guān)鍵環(huán)節(jié)。為了適配不同硬件架構(gòu)的軟件需求,開發(fā)團(tuán)隊(duì)通常會(huì)選擇通過多臺(tái)不同架構(gòu)的機(jī)器進(jìn)行編譯,或者通過線下主機(jī)的編譯方式來完成相關(guān)任務(wù)。然而,這種跨架構(gòu)編譯的方式,由于多種技術(shù)限制,尚未能全面接入持續(xù)集成/持續(xù)交付(cicd)自動(dòng)化流程,這給開發(fā)與運(yùn)維帶來了許多挑戰(zhàn)。
2、盡管cicd流程在現(xiàn)代軟件開發(fā)中已經(jīng)得到了廣泛應(yīng)用,并且能夠極大地提高開發(fā)效率和發(fā)布頻率,但跨架構(gòu)編譯流程的自動(dòng)化集成仍然面臨許多挑戰(zhàn)。當(dāng)前,大多數(shù)cicd工具和平臺(tái)(如jenkins、gitlab?ci、circleci等)通常針對(duì)同一架構(gòu)的編譯優(yōu)化得比較成熟,能夠自動(dòng)化處理代碼的構(gòu)建、測(cè)試、部署等環(huán)節(jié)。然而,在多架構(gòu)的場(chǎng)景下,cicd流程的接入面臨以下技術(shù)難題:
3、(1)資源使用率低,當(dāng)環(huán)境沖突的情況下,一臺(tái)機(jī)器只能作為一個(gè)項(xiàng)目的編譯環(huán)境,造成了資源的極大浪費(fèi)。
4、(2)編譯環(huán)境不能完全隔離,存在安全性問題。
5、(3)每個(gè)項(xiàng)目編譯需要搭建相應(yīng)的編譯環(huán)境,整體效率低。
技術(shù)實(shí)現(xiàn)思路
1、為此,本申請(qǐng)?zhí)峁┮环N基于容器的異架混合編譯方法及系統(tǒng),以解決現(xiàn)有技術(shù)存在的跨架構(gòu)編譯存在資源浪費(fèi)、安全性低以及效率低的問題。
2、為了實(shí)現(xiàn)上述目的,本申請(qǐng)?zhí)峁┤缦录夹g(shù)方案:
3、第一方面,一種基于容器的異架混合編譯方法,預(yù)先將不同語言不同架構(gòu)的編譯環(huán)境輸出為不同語言的編譯鏡像,并內(nèi)置到cicd平臺(tái),所述基于容器的異架混合編譯方法應(yīng)用于cicd平臺(tái)中,包括:
4、接收用戶通過拖拽方式編排的編譯任務(wù);
5、將所述編譯任務(wù)通過pipeline服務(wù)下發(fā)至job-center服務(wù);
6、所述job-center根據(jù)所述編譯任務(wù)需求組裝tekton調(diào)度任務(wù)所需的task和taskrun并下發(fā)至tekton-agency,然后確定所述編譯任務(wù)需要運(yùn)行的調(diào)度機(jī)器的架構(gòu),根據(jù)確定的架構(gòu)設(shè)置相應(yīng)的nodeselector標(biāo)簽;所述tekton-agency接收組裝好的task和taskrun,并通過kubernetes?api?server生成task和taskrun在k8s集群中;kube-scheduler監(jiān)聽新的pod資源,并根據(jù)預(yù)選策略和優(yōu)選策略選擇最合適的node節(jié)點(diǎn)進(jìn)行調(diào)度,根據(jù)選定node節(jié)點(diǎn)上的kubelet接收調(diào)度指令,通過容器運(yùn)行時(shí)啟動(dòng)pod,并執(zhí)行編譯任務(wù)。
7、作為優(yōu)選,所述job-center根據(jù)所述編譯任務(wù)中的插件標(biāo)識(shí)確定所述編譯任務(wù)需要運(yùn)行的調(diào)度機(jī)器的架構(gòu)。
8、作為優(yōu)選,根據(jù)確定的架構(gòu)設(shè)置相應(yīng)的nodeselector標(biāo)簽,具體為:如果所述編譯任務(wù)需要在arm架構(gòu)的機(jī)器上運(yùn)行,則設(shè)置kubernetes.io/arch=arm64;如果所述編譯任務(wù)需要在x86架構(gòu)的機(jī)器上運(yùn)行,則設(shè)置kubernetes.io/arch=amd64。
9、作為優(yōu)選,所述job-center將task和taskrun下發(fā)至tekton-agency時(shí)攜帶callback回調(diào)地址。
10、作為優(yōu)選,所述kube-scheduler通過apiserver?watch?api監(jiān)聽新的pod資源。
11、作為優(yōu)選,所述新的pod資源是由tekton控制器調(diào)用kubernetes?api?server生成的。
12、作為優(yōu)選,所述新的pod資源是通過apiserver寫入到etcd中的。
13、作為優(yōu)選,所述根據(jù)預(yù)選策略和優(yōu)選策略選擇最合適的node節(jié)點(diǎn)進(jìn)行調(diào)度,具體為:kube-scheduler先根據(jù)預(yù)選策略過濾掉不滿足預(yù)先策略的nodes,然后根據(jù)優(yōu)先策略為通過預(yù)選的nodes進(jìn)行打分排名,并選擇得分最高的node作為最合適的node節(jié)點(diǎn)進(jìn)行調(diào)度。
14、作為優(yōu)選,所述為通過預(yù)選的nodes進(jìn)行打分排名時(shí)資源越富裕、負(fù)載越小的node具有越高的排名。
15、第二方面,一種基于容器的異架混合編譯系統(tǒng),包括:
16、編譯環(huán)境容器化模塊,用于預(yù)先將不同語言不同架構(gòu)的編譯環(huán)境輸出為不同語言的編譯鏡像,并內(nèi)置到cicd平臺(tái);
17、編譯任務(wù)接收模塊,用于接收用戶通過拖拽方式編排的編譯任務(wù);
18、任務(wù)下發(fā)模塊,用于將所述編譯任務(wù)通過pipeline服務(wù)下發(fā)至job-center服務(wù);
19、節(jié)點(diǎn)選擇與任務(wù)調(diào)度模塊,用于所述job-center根據(jù)所述編譯任務(wù)需求組裝tekton調(diào)度任務(wù)所需的task和taskrun并下發(fā)至tekton-agency,然后確定所述編譯任務(wù)需要運(yùn)行的調(diào)度機(jī)器的架構(gòu),根據(jù)確定的架構(gòu)設(shè)置相應(yīng)的nodeselector標(biāo)簽;所述tekton-agency接收組裝好的task和taskrun,并通過kubernetes?api?server生成task和taskrun在k8s集群中;kube-scheduler監(jiān)聽新的pod資源,并根據(jù)預(yù)選策略和優(yōu)選策略選擇最合適的node節(jié)點(diǎn)進(jìn)行調(diào)度,根據(jù)選定node節(jié)點(diǎn)上的kubelet接收調(diào)度指令,通過容器運(yùn)行時(shí)啟動(dòng)pod,并執(zhí)行編譯任務(wù)。
20、相比現(xiàn)有技術(shù),本申請(qǐng)至少具有以下有益效果:
21、本申請(qǐng)?zhí)峁┝艘环N基于容器的異架混合編譯方法及系統(tǒng),基于k8s集群以及容器的特性,同時(shí)結(jié)合開源調(diào)度工具tekton的能力,將各種語言的編輯環(huán)境,通過打鏡像的方式預(yù)設(shè),具體到任務(wù)下發(fā)時(shí),通過tekton?將任務(wù)調(diào)度到k8s的指定節(jié)點(diǎn)上,并在容器中完成編譯任務(wù),當(dāng)任務(wù)執(zhí)行完成,資源可以自動(dòng)釋放,解決了資源使用率低、編譯環(huán)境唯一性和不安全的問題,并提高了工作效率。
1.一種基于容器的異架混合編譯方法,其特征在于,預(yù)先將不同語言不同架構(gòu)的編譯環(huán)境輸出為不同語言的編譯鏡像,并內(nèi)置到cicd平臺(tái),所述基于容器的異架混合編譯方法應(yīng)用于cicd平臺(tái)中,包括:
2.根據(jù)權(quán)利要求1所述的基于容器的異架混合編譯方法,其特征在于,所述job-center根據(jù)所述編譯任務(wù)中的插件標(biāo)識(shí)確定所述編譯任務(wù)需要運(yùn)行的調(diào)度機(jī)器的架構(gòu)。
3.根據(jù)權(quán)利要求2所述的基于容器的異架混合編譯方法,其特征在于,根據(jù)確定的架構(gòu)設(shè)置相應(yīng)的nodeselector標(biāo)簽,具體為:如果所述編譯任務(wù)需要在arm架構(gòu)的機(jī)器上運(yùn)行,則設(shè)置kubernetes.io/arch=arm64;如果所述編譯任務(wù)需要在x86架構(gòu)的機(jī)器上運(yùn)行,則設(shè)置kubernetes.io/arch=amd64。
4.根據(jù)權(quán)利要求1所述的基于容器的異架混合編譯方法,其特征在于,所述job-center將task和taskrun下發(fā)至tekton-agency時(shí)攜帶callback回調(diào)地址。
5.根據(jù)權(quán)利要求1所述的基于容器的異架混合編譯方法,其特征在于,所述kube-scheduler通過apiserver?watch?api監(jiān)聽新的pod資源。
6.根據(jù)權(quán)利要求1所述的基于容器的異架混合編譯方法,其特征在于,所述新的pod資源是由tekton控制器調(diào)用kubernetes?api?server生成的。
7.根據(jù)權(quán)利要求1所述的基于容器的異架混合編譯方法,其特征在于,所述新的pod資源是通過apiserver寫入到etcd中的。
8.根據(jù)權(quán)利要求1所述的基于容器的異架混合編譯方法,其特征在于,所述根據(jù)預(yù)選策略和優(yōu)選策略選擇最合適的node節(jié)點(diǎn)進(jìn)行調(diào)度,具體為:kube-scheduler先根據(jù)預(yù)選策略過濾掉不滿足預(yù)先策略的nodes,然后根據(jù)優(yōu)先策略為通過預(yù)選的nodes進(jìn)行打分排名,并選擇得分最高的node作為最合適的node節(jié)點(diǎn)進(jìn)行調(diào)度。
9.根據(jù)權(quán)利要求8所述的基于容器的異架混合編譯方法,其特征在于,所述為通過預(yù)選的nodes進(jìn)行打分排名時(shí)資源越富裕、負(fù)載越小的node具有越高的排名。
10.一種基于容器的異架混合編譯系統(tǒng),其特征在于,包括: