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/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

发表回复

登录后才能评论