日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
在Kubernetes上實踐Jenkins

Jenkins 是由 Java 編寫的編排引擎,在 Full GC 時會 Stop The World(STW)。在大規(guī)模構(gòu)建時,STW 可能會導致 Jenkins 無法處理新的請求。

創(chuàng)新互聯(lián)公司一直在為企業(yè)提供服務(wù),多年的磨煉,使我們在創(chuàng)意設(shè)計,網(wǎng)絡(luò)營銷推廣到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗。我們擅長傾聽企業(yè)需求,挖掘用戶對產(chǎn)品需求服務(wù)價值,為企業(yè)制作有用的創(chuàng)意設(shè)計體驗。核心團隊擁有超過十年以上行業(yè)經(jīng)驗,涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)服務(wù)器托管機柜、成都app軟件開發(fā)、手機移動建站、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)整合營銷。

配置較大的 -Xms -Xmx 參數(shù)

Jenkins 是由 Java 編寫的編排引擎,在 Full GC 時會 Stop The World(STW)。在大規(guī)模構(gòu)建時,STW 可能會導致 Jenkins 無法處理新的請求。

為了避免頻繁的 STW,同時增大并發(fā)量,建議設(shè)置較大的堆,-Xms3g -Xmx6g -XX:MaxRAM=6g。具體數(shù)值可以根據(jù)監(jiān)控值來設(shè)置,Java Full GC 之后,內(nèi)存占用會陡降。

request 不要設(shè)置太小

request 設(shè)置太小,可能會導致 Jenkins 運行起來之后,節(jié)點資源不足,引發(fā)驅(qū)逐,甚至壓垮節(jié)點。

request 應(yīng)該接近真實值,如果有足夠的機器資源,應(yīng)該配置親和性,讓 Jenkins 盡可能運行在單獨的機器上。request >= 1.25 * JVM 最大堆內(nèi)存,limit >= 2 * JVM 最大堆內(nèi)存。

IO 性能不能差

Jenkins 使用磁盤文件存儲數(shù)據(jù),每條流水線、每次構(gòu)建都會占用一個文件目錄,產(chǎn)生大量文件。通常流水線數(shù)量有限,但在構(gòu)建歷史達到 10000+ 級別時,會感受到 IO 對 Jenkins 的影響。

如果使用本地存儲,推薦使用高性能的 SSD。如果是使用網(wǎng)絡(luò)存儲,需要高性能的網(wǎng)絡(luò)支持,同時加大客戶端的緩存池。

較大的 jenkins_home 的磁盤空間

磁盤滿時,Jenkins 將不能工作,在 Jenkins 后臺會有錯誤提示。

建議對 Jenkins 的工作目錄進行磁盤使用率監(jiān)控,并配置告警規(guī)則。如果沒有監(jiān)控告警系統(tǒng),那么建議直接設(shè)置一個較大的磁盤空間給 /var/jenkins_home 目錄。因為有一些 Storage Class 不支持動態(tài)擴容,當磁盤滿時,就只能手動拷貝了。

使用 Kubernetes plugin 在 Kuberntes 上構(gòu)建

基于物理機、虛擬機的構(gòu)建,增加了運維成本、限制了并發(fā)的數(shù)量。

使用 Kubernetes plugin 插件在 Kubernetes 上進行構(gòu)建能充分利用云原生易擴展、易維護的優(yōu)勢,進行大規(guī)模的構(gòu)建。參考: 在 Kubernetes 上動態(tài)創(chuàng)建 Jenkins Slave,https://www.chenshaowen.com/blog/creating-jenkins-slave-dynamically-on-kubernetes.html) 。由于構(gòu)建比較占用資源,為了避免對集群的影響,可以配置親和性,將構(gòu)建 Pod 集中到指定的節(jié)點執(zhí)行。

使用 CasC 管理 Jenkins 的配置

通過 Jenkins 頁面進行各種構(gòu)建、安全等配置,不僅繁瑣、不易維護,而且不能夠復用。

使用 CasC 插件,允許用戶將 Jenkins 的配置,通過文本的形式進行描述,還可以放置到 Git 倉庫中進行版本管理。

jenkins:
 securityRealm:
   ldap:
     configurations:
       - groupMembershipStrategy:
           fromUserRecord:
             attributeName: "memberOf"
         inhibitInferRootDN: false
         rootDN: "dc=acme,dc=org"
         server: "ldaps://ldap.acme.org:1636"

 nodes:
   - permanent:
       name: "static-agent"
       remoteFS: "/home/jenkins"
       launcher:
         jnlp:
           workDirSettings:
             disabled: true
             failIfWorkDirIsMissing: false
             internalDir: "remoting"
             workDirPath: "/tmp"

 slaveAgentPort: 50000
 agentProtocols:
   - "jnlp2"

使用 Custom WAR Packager 打包 Jenkins

在部署一套新的 Jenkins 環(huán)境時,會需要安裝大量插件,非常影響部署速度,同時插件是否能正常下載也存在不確定性。

Custom WAR Packager 允許用戶將 Jenkins 、配置、插件打包成一個完整的 war 包或者鏡像。這樣無論是開發(fā)測試,還是線上部署,都可以很方便的部署,并且環(huán)境一致,而用戶只需要寫一個 yaml 文件。

bundle:
 groupId: com.dev
 artifactId: "jenkins"
 description: "Jenkins Custom With Package"
 vendor: "Jenkins Project"
buildSettings:
 docker:
   base: jenkins/jenkins:2.277.4
   tag: shaowenchen/jenkins:2.277.4
   build: true
war:
 groupId: org.jenkins-ci.main
 artifactId: jenkins-war
 source:
   version: 2.277.4
plugins:
 - groupId: io.jenkins
   artifactId: configuration-as-code
   source:
     version: "1.47"
libPatches:
 - groupId: "org.jenkins-ci.main"
   artifactId: "remoting"
   source:
     git: https://github.com/jenkinsci/remoting.git
systemProperties: {
    jenkins.model.Jenkins.slaveAgentPort: "50000",
    jenkins.model.Jenkins.slaveAgentPortEnforce: "true"}
groovyHooks:
 - type: "init"
   id: "initScripts"
   source:  
     dir: scripts
casc:
 - id: "jcasc-config"
   source:
     dir: jenkins.yml

Jenkins Shared Libraries

在使用 Groovy 編寫 Pipeline 的過程中,經(jīng)常會有大量重復代碼。

Jenkins 共享庫提供函數(shù)級別的共享,可以在不同流水線之間復用同一套函數(shù)邏輯,對于平臺建設(shè)、大規(guī)模使用場景適用。不僅能加快 Pipeline 編寫,還方便維護、平滑升級。

@Library('utils') import org.foo.Utilities
def utils = new Utilities(this)
node {
 utils.mvn 'clean package'
}

分享名稱:在Kubernetes上實踐Jenkins
網(wǎng)站路徑:http://www.5511xx.com/article/cdhegeg.html