首页 > 其他分享 >CICD Day8、Pipeline实现网站项目的自动发布

CICD Day8、Pipeline实现网站项目的自动发布

时间:2025-01-08 18:56:27浏览次数:1  
标签:Pipeline Day8 CICD 代码 拉取 steps 构建 镜像

为了更好的理解Pipeline脚本和cicd流程,本次将使用一个java语言开发的用户信息管理系统进行实践

  • 项目源代码的仓库的地址为
http://172.16.99.82:88/root/java-web-demo.git

1 Pipeline脚本基本结构

  • 我们将Pipeline脚本的构建过程分为拉取代码、代码编译、构建镜像、部署到K8s集群、反馈5个阶段。如下图所示
    image

  • 各阶段的任务如下:

1、拉取代码阶段

  • 从代码仓库拉取最新代码
  • 根据选择的分支拉取对应的代码版本

2、代码编译阶段

  • 执行代码编译工作
  • 生成可部署的文件

3、构建镜像阶段

  • 编写Dockerfile
  • 构建镜像
  • 推送镜像到镜像仓库

4、部署到k8s集群阶段

  • 编写资源配置
  • kubectl执行部署和更新操作

5、反馈阶段

  • 发送通知到钉钉群或邮箱告知执行结果
  • 综上所述,Pipeline脚本结构如下
pipeline {
  agent {
    kubernetes {
      yaml '''
        apiVersion: v1
        kind: Pod
        spec:
          containers:
          - name: jnlp
            image: uhub.service.ucloud.cn/librarys/jenkins/inbound-agent:latest-jdk21
            args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']
      '''
    }
  }
  stages {
    stage('拉取代码') {
      steps {
         echo "拉取代码..."
      }
    }
    stage('代码编译') {
      steps {
         echo "代码编译..."
      }
    }
    stage('构建镜像') {
      steps {
         echo "构建镜像..."
      }
    }
    stage('部署到k8s集群') {
      steps {
         echo "部署到k8s集群..."
      }
    }
    post {
       always {
          echo "构建完成"
       }
       success {
          echo "构建成功"
       }
       failure {
          echo "构建失败"
       }
    }
  }
}

