Jenkins CI/CD的應用

一、Jenkins磁碟佔滿

由於新產生的工作區和構建,Jenkins的磁碟空間會隨著時間而增長。當磁碟被佔據到某種程度,Jenkins將不再有足夠的空間持續創建工作任務及構建,嚴重影響工作流程。Jenkins的空間管理需要用到插件實現。

Jenkins空間監控檢測插件Disk Usage插件檢查和管理磁碟空間和磁碟使用率,檢測特定工作區的空間使用,也可以組織工件和工作區的深度存儲,支持展示以圖標方式顯示磁碟使用情況。

node('master') {
  checkout scm
  def versionNumber = getVersionNumber()
  docker.withRegistry( 'https://registry.example.com', 'registry-credentials'){
    def app = docker.build("myorg/myapp:${versionNumber}")
    app.push()
  }
} 

二、Jenkins CI/CD是啥

CI/CD的全稱是 Continuous Integration and Continuous Delivery/Deployment,指持續集成和持續交付/部署。當我們的團隊或個人寫了一些代碼,我們希望在開發周期內發布到生產環境中。CI/CD管道就是為了幫助我們實現這一目標,簡化流程,提高效率。

Jenkins就是一個CI/CD工具,它提供了自動化軟體開發過程的各種功能,例如構建、測試、打包和部署。Jenkins 可以在大多數大型軟體開發公司中使用,並為開發者提供了廣泛的靈活性,因為它可以在不同的平台上使用,可以與其他工具以及大多數雲解決方案集成。

三、Jenkins磁碟空間不足

當Jenkins使用偏小的磁碟空間,則可能經常檢測到不足的情況。Jenkins提供了一些插件和選項來幫助管理磁碟空間,如增加磁碟空間、移動工件以及刪除不必要的工件等。Jenkins空間插件中Discard Old Build插件為你提供了另一個選項,允許在創建指定數量的構建後刪除舊構建。

def get_package_name() {
	withEnv(["PATH+GRADLE=${tool 'Gradle'}/bin"]) {
		sh 'gradle clean assembleDebug --no-build-cache --no-daemon'
		def apk = glob '**/build/outputs/apk/debug/*-debug.apk'
		return apk[0]
	}
}

node('ios') {
	stage('Build') {
		def artifact = get_package_name()
		stash includes: artifact, name: 'PACKAGE'
	}
}
node('android') {
	stage('Test') {
		def artifact = unstash 'PACKAGE'
		sh "./gradlew test"
	}
}

四、Jenkins CI/CD流程

Jenkins的CI/CD流程通常包括步驟:編碼、構建、測試、部署、監測,其中後面四個可以自動化實現,大大提升著作效率。

編碼:程序員寫代碼並推送到代碼庫。

構建:Jenkins 構建代碼,並檢查代碼的編譯、靜態分析,或執行任務來構建容器鏡像等。

測試:Jenkins會啟用測試套件或針對代碼進行靜態和動態分析,以確保代碼質量和穩定性。

部署:Jenkins 將被構建的工件或容器部署到生產環境。

監測:Jenkins進行系統監測,包括運行日誌監測、錯誤監測、性能監測等,以確保系統運行正常,同時在改進或修復方面給開發者提供幫助。

五、Jenkins CI/CD教程

這裡列出一些Jenkins CI/CD的教程,供大家學習和實踐:

Jenkins官方教程

Jenkins配置教程

利用Jenkins和Docker實現CI/CD

Jenkins實戰場景示例

六、Jenkins CI/CD審批

Jenkins中的審批是管理和授權流程中一個至關重要的組成部分。使用Jenkins的審批機制,只有在組織或公司的管理人員授權後,才能進行部署。這樣可以防止人員的任意操作,即使有惡意行為,我各個階段的審批流程也能起到作用。

Jenkins 插件中的Config File Provider插件可以為其配置授權密鑰,該插件應用於代碼倉庫、雲服務等多個場景中。

def makeDockerRecipe(String data){
  String stage
  String contextDir
  String imageTag
  String imageName
  def sl = new groovy.util.slurpersupport.GPathResult(new XmlSlurper().parseText(data))
  sl.get("buildSteps.buildStep").each {
    if(it['$'].class.toLower() == 'dockerbuildandpublish') {
      stage = it.buildStepName[0]
      contextDir = it.dockerBuildContextDir[0]
      imageTag = it.dockerImageTag[0]
      imageName = it.dockerRepoName[0]
    }
  }
  return new DockerRecipe(stage, contextDir, imageTag, imageName)
}

