*[CI/CD]: 持续集成/持续交付或部署
关于Jenkins
介绍
Jenkins是一个开源的自动化服务器,主要用于企业内部 CI/CD、私有环境、复杂部署流程,是一个可以自己部署和高度定制的 CI/CD 自动化平台。
须知
我会尽可能的记录学习到的功能并尽可能添加一些简单案例
本文所有内容在虚拟机中以Ubuntu-22系统运行
安装部署
jenkins理论上支持运行在任何支持java的操作系统上,因此在使用jenkins之前,我们需要先在机器上安装Java,但需要注意的是,不同版本的jenkins,对java的支持也不一样,我会在下方列出支持文档和相应的表格
| 支持的java版本 | 长期支持 (LTS) 版本 | 每周发布版本 |
|---|---|---|
| Java 21 or Java 25 | 2.555.1 (April 2026) | 2.545 (January 2026) |
| Java 17, Java 21, or Java 25 | 2.541.1 (January 2026) | 2.534 (October 2025) |
| Java 17 or Java 21 | 2.479.1 (October 2024) | 2.463 (June 2024) |
| Java 11, Java 17, or Java 21 | 2.426.1 (November 2023) | 2.419 (August 2023) |
| Java 11 or Java 17 | 2.361.1 (September 2022) | 2.357 (June 2022) |
| Java 8, Java 11, or Java 17 | 2.346.1 (June 2022) | 2.340 (March 2022) |
| Java 8 or Java 11 | 2.164.1 (March 2019) | 2.164 (February 2019) |
| Java 8 | 2.60.1 (June 2017) | 2.54 (April 2017) |
| Java 7 | 1.625.1 (October 2015) | 1.612 (May 2015) |
安装java
sudo apt updatesudo apt install openjdk-25-jre-headlessjenkins支持多种安装方式,你可以使用war文件、docker镜像还有各个系统的软件包来安装,你可以在此界面找到适合的下载方式
添加jenkins 密钥和apt 软件仓库
sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc \https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key
echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc]" \https://pkg.jenkins.io/debian-stable binary/ | sudo tee \/etc/apt/sources.list.d/jenkins.list > /dev/null安装jenkins
sudo apt-get updatesudo apt-get install jenkins安装完成后,jenkins一般会运行在机器的8080端口下,首次进入还需要你输入一个初始的管理员密码

按照提示在路径文件中找到密码并输入即可进入下一步,安装推荐的插件并创建管理员用户
完成配置后即可进入jenkins的主界面

使用Jenkins
使用自由项目
进入新建任务后可以看到有很多任务类型,我们选择自由项目作为我们第一次尝试使用Jenkins的类型
自由项目的设置几乎都可以在它的图形化界面中完成
可以把一整个界面需要设置的简化成下面
我是谁? -> 代码在哪? -> 什么时候做? -> 在什么环境做 -> 做什么? -> 做完以后干什么?
根据需要配置即可,比如说我在构建设置里配置了让一个shell任务,让他输出 hello
应用配置后手动进行一次构建,在构建结果中就能看到自己设置的内容