2、拉取代码阶段

  • 拉取代码步骤可以通过片段生成器生成,在生成器中选择checkout: Check out from version control,输入仓库地址、访问凭据和构建分支。具体配置如下图所示:
    image
  • 将生成的Pipeline代码片段复制到Pipeline中,如下所示
    stage('拉取代码') {
      steps {
         checkout scmGit(branches: [[name: '*/dev']], extensions: [], userRemoteConfigs: [[credentialsId: '0b376781-1e95-417f-9fae-aec4deb7f966', url: 'http://172.16.99.82:88/root/java-web-demo.git']])
      }
    }
  为了让用户在触发构建时可以选择并动态获取分支,这里使用Git Parameter,该Parameter由Git Parameter插件提供,该插件需要额外安装。这个步骤可以通过声明式指令生成器生成,在生成器中选择parameters: Parameter,然后添加Git Parameter,输入名称、描述、参数类型和默认分支。
  • 具体配置如下图所示
    image
  • 将生成的代码片段复制到Pipeline中,如下图所示
  parameters {
      gitParameter branch: '', branchFilter: '.*', defaultValue: 'dev', description: '请选择构建的分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'GitParameterDefinition'
  }
  stages {
    stage('拉取代码') {
      steps {
         checkout scmGit(branches: [[name: "${params.Branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: '0b376781-1e95-417f-9fae-aec4deb7f966', url: 'http://172.16.99.82:88/root/java-web-demo.git']])
      }
    }
  }

同时,将scmGit中的分支名称*/dev 设置为${params.Branch},以便根据用户选择的分支名称拉取代码

3、代码编译阶段

  这个java web项目使用Maven工具进行项目管理。因此,在这个阶段需要执行 mvn clean package命令进行代码编译和构建,该命令执行完成后将生成一个可部署的jar文件。将该命令放置在代码编译阶段中,如下所示
    stage('代码编译') {
      steps {
         sh 'mvn clean package'
      }
    }
  • 这个时候会引发一个问题:mvn命令是否可以顺利执行?
  • 答案是否定的,因为这个命令会在代理pod中执行,而代理pod是由uhub.service.ucloud.cn/librarys/jenkins/inbound-agent:latest-jdk21镜像构建的,该镜像仅运行代理程序,并没有提供Maven环境
  • 为了解决这个文件,需要确保代理pod中具备Maven环境,这可以通过以下两种方法实现:
    • (1)基于uhub.service.ucloud.cn/librarys/jenkins/inbound-agent:latest-jdk21镜像构建一个包含Maven环境的镜像,并使用该镜像创建代理pod

标签:Pipeline,Day8,CICD,代码,拉取,steps,构建,镜像
From: https://www.cnblogs.com/suyj/p/18660354

相关文章

  • CICD Day7、Jenkins Pipeline 常用指令及Pipeline快捷生成方式(片段生成器)
    1、常用指令在编写Pipeline脚本时,会涉及各种指令,这些指令用于实现构建过程中的不同功能。熟悉这些指令后,编写一个完整的Pipeline脚本将变得十分简单1.1shsh指令用于执行shell命令,配置示例如下stage('Build'){stage{sh'hostname'}}在上述配置中,在构建......
  • CICD Day6、基于kubernetes动态创建代理
    Jenkins支持基于kubernetes动态创建代理,使代理程序能够运行在Pod中,这种方法可以根据构建任务的变化动态的增减代理,充分利用kubernetes的特性,为分布式构建提供灵活的运行环境如下图所示当项目触发构建时,Jenkins会调用kubernetesapi创建一个专用的pod作为从节点,在该pod执行......
  • CICD Day5、Jenkins pipline
    在创建web-demo项目的时候,使用的是freestyleproject自由风格项目类型。此外,jenkins还提供了pipline项目类型(又称流水线),它具有以下特点:基于代码的描述:通过代码描述整个构建过程,pipline脚本可以被存储在代码仓库中进行版本管理。团队成员还可以通过查看脚本来了解整个软件交付......
  • CICD Day4、Jenkins主从架构
    Jenkins主从架构(Master-Slave)是一种分布式架构,主节点负责管理项目配置、任务调度和监控,从节点用于执行具体的构建任务。Jenkins主从架构如下图所示 当项目触发构建时,主节点将任务分配到某个从节点,从节点根据项目配置执行一系列操作,如拉取代、代码编译、部署到目标服务器等......
  • CICD Day3、Jenkins参数化构建
    Jenkins参数化构建是一项功能,允许在出发构建时通过制定参数来动态配置和定制构建任务。这种灵活使得一个构建流程可以使用不同的配置进行,从而使用不同的场景需求参数构建支持多种参数类型,如下所示:BooleanParameter(布尔值参数):true或者false,可用于开启或关闭某些构建步骤Choi......
  • 智能驾驶——11.03 摄像头图像处理Pipeline
    0Preface    前文<摄像头传感器基本概念>已经提到摄像头数据通过<摄像头传感器接口>传输到AD域控制器中,进行进一步的数据处理并提供给算法进行环境识别也就是“感知”环节。摄像头数据进入SOC后有一套流水线进行图像数据处理,SOC设计采用的图像芯片IP不同,所以参与图像......
  • 『联合省选2025集训』『矩阵树定理,LGV引理,行列式』 Day8 略解
    前言许多人所谓的成熟,不过是被习俗磨去了棱角,变得世故而实际了。这两天的线性代数属实是要给我创破防了。拼尽全力战胜基础题目之后,难的题目偏的偏怪的怪,还有一堆不会的数学知识点,我还是摆烂了吧。先稍做一下总结。以及,我突然意识到总结的效率问题,或许我真的应该减少每道题......
  • CICD Day2、基于jenkins Gitlab 的CICD web-demo配置
    1、代码提交1.1在服务器上创建一个web-demo的目录,用户web前端项目的开发目录mkdirweb-demo#在web-demo目录下编辑一个index.html的文件catindex.html<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>实例</title></head><body&......
  • Transformers 框架 Pipeline 任务详解(六):填充蒙版(fill-mask)
    在自然语言处理(NLP)领域,填空或填补句子中的缺失部分是一项重要的任务。它不仅考验了模型对语言的理解能力,还展示了其生成合理且语义连贯的文本的能力。HuggingFace的Transformers框架通过其PipelineAPI提供了强大的fill-mask功能,允许开发者和研究者轻松构建并应用这种填空技......
  • 在本地运行Hugging Face Pipelines:探索高效的AI模型部署
    在本地运行HuggingFacePipelines:探索高效的AI模型部署引言HuggingFace的模型库提供了超过120,000个开源模型,支持开发者在本地或远程高效地进行自然语言处理任务。通过使用HuggingFacePipeline类,我们可以轻松地在本地运行这些模型,并利用LangChain提供的强大工具集进行模......