node('master') {
  stage('Build') {
    git 'https://github.com/ACME/inc-finance.git'
    def recipe = makeDockerRecipe(readFile 'build.xml')
    stash includes: '**', name: 'source'
    def linuxBuild = docker.build(recipe.toString())
    linuxBuild.push()
  }
}

七、Jenkins CI/CD K8s

K8s 是一種用於自動化部署、擴展和管理應用容器的解決方案。Jenkins CI/CD用來部署容器時,可以使用Kubernetes插件。將構建的容器鏡像託管在一個可用的部署環境中。Kubernetes的Jenkins插件會在構建後自動更新。此插件可以輕鬆實現在Kubernetes群集中動態創建、更新和刪除資源,如部署、服務和Ingress對象。

Jenkins和Kubernetes的結合使用建議使用Kubernetes Plugin,該插件提供Kubernetes Pipeline步驟和DSL,使我們無需編寫任何 Kubernetes YAML 文件就能夠操作Kubernetes。

node('linux') {
  stage('Docker Build') {
    git 'https://github.com/ACME/inc-finance.git'
    def recipe = makeDockerRecipe(readFile 'build.xml')
    def linuxBuild = docker.build(recipe.toString())
    linuxBuild.push()
  }
  stage('Deploy') {
    def kubernetes = container('kubectl') {
      sh 'kubectl version'
      sh 'kubectl apply -f deployment.yml'
    }
    kubernetes.withKubeConfig(credentialsId: 'k8s-creds', serverUrl: 'https://my-k8s-apiserver') {
      sh 'kubectl version'
      sh 'kubectl set image deployment/my-app my-container=my-image:latest'
    }
  }
}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/186609.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-27 05:48
下一篇 2024-11-27 05:48

相關推薦

  • Jenkins與SonarQube結合使用指南

    一、概述 Jenkins是一個支持自動化構建、測試、部署的開源持續集成工具,可用於構建各種項目。SonarQube是用於靜態代碼分析、代碼質量管理和缺陷檢測的開源平台。兩個工具的結…

    編程 2025-04-25
  • Jenkins插件開發:如何優化你的CI/CD流程

    持續集成和持續部署(CI/CD)是現代軟體開發的核心。 Jenkins是最流行的持續集成和交付軟體之一,許多開發人員使用Jenkins來自動化構建、測試和部署他們的應用程序。Jen…

    編程 2025-04-24
  • Docker安裝Jenkins

    一、為什麼選擇Docker安裝Jenkins 隨著軟體開發的發展,持續集成(CI)和持續交付(CD)變得至關重要。為了實現CI/CD,需要一個可靠的構建和自動化工具。Jenkins…

    編程 2025-04-24
  • K8s Jenkins:構建全自動化CI/CD流程

    一、介紹K8s Jenkins Kubernetes(K8s)是一款廣泛使用的開源容器管理平台,而Jenkins是一個流行的開源自動化構建工具。將這兩個工具結合在一起可以使持續集成…

    編程 2025-04-23
  • K8sCI/CD: 提高開發效率的利器

    一、為什麼要使用K8sCI/CD K8sCI/CD是基於Kubernetes的CI/CD解決方案。作為基於容器的編排工具Kubernetes,能夠更好地管理和部署應用程序;而CI/…

    編程 2025-04-18
  • Docker 安裝 Jenkins

    一、安裝 Docker 當我們考慮在 Docker 上安裝 Jenkins 之前,必須先安裝 Docker。Docker 是一個開源的容器化平台,它是由 Docker Inc. 開…

    編程 2025-04-12
  • Jenkins和Gitee:持續集成和持續部署的最佳實踐

    在現代軟體開發環境下,持續集成和持續部署已經成為當之無愧的最佳實踐。而在兩者之間,Jenkins作為開源的自動化構建工具,和Gitee作為國內反應迅速的雲端碼托平台,是非常理想的選…

    編程 2025-04-12
  • Jenkins Agent詳細闡述

    一、Jenkins Agent概述 Jenkins Agent是Jenkins的一個插件,它的作用是跨平台地在分散式環境中構建和執行任務。它可以在不同的操作系統和架構上運行,並且可…

    編程 2025-04-12
  • Jenkins刪除構建歷史

    一、Jenkins構建歷史概述 Jenkins是一個基於Java開發的持續集成工具,它能夠自動化構建、測試和部署軟體,為開發者提供了一個高效、自動化的開發環境。在Jenkins中,…

    編程 2025-02-24
  • 如何下載安裝Jenkins

    一、Jenkins簡介 Jenkins是一款用Java編寫的持續集成工具。它可以幫助你自動化部署、構建和測試軟體項目。你只需要配置好Jenkins,然後選擇自動化構建,就可以讓Je…

    編程 2025-02-24

發表回復

登錄後才能評論