使用流水线项目
流水线项目的配置比自由项目更加自由,它的构建过程完全由流水线脚本设定
声明式 Pipeline
下面介绍下声明式流水线脚本的语法
pipeline { //必须以 pipeline {} 为顶层结构
agent any //让谁干活
environment { //定义可全局调用的环境变量 APP_NAME = 'demo' }
parameters { //用户输入参数 string( name: 'VERSION', defaultValue: '1.0.0', description: '版本号' ) }
triggers { //什么时候启动 pollSCM('H/5 * * * *') }
options { //Pipeline的运行规则 timestamps() timeout(time: 10, unit: 'MINUTES') }
stages { //整个流水线有哪些阶段
stage('Checkout') { //代表不同的阶段 steps { //steps:真正干活的部分 git branch: 'main', url: 'https://github.com/example/demo.git' } }
stage('Build') { steps { echo "开始构建 ${env.APP_NAME}" sh 'npm install' sh 'npm run build' } }
stage('Test') { when { //这个 Stage 什么时候执行 branch 'main' }
steps { sh 'npm test' } }
stage('Deploy') { steps { sh 'echo deploy' } } }
post { //结束以后做什么
always { echo 'Pipeline结束' }
success { echo '构建成功' }
failure { echo '构建失败' } }}上面是个简单的示例脚本,涵盖了使用声明式脚本的部分核心结构;来慢慢拆解并理解
pipeline
Declarative Pipeline 必须以 pipeline {} 为顶层结构,可以把它理解成整个流水线的开始
pipeline {
}agent
agent的作用很简单,让Jenkins找到指定的执行节点来运行 Pipeline
例如
agent any意思是找任意一个可用的、符合条件并且当前可以执行任务的节点 Jenkins Agent 来运行这个 Pipeline
也可以使用 agent none
none和any有什么区别?
例如
pipeline { agent none //整个 Pipeline 开始时,不分配任何 Agent
stages {
stage('Build') { agent { label 'linux' //让每个 Stage 自己决定,使用 label 指定一个带 linux 标签的 Agent }
steps { sh 'npm run build' } } }}还可以使用docker agent
pipeline {
agent { docker { image 'node:22' } }
stages {
stage('Build') { steps { sh 'node --version' sh 'npm --version' } } }}找到一个能够运行 Docker 的 Agent,然后启动 node:22 容器,并在这个容器里面执行 Pipeline
stages
stages 定义了整个流水线有哪些阶段 例如
stages {
stage('Build') { steps { echo '编译' } }
stage('Test') { steps { echo '测试' } }
stage('Deploy') { steps { echo '部署' } }}在上面的脚本中设定了三个阶段,运行后Jenkins 页面里就会看到Build → Test → Deploy,方便展示执行进度
steps
Step是 Pipeline 最基本的执行单元,上述脚本中都能看到它的出现,一般使用一个花括号将要执行的操作包括起来
steps {
}列出一些常用的step
| Step | 作用 |
|---|---|
echo | 输出信息 |
sh | 执行 Linux Shell |
bat | 执行 Windows CMD |
powershell | 执行 PowerShell |
git | 拉 Git 仓库 |
checkout | SCM 检出 |
dir | 切换目录 |
readFile | 读取文件 |
writeFile | 写文件 |
archiveArtifacts | 保存构建产物 |
junit | 发布测试结果 |
input | 等待人工确认 |
build | 调用另一个 Jenkins Job |
parallel | 并行执行 |
environment
environment用于设定环境变量
如果提前设定了变量
environment { APP_NAME = 'demo' VERSION = '1.0.0'}在后续的编写中,就可以使用例如 echo ”${env.APP_NAME}” 或者 sh “echo $VERSION” 获取到变量内容
parameters
parameters用于创建Jenkins Pipeline 的输入表单,可以让用户选择如何执行操作
例如
pipeline {
agent any
parameters {
string( //版本号输入 name: 'VERSION', defaultValue: '1.0.0', description: '版本号' )
choice( //部署环境选择,使用下拉选择 name: 'ENV', choices: [ 'dev', 'test', 'prod' ], description: '部署环境' )
booleanParam( //是否进行测试,使用复选框 name: 'RUN_TEST', defaultValue: true, //默认勾选 description: '是否执行测试' )
booleanParam( name: 'DEPLOY', defaultValue: false, //默认不勾选 description: '是否部署' ) }
stages {
stage('Build') { steps { echo "构建版本:${params.VERSION}" } }
stage('Test') {
when { expression { params.RUN_TEST } }
steps { echo '执行测试' } }
stage('Deploy') {
when { expression { params.DEPLOY } }
steps { echo "部署到:${params.ENV}" } } }}在构建前,Jenkins 会要求用户输入设定好的数据

options
options设定了 Pipeline 的运行规则
例如
timestamps()
让日志带有时间戳
[12:00:01] Build startedtimeout
设定超过多少时间自动终止
options { timeout(time: 10, unit: 'MINUTES')}disableConcurrentBuilds()
禁止同一个 Pipeline 同时运行多个实例
options { disableConcurrentBuilds()}triggers
用来设定Pipeline的触发器
例如定时
triggers { cron('H 2 * * *')}SCM 轮询
triggers { pollSCM('H/5 * * * *')}post
post定义了 Pipeline 结束后该进行什么操作
post {
always { echo '无论成功失败都执行' }
success { echo '成功' }
failure { echo '失败' }
}下面列出一些常用操作
| 条件 | 触发时机 |
|---|---|
always | 总是执行 |
changed | 当前构建结果与上次不同 |
fixed | 上次失败,本次成功 |
regression | 上次成功,本次失败 |
aborted | 手动中止构建 |
failure | 构建失败 |
success | 构建成功 |
unstable | 测试失败但构建通过 |
cleanup | 所有其他 post 执行完毕后 |
when
when是 Pipeline 非常重要的语法,代表了所指的 Stage 什么时候执行
stage('Deploy') {
when { expression { params.ENV == 'prod' } }
steps { echo '部署生产环境' }}这段代码的作用激素,如果变量ENV是prod分支,就执行后续的steps,否则就跳过
对于其中的判断规则,有多种不同的内置条件:
branch当正在构建的分支与模式给定的分支匹配时,执行这个阶段
environment当指定的环境变量是给定的值时,执行这个步骤
expression当指定的Groovy表达式评估为true时,执行这个阶段
not当嵌套条件是错误时,执行这个阶段,必须包含一个条件
allOf当所有的嵌套条件都正确时,执行这个阶段,必须包含至少一个条件
anyOf当至少有一个嵌套条件为真时,执行这个阶段,必须包含至少一个条件tools
用于指定过程中根据工具配置准备对应环境
tools { maven 'Maven-3.9' jdk 'JDK-21'}parallel
用于执行并行操作
例如现在分别有一个liunx测试和windows测试,如果不使用并行,则需要等待他们依次执行
如果启用了并行
stage('Test') {
parallel {
stage('Linux') { steps { echo 'Linux test' } }
stage('Windows') { steps { echo 'Windows test' } } }}他们将会同时运行
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 0 天
部分内容可能已过时
评论