CI/CD基础知识

CI/CD基础知识

什么是CI/CD

CI:持续集成,开发人员频繁地将代码集成到主干(主分支)中每次集成都通过自动化构建和测试来验证,从而尽早发现集成错误,常用的CI工具包括Jenkins、Travis CI、CircleCI、GitLab CI等

CD: 持续交付或持续部署,持续交付是指在持续集成的基础上,自动化将代码部署到生产环境或预生产环境的过程。它确保代码在任何时候都可以安全地部署到生产环境。自动化部署:通过自动化脚本将应用程序部署到服务器,减少手动操作的错误。可随时发布:代码经过测试后,可以随时选择将其发布到生产环境。环境一致性:确保开发、测试和生产环境的一致性,以减少环境差异带来的问题。工具:常用的持续交付工具包括Spinnaker、Octopus Deploy、AWS CodeDeploy等。

1、常用的CI/CD工具

特性GitLab CI/CDTravis CIJenkins部署模式内置于 GitLab(SaaS/自托管)纯 SaaS(无自托管版)自托管为主(支持云托管)配置方式.gitlab-ci.yml 文件.travis.yml 文件Jenkinsfile(Groovy DSL)执行环境GitLab Runner(可自定义)预置的虚拟机环境Agent/Node 自由扩展依赖管理自带 Artifact 存储有限缓存机制需插件(如 Nexus 集成)网络拓扑原生 Kubernetes 集成固定环境无集群管理支持混合云集群调度

第三方服务集成

服务类型GitLab CITravis CIJenkins代码质量内置 SAST/DAST 扫描需通过插件扩展需安装 SonarQube 插件通知渠道20+ 内置通知方式基础邮件/Slack500+ 通知插件安全扫描集成 Dependency Scanning依赖第三方脚本需配置安全工具链K8s 集成原生支持 Auto DevOps需手动配置 kubectl通过 Kubernetes 插件

2、CI/CD中的jenkins

1、jenkins的基本知识

Jenkins是一款开源的自动化服务器,广泛用于持续集成(CI)和持续交付(CD)过程。它提供了一系列功能,帮助开发团队自动化软件构建、测试和部署。

主要功能

持续集成:自动化构建和测试代码,确保每次提交都能快速反馈

插件支持

Jenkins有丰富的插件生态系统,支持与各种工具和技术集成如Git、Maven、Docker、K8s等

构建自动化

支持多种构建工具和语言,能够自动化构建过程,生成可执行文件或其他工件。

分布式构建

支持在多台机器上并行构建,提升构建效率,适用于大型项目。

可视化界面提供用户友好的Web界面,方便用户配置和监控构建任务定时构建支持定时触发构建任务,能够根据预设的时间表自动执行通知和报告提供构建状态通知功能,可以通过电子邮件、Slack等方式发送构建结果集成测试支持自动化测试框架,能够在构建过程中运行单元测试和集成测试

优势:开源和免费:灵活性和可扩展性:社区支持:跨平台支持:提高开发效率:快速反馈:

2、在jenkins如何配置实现CI/CD

一:安装Jenkins

1、下载和安装Jenkins:2、启动Jenkins并完成初始配置。3、安装必要的插件:git、docker、“Pipeline”插件(通常默认已安装)

二:创建流水线项目

新建流水线项目:在Jenkins主页,点击“新建任务”。输入项目名称,选择“流水线”,然后点击“确定”。 配置流水线:在项目配置页面,找到“流水线”部分。

三:编写流水线脚本Jenkins支持两种类型的流水线:声明式流水线和脚本式流水线。四:保存和构建

保存配置:完成流水线脚本的编写后,点击“保存”。

构建流水线:在项目主页,点击“立即构建”按钮,开始执行流水线。

可以在“构建历史”中查看构建状态和日志。

五:监控和通知

监控构建状态:Jenkins提供了实时的构建日志和状态监控,可以查看每个阶段的执行情况。

设置通知:可以通过邮件、Slack等方式配置构建通知,确保团队及时了解构建状态

1、实现重点

- Pipeline脚本

在Jenkins中,Pipeline脚本主要有两种类型:声明式流水线(Declarative Pipeline)和脚本式流水线(Scripted Pipeline)。

声明式流水线(Declarative Pipeline)脚本式流水线(Scripted Pipeline)易读性:声明式流水线的语法更为简洁和直观。

结构化:使用固定的结构,便于理解和维护。

内置功能:提供了一些内置的功能,如post、options等,简化了常见的任务。灵活性:使用Groovy语言编写,提供了更大的灵活性和控制能力

复杂逻辑:适合需要复杂逻辑和条件判断的场景

不规则结构:没有固定的结构,可能会导致可读性降低,尤其是对于大型项目

组成元素:

pipeline:整个流水线的定义。

agent:指定代理上执行流水线,特定或任何可用的节点

stages:流水线的各个阶段,包含多个stage

stage:每个阶段的定义,表示流水线中的一个步骤

steps:在每个阶段中执行的具体操作可以是命令、脚本等

post:定义在流水线执行后的操作如成功、失败时的处理

组成元素:

node:定义在某个代理节点上执行的代码块。

stage:定义流水线中的一个阶段。

steps:在每个阶段中执行的具体操作。

