2224 字
11 分钟
页面浏览--访问次数--
Jenkins学习笔记

*[CI/CD]: 持续集成/持续交付或部署

关于Jenkins#

介绍#

Jenkins是一个开源的自动化服务器,主要用于企业内部 CI/CD、私有环境、复杂部署流程,是一个可以自己部署和高度定制的 CI/CD 自动化平台。

须知#

我会尽可能的记录学习到的功能并尽可能添加一些简单案例

本文所有内容在虚拟机中以Ubuntu-22系统运行

安装部署#

jenkins理论上支持运行在任何支持java的操作系统上,因此在使用jenkins之前,我们需要先在机器上安装Java,但需要注意的是,不同版本的jenkins,对java的支持也不一样,我会在下方列出支持文档和相应的表格

支持的java版本长期支持 (LTS) 版本每周发布版本
Java 21 or Java 252.555.1 (April 2026)2.545 (January 2026)
Java 17, Java 21, or Java 252.541.1 (January 2026)2.534 (October 2025)
Java 17 or Java 212.479.1 (October 2024)2.463 (June 2024)
Java 11, Java 17, or Java 212.426.1 (November 2023)2.419 (August 2023)
Java 11 or Java 172.361.1 (September 2022)2.357 (June 2022)
Java 8, Java 11, or Java 172.346.1 (June 2022)2.340 (March 2022)
Java 8 or Java 112.164.1 (March 2019)2.164 (February 2019)
Java 82.60.1 (June 2017)2.54 (April 2017)
Java 71.625.1 (October 2015)1.612 (May 2015)

安装java

Terminal window
sudo apt update
sudo apt install openjdk-25-jre-headless

jenkins支持多种安装方式,你可以使用war文件、docker镜像还有各个系统的软件包来安装,你可以在此界面找到适合的下载方式

添加jenkins 密钥和apt 软件仓库

Terminal window
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

Terminal window
sudo apt-get update
sudo 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 仓库
checkoutSCM 检出
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 started

timeout

设定超过多少时间自动终止

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'
}
}
}
}

他们将会同时运行

Jenkins学习笔记
https://www.yisibuwang.top/posts/note-jenkins/
作者
不旺の博客
发布于
2026-10-04
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

评论

正在加载评论...