CICD
CI/CD是持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)
CICD是一种软件开发实践,通过自动化的流程来提高软件开发的效率、质量和交付速度。
-
持续集成(CI)指的是频繁地将代码变更集成到主分支,并且每次集成都会自动运行构建和测试,以确保代码的一致性和稳定性。
-
持续交付(CD)则是在CI的基础上,确保软件可以随时部署到生产环境中,而持续部署(CD)则是自动化地将软件部署到生产环境。
CICD Server 类型
- Hudson -->Jenkins
一个开源的自动化服务器,可以用于自动化各种任务,包括构建、测试和部署软件。Jenkins 以其强大的插件生态系统和灵活性而闻名,支持多种操作系统和环境。
- GitLab CICD
作为GitLab的一部分免费提供,可以自动化构建、测试和部署过程,支持并行作业和多个运行器。
- Tekton
一个开源的CD基金会项目,可以在Kubernetes上运行,提供与Knative构建器和Prow集成的CI/CD系统。
Maven
一款专用于Java语言项目的主流的管理和构建工具,它为开发者提供了一套完整的构建生命周期框架,开发团队稍微投入一些时间就能够自动完成工程的基础构建配置。
在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行,这主要是因为大部分的工程配置操作都非常简单并且可复用。
Maven基于项目对象模型(POM project obiect model),它可以通过一小段描述信息(配置)来管理项目的构建。
1、pom.xml文件目录结构
Maven项目描述信息保存在一个名为pom.xml的文件中,项目的通用目录结构通常包括如下几个:
src/main/
- java:项目的源代码所在的目录
- resources:项目的资源文件所在的目录
- filters:项目的过滤器文件所在的目录
src/test/
- java:测试代码所在的目录
- resources:测试相关的资源文件目录
- filters:测试相关的过滤器文件目录
2、Maven工程构建的常用阶段
- validate:验证项目是否正确且所有必须信息是可用的clean:将以前编译得到的旧文件class字节码文件删除
- compile:将iava源程序编译成class字节码文件;
- test:自动测试,例如,自动调用JUnit程序;
- report:报告测试程序执行的结果;
- package:应用打包,动态Web工程打成war包,java工程打成jar包;
- install:Maven特定的概念,是指将打包得到的文件复制到“仓库”中的指定位置;
- deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行;
3、Maven构建的基本工作流程
- 读取pom.xml文件
- 从repository中下载pom.xml文件定义的依赖项
- 根据需求构建项目、生成报告,并处理生命周期、阶段、目标、插件和其他任务
Jenkins
Jenkins是一款开源的CICD Server程序,常用于自动化各种CI、CD任务,包括构建、测试和部署等。
-
支持强大的扩展能力,其功能主要通过插件(Plugin)进行扩展
-
Jenkins社区提供了非常多的插件
-
Jenkins 2用于泛指支持流水线即代码及其他类似Jenkinsfile等新特性的新版Jenkins,DSL是Jenkins 2的核心组件,作为构建模块让其他核心的用户导向特性成为可能
1、如何使用Jenkins创建CICD任务
- 一个典型的CICD操作过程可以抽象为Pipeline形式,这种类型的Pipeline一般由构建、测试和打包等几个典型阶段组成。
Jenkins每个阶段的具体操作过程都可能需要特定工具程序的参与;maven工程项目多半要依赖maven和idk环境,而node,is项目则要用到npm工具等,这些工具需要事先经由“系统管理 → 全局工具配置”进行配置,或者于Jenkins Host上部署上相关的应用程序;为便于用户定义CICD的具体步骤,Jenkins为特地提供了不同类型的]ob,例如自由风格的作业、Pipeline作业Maven工程作业、多配置项目、多分支流水线等;
- 一个典型的CICD过程拥有输入和输出
从某个代码仓库中“克隆”代码作为输入,并将生成的结果打包成特定的格式(例如jar、exe、elf或image等)进行输出,甚至还要推送到目标工件库中(例如DockerHub)以便干存储和分发;若需要事先完成认证才能访问代码仓库服务及工件库服务时,jenkins支持将这些认证凭据以安全方式事先定义,并在Pipeline自动化执行时自动引用;
2、Jenkins版本
-
Jenkins 1.x:图形界面配置定义Pipeline,Freestyle pipeline(自由风格流水线)
-
Jenkins 2.x:纯文本定义,Jenkinsfile,Pipeline(文本定义)
3、Jenkins 2 系统组件
在Jenkins 2中,节点是一个基础概念,代表了任何可以执行Jenkins任务的系统,节点中包含主节点(master)和代理节点(agent)两种类型,但主节点一般用于完成任务分配等管理功能,而代理节点才会执行各类具体的任务。
-
主节点:Jenkins的一个部署实例的核心控制系统,它能够完全访问所有jenkins配置的选项和任务(job)列表,而且,若不存在其他代理节点,主节点也是默认的任务执行节点;
-
代理节点:在早先版本的jenkins中,代理节点被称为从节点(save),它代表着所有的非主节点;
-
执行器(Executor):简单来说,Executor只是节点或代理节点用于执行任务的一个槽位;Executor的数量定义了该节点可以执行的并发任务量,一个节点上可以有任务数量的槽位,但也允许管理员按节点资源定义合适的数量。在主节点将任务分配给特定节点时,该节点上必须有可用的Executor来立即执行该任务,否则,只能等到有空闲槽位可用。
Jenkins配置
1、配置中文界面
Jenkins默认安装完成是英文界面,可以重启服务自动检测匹配到中文界面。
-
通过API 重启服务:http://192.67.0.43:31150/restart
-
点击重启
-
重启完成后切换成中文界面
2、构建一个自由风格的软件项目
- 安装插件
Deploy to container:
-
新建项目
-
点击构建一个自由风格的软件项目,确定
-
添加git地址,分支
-
添加构建步聚,脚本模式
-
填写脚本,保存
mvn -B -DSkipTests clean package
echo "Testing..."
mvn test
- 点击构建,查看控制台输出
- 构建完成后会生成一个jar包
root@jenkins-6f64cc9648-79rnb:/home# cd /var/jenkins_home/workspace/
root@jenkins-6f64cc9648-79rnb:/var/jenkins_home/workspace# ls
spring-boot-helloWorld
root@jenkins-6f64cc9648-79rnb:/var/jenkins_home/workspace# cd spring-boot-helloWorld/
root@jenkins-6f64cc9648-79rnb:/var/jenkins_home/workspace/spring-boot-helloWorld# ls
Dockerfile Jenkinsfile LICENSE README.md deploy maven pom.xml rollouts src target
root@jenkins-6f64cc9648-79rnb:/var/jenkins_home/workspace/spring-boot-helloWorld# ls target/
classes maven-archiver spring-boot-helloworld-0.9.6-SNAPSHOT.jar.original
generated-sources maven-status surefire-reports
generated-test-sources spring-boot-helloworld-0.9.6-SNAPSHOT.jar test-classes