try-catch-finally:用于处理异常和控制流程。

environment:定义环境变量。

声明式流水线

pipeline {

agent any

environment {

// 定义环境变量

NODE_ENV = 'production'

}

stages {

stage('Checkout') {

steps {

// 从Git仓库检出代码

git url: 'https://github.com/your-repo.git', branch: 'main'

}

}

stage('Build') {

steps {

// 执行构建命令

sh 'npm install'

sh 'npm run build'

}

}

stage('Code Quality') {

steps {

// 运行代码质量检查

sh 'npm run lint'

}

}

stage('Test') {

steps {

// 执行单元测试

sh 'npm test'

}

}

stage('Deploy') {

steps {

script {

// 根据环境变量决定部署目标

if (NODE_ENV == 'production') {

sh 'scp -r dist/* user@production-server:/path/to/deploy'

} else {

sh 'scp -r dist/* user@staging-server:/path/to/deploy'

}

}

}

}

}

post {

success {

// 构建成功后的操作

echo 'Build succeeded!'

}

failure {

// 构建失败后的操作

echo 'Build failed!'

}

always {

// 无论成功与否都执行的操作

cleanWs() // 清理工作区

}

}

}

脚本式流水线

node {

// 定义环境变量

def NODE_ENV = 'production'

stage('Checkout') {

echo 'Checking out code...'

// 从Git仓库检出代码

git url: 'https://github.com/your-repo.git', branch: 'main'

}

stage('Build') {

echo 'Building the application...'

// 执行构建命令

sh 'npm install'

sh 'npm run build'

}

stage('Code Quality') {

echo 'Running code quality checks...'

// 运行代码质量检查

sh 'npm run lint'

}

stage('Test') {

echo 'Running tests...'

// 执行单元测试

sh 'npm test'

}

stage('Deploy') {

echo 'Deploying the application...'

// 根据环境变量决定部署目标

if (NODE_ENV == 'production') {

sh 'scp -r dist/* user@production-server:/path/to/deploy'

} else {

sh 'scp -r dist/* user@staging-server:/path/to/deploy'

}

}

// 后处理步骤

try {

// 这里可以添加一些后处理逻辑

} catch (Exception e) {

echo 'An error occurred: ' + e.getMessage()

} finally {

// 清理工作区

cleanWs()

}

}

2、多分支流水线管理

1、安装pipline和multibranch pipline插件;

2、创建multobranch pipline项目;

3、配置git仓库,指定git的url配置凭证;

4、配置分支发现,添加branch Sources配置发现策略,按命名发现和按分支发现。

5、在git存储的每个分支根目录下添加jenkinsfile定义该分支的流水线逻辑;

6、保存并构建:jenkins会自动扫描git存储库的分支找到分支创建对应的pipline。

3、jenkins配置git集成出发自动集成

Webhook 自动触发(推荐方案)1、安装jenkins和git插件;2、创建jenkins任务配置git仓库url;3、Git 设置 Webhook: URL: http://jenkins.example.com/project/my-pipeline;Secret Token: 与Jenkins全局配置一致;触发事件: Push events, Merge Request events;4、验证配置提交代码观察是否自动构建。

4、jenkins如何配置构建参数实现不同环境的部署

在Jenkins中,可以通过配置构建参数来实现不同环境的部署。这通常涉及到使用参数化构建,使得用户在触发构建时可以选择目标环境。

1、创建参数化构建 步骤:1)创建或配置一个Pipeline项目:2)启用参数化构建:在项目配置页面,找到“参数化构建过程”选项,勾选“参数化构建过程”。点击“添加参数”,选择合适的参数类型。例如,可以选择“选择参数”(Choice Parameter)或“字符串参数”(String Parameter)。3)配置参数:如果选择“选择参数”,可以在“选择参数”字段中输入不同的环境选项,例如:development;staging;production 如果选择“字符串参数”,可以设置一个默认值,用户可以在构建时输入目标环境。

2. 修改Jenkinsfile: 在Jenkinsfile中,使用传入的参数来决定部署的目标环境。

pipeline {

agent any

parameters {

choice(name: 'DEPLOY_ENV', choices: ['development', 'staging', 'production'], description: '选择部署环境')

}

stages {

stage('Checkout') {

steps {

git url: 'https://github.com/your-repo.git', branch: 'main'

}

}

stage('Build') {

steps {

sh 'npm install'

sh 'npm run build'

}

}

stage('Deploy') {

steps {

script {

// 根据选择的环境进行部署

if (params.DEPLOY_ENV == 'production') {

sh 'scp -r dist/* user@production-server:/path/to/deploy'

} else if (params.DEPLOY_ENV == 'staging') {

sh 'scp -r dist/* user@staging-server:/path/to/deploy'

} else {

sh 'scp -r dist/* user@development-server:/path/to/deploy'

}

}

}

}

}

post {

success {

echo 'Deployment succeeded!'

}

failure {

echo 'Deployment failed!'

}

}

}

3)触发构建:当用户在Jenkins界面中触发构建时,会看到一个下拉菜单或输入框,允许他们选择或输入目标环境。Jenkins会根据用户选择的环境执行相应的部署步骤。

← 上一篇: 北京乐动卓越科技有限公司
下一篇: 什么什么之什么的成语 →

相关推荐