1. Jenkins简介与版本说明
Jenkins是一个开源的自动化服务器,用于自动化各种任务,包括构建、测试和部署软件。Jenkins拥有丰富的插件生态系统,支持几乎所有主流的构建工具和部署平台。更多学习教程www.fgedu.net.cn
最新版本信息:
Jenkins 2.452.x – 最新稳定版(LTS)
Jenkins 2.440.x – 长期支持版
Jenkins 2.426.x – 维护版
Jenkins Weekly 2.460+ – 每周更新版
2. Jenkins下载方式
Jenkins提供多种下载方式,包括WAR包下载、Docker镜像、系统包管理器安装和Kubernetes Helm部署。学习交流加群风哥微信: itpux-com
方式一:WAR包下载
# https://www.jenkins.io/download/
# 下载Jenkins LTS WAR包
$ wget https://get.jenkins.io/war-stable/2.452.1/jenkins.war
# 下载校验文件
$ wget https://get.jenkins.io/war-stable/2.452.1/jenkins.war.sha256
# 验证下载文件完整性
$ sha256sum -c jenkins.war.sha256
输出示例如下:
jenkins.war: OK
# 查看文件大小
$ ls -lh jenkins.war
输出示例如下:
-rw-r–r– 1 root root 95M Mar 15 10:00 jenkins.war
# 下载Jenkins Weekly版本
$ wget https://get.jenkins.io/war/2.460/jenkins.war
方式二:Docker镜像下载
$ docker pull jenkins/jenkins:lts
输出示例如下:
lts: Pulling from jenkins/jenkins
abc123d: Pull complete
def456g: Pull complete
…
Digest: sha256:abc123def456789012345678901234567890123456789012345678901234
Status: Downloaded newer image for jenkins/jenkins:lts
docker.io/jenkins/jenkins:lts
# 拉取特定版本
$ docker pull jenkins/jenkins:2.452.1-lts
# 拉取JDK21版本
$ docker pull jenkins/jenkins:lts-jdk21
# 查看本地镜像
$ docker images | grep jenkins
输出示例如下:
jenkins/jenkins lts abc123def456 2 days ago 480MB
jenkins/jenkins 2.452.1-lts abc123def456 2 days ago 480MB
方式三:系统包管理器安装
$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
$ sudo rpm –import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
$ sudo yum install -y jenkins
输出示例如下:
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
jenkins noarch 2.452.1-1.1 jenkins 95 M
Transaction Summary
================================================================================
Install 1 Package
Total download size: 95 M
Installed size: 100 M
Downloading Packages:
jenkins-2.452.1-1.1.noarch.rpm 10 MB/s | 95 MB 00:09
——————————————————————————–
Total 10 MB/s | 95 MB 00:09
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: jenkins-2.452.1-1.1.noarch.rpm 1/1
Installing : jenkins-2.452.1-1.1.noarch.rpm 1/1
Running scriptlet: jenkins-2.452.1-1.1.noarch.rpm 1/1
Verifying : jenkins-2.452.1-1.1.noarch.rpm 1/1
Installed:
jenkins-2.452.1-1.1.noarch
Complete!
# Ubuntu/Debian安装
$ curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
$ echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install -y jenkins
方式四:Helm Chart部署
$ helm repo add jenkins https://charts.jenkins.io
输出示例如下:
“jenkins” has been added to your repositories
# 更新仓库
$ helm repo update
输出示例如下:
Hang tight while we grab the latest from your chart repositories…
…Successfully got an update from the “jenkins” chart repository
Update Complete. ⎈Happy Helming⎈
# 搜索Jenkins Charts
$ helm search repo jenkins
输出示例如下:
NAME CHART VERSION APP VERSION DESCRIPTION
jenkins/jenkins 5.1.0 2.452.1 Jenkins – Build great things at any scale…
# 下载Chart
$ helm pull jenkins/jenkins –version 5.1.0
# 解压Chart
$ tar -xzf jenkins-5.1.0.tgz
# 查看Chart内容
$ ls jenkins/
输出示例如下:
Chart.yaml LICENSE README.md templates values.yaml values.schema.json
3. Jenkins安装部署
Jenkins依赖Java运行环境,需要先安装JDK。学习交流加群风哥QQ113257174
步骤1:安装Java环境
$ sudo yum install -y java-17-openjdk java-17-openjdk-devel
输出示例如下:
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
java-17-openjdk x86_64 1:17.0.10.0.7-1.el9 appstream 1.1 M
java-17-openjdk-devel x86_64 1:17.0.10.0.7-1.el9 appstream 5.2 M
Transaction Summary
================================================================================
Install 2 Packages
Total download size: 6.3 M
Installed size: 25 M
Downloading Packages:
(1/2): java-17-openjdk-17.0.10.0.7-1.el9.x86_64.rpm 5.0 MB/s | 1.1 MB 00:00
(2/2): java-17-openjdk-devel-17.0.10.0.7-1.el9.x86_64 8.0 MB/s | 5.2 MB 00:00
——————————————————————————–
Total 10 MB/s | 6.3 MB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : java-17-openjdk-17.0.10.0.7-1.el9.x86_64 1/2
Installing : java-17-openjdk-devel-17.0.10.0.7-1.el9.x86_64 2/2
Running scriptlet: java-17-openjdk-devel-17.0.10.0.7-1.el9.x86_64 2/2
Verifying : java-17-openjdk-17.0.10.0.7-1.el9.x86_64 1/2
Verifying : java-17-openjdk-devel-17.0.10.0.7-1.el9.x86_64 2/2
Installed:
java-17-openjdk-17.0.10.0.7-1.el9.x86_64
java-17-openjdk-devel-17.0.10.0.7-1.el9.x86_64
Complete!
# 验证Java版本
$ java -version
输出示例如下:
openjdk version “17.0.10” 2024-01-16 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.10.0.7-1) (build 17.0.10+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.10.0.7-1) (build 17.0.10+7-LTS, mixed mode, sharing)
# 配置JAVA_HOME
$ echo ‘export JAVA_HOME=/usr/lib/jvm/java-17-openjdk’ >> ~/.bashrc
$ source ~/.bashrc
步骤2:使用WAR包启动Jenkins
$ mkdir -p /data/jenkins
$ cd /data/jenkins
# 启动Jenkins
$ java -jar jenkins.war –httpPort=8080 –prefix=/jenkins
输出示例如下:
Running from: /data/jenkins/jenkins.war
webroot: /root/.jenkins/war
2026-03-15 10:00:00.000+0000 [id=1] INFO winstone.Logger#logInternal: Beginning extraction from war file
2026-03-15 10:00:00.100+0000 [id=1] INFO winstone.Logger#logInternal: Winstone Servlet Engine v5.28 running: controlPort=disabled
2026-03-15 10:00:00.200+0000 [id=1] INFO org.eclipse.jetty.util.log.Log#initialized: Logging initialized @1234ms to org.eclipse.jetty.util.log.Slf4jLog
2026-03-15 10:00:00.300+0000 [id=1] INFO winstone.Logger#logInternal: HTTP Listener started: port=8080
2026-03-15 10:00:00.400+0000 [id=1] INFO winstone.Logger#logInternal: Winstone Servlet Engine started: port=8080
…
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
abc123def456789012345678901234567890123456789012345678901234
This may also be found at: /root/.jenkins/secrets/initialAdminPassword
2026-03-15 10:00:00.500+0000 [id=1] INFO jenkins.install.SetupWizard#init:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
abc123def456789012345678901234567890123456789012345678901234
This may also be found at: /root/.jenkins/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
# 后台启动Jenkins
$ nohup java -jar jenkins.war –httpPort=8080 > jenkins.log 2>&1 &
# 查看进程
$ ps -ef | grep jenkins
输出示例如下:
root 12345 1 15 10:00 pts/0 00:00:05 java -jar jenkins.war –httpPort=8080
步骤3:使用Docker启动Jenkins
$ mkdir -p /data/jenkins_home
# 启动Jenkins容器
$ docker run -d \
–name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-v /data/jenkins_home:/var/jenkins_home \
-v /etc/localtime:/etc/localtime:ro \
–restart=unless-stopped \
jenkins/jenkins:lts
输出示例如下:
abc123def456789012345678901234567890123456789012345678901234
# 查看容器状态
$ docker ps | grep jenkins
输出示例如下:
abc123def456 jenkins/jenkins:lts “/usr/local/bin/jen…” 10 seconds ago Up 9 seconds 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp jenkins
# 获取初始密码
$ docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
输出示例如下:
abc123def456789012345678901234567890123456789012345678901234
# 查看日志
$ docker logs -f jenkins
输出示例如下:
Running from: /usr/share/jenkins/jenkins.war
webroot: /var/jenkins_home/war
2026-03-15 10:00:00.000+0000 [id=1] INFO winstone.Logger#logInternal: Beginning extraction from war file
…
Jenkins initial setup is required. An admin user has been created and a password generated.
4. Jenkins初始化配置
Jenkins首次启动需要进行初始化配置,包括解锁、安装插件和创建管理员用户。from:www.itpux.com
步骤1:解锁Jenkins
# http://192.168.1.51:8080
# 获取初始管理员密码
$ cat /root/.jenkins/secrets/initialAdminPassword
输出示例如下:
abc123def456789012345678901234567890123456789012345678901234
# 或从Docker容器获取
$ docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
输出示例如下:
abc123def456789012345678901234567890123456789012345678901234
步骤2:安装插件
# Jenkins会自动安装以下推荐插件:
# – Folders Plugin
# – OWASP Markup Formatter
# – Build Timeout
# – Credentials Binding
# – Timestamper
# – Workspace Cleanup
# – Ant
# – Gradle
# – Pipeline
# – GitHub Branch Source
# – Pipeline: GitHub Groovy Libraries
# – Pipeline: Stage View
# – Git
# – SSH Build Agents
# – Matrix Authorization Strategy
# – PAM Authentication
# – LDAP
# – Email Extension
# – Mailer
# 安装过程输出示例:
Installing plugins…
Installing Folders Plugin…
Installing OWASP Markup Formatter…
Installing Build Timeout…
Installing Credentials Binding…
Installing Timestamper…
Installing Workspace Cleanup…
Installing Ant…
Installing Gradle…
Installing Pipeline…
Installing GitHub Branch Source…
Installing Pipeline: GitHub Groovy Libraries…
Installing Pipeline: Stage View…
Installing Git…
Installing SSH Build Agents…
Installing Matrix Authorization Strategy…
Installing PAM Authentication…
Installing LDAP…
Installing Email Extension…
Installing Mailer…
All plugins installed successfully.
步骤3:创建管理员用户
# 用户名: admin
# 密码: Admin@12345
# 全名: Jenkins Administrator
# 电子邮件: admin@fgedu.net.cn
# 配置Jenkins URL
# Jenkins URL: http://192.168.1.51:8080/
# 完成配置后,Jenkins会显示”Jenkins is ready!”
5. Jenkins插件管理
Jenkins的强大功能依赖于丰富的插件生态,需要根据实际需求安装和配置插件。风哥提示:生产环境建议只安装必要的插件,避免插件过多影响性能。
步骤1:安装常用插件
# 系统管理 -> 插件管理 -> 可选插件
# 常用插件列表:
# – Chinese (Simplified) Language Pack: 中文语言包
# – Blue Ocean: 现代化UI界面
# – Pipeline Utility Steps: Pipeline实用步骤
# – Docker Pipeline: Docker Pipeline支持
# – Kubernetes: Kubernetes部署支持
# – Git Parameter: Git参数化构建
# – Credentials: 凭证管理
# – SSH Agent: SSH代理
# – Role-Based Strategy: 角色权限管理
# – Configuration as Code: 配置即代码
# – Prometheus Metrics: Prometheus监控指标
# – Build User Vars: 构建用户变量
# – AnsiColor: 控制台输出着色
# 使用CLI安装插件
$ java -jar jenkins-cli.jar -s http://localhost:8080/ -auth admin:Admin@12345 install-plugin \
blueocean \
docker-workflow \
kubernetes \
git-parameter \
role-strategy \
configuration-as-code \
prometheus
输出示例如下:
Installing blueocean from update center
Installing docker-workflow from update center
Installing kubernetes from update center
Installing git-parameter from update center
Installing role-strategy from update center
Installing configuration-as-code from update center
Installing prometheus from update center
Restart required for the changes to take effect. Use ‘restart’ command.
步骤2:配置插件
# 系统管理 -> 系统配置 -> Git
# 配置Maven
# 系统管理 -> 全局工具配置 -> Maven
# 配置JDK
# 系统管理 -> 全局工具配置 -> JDK
# 名称: JDK17
# JAVA_HOME: /usr/lib/jvm/java-17-openjdk
# 配置Git
# 系统管理 -> 全局工具配置 -> Git
# 名称: Default
# Path to Git executable: /usr/bin/git
# 配置Docker
# 系统管理 -> 全局工具配置 -> Docker
# 名称: Docker
# Docker Host URI: unix:///var/run/docker.sock
6. Jenkins Pipeline实战
Jenkins Pipeline是Jenkins 2.x的核心功能,支持使用代码定义完整的构建流程。更多学习教程公众号风哥教程itpux_com
步骤1:创建Pipeline项目
# Pipeline脚本示例
pipeline {
agent any
environment {
PROJECT_NAME = ‘fgedu-app’
VERSION = “${BUILD_NUMBER}”
DOCKER_REGISTRY = ‘192.168.1.51:5000’
}
tools {
maven ‘Maven-3.9’
jdk ‘JDK17’
}
stages {
stage(‘Checkout’) {
steps {
echo ‘Checking out code…’
git branch: ‘main’, url: ‘https://github.com/fgedu/fgedu-app.git’
}
}
stage(‘Build’) {
steps {
echo ‘Building application…’
sh ‘mvn clean package -DskipTests’
}
}
stage(‘Test’) {
steps {
echo ‘Running tests…’
sh ‘mvn test’
}
post {
always {
junit ‘**/target/surefire-reports/*.xml’
}
}
}
stage(‘Docker Build’) {
steps {
echo ‘Building Docker image…’
sh “””
docker build -t ${DOCKER_REGISTRY}/${PROJECT_NAME}:${VERSION} .
docker tag ${DOCKER_REGISTRY}/${PROJECT_NAME}:${VERSION} ${DOCKER_REGISTRY}/${PROJECT_NAME}:latest
“””
}
}
stage(‘Docker Push’) {
steps {
echo ‘Pushing Docker image…’
sh “””
docker push ${DOCKER_REGISTRY}/${PROJECT_NAME}:${VERSION}
docker push ${DOCKER_REGISTRY}/${PROJECT_NAME}:latest
“””
}
}
stage(‘Deploy’) {
steps {
echo ‘Deploying application…’
sh “””
kubectl set image deployment/${PROJECT_NAME} ${PROJECT_NAME}=${DOCKER_REGISTRY}/${PROJECT_NAME}:${VERSION} -n default
“””
}
}
}
post {
success {
echo ‘Pipeline succeeded!’
emailext subject: ‘Build Success: ${PROJECT_NAME} #${BUILD_NUMBER}’,
body: ‘Build ${BUILD_URL} succeeded!’,
to: ‘admin@fgedu.net.cn’
}
failure {
echo ‘Pipeline failed!’
emailext subject: ‘Build Failed: ${PROJECT_NAME} #${BUILD_NUMBER}’,
body: ‘Build ${BUILD_URL} failed!’,
to: ‘admin@fgedu.net.cn’
}
}
}
步骤2:执行Pipeline
# 点击”Build Now”按钮
# 查看构建日志
# 点击构建编号 -> Console Output
# 构建日志示例:
[Pipeline] stage
[Pipeline] { (Checkout)
[Pipeline] echo
Checking out code…
[Pipeline] git
Cloning repository https://github.com/fgedu/fgedu-app.git
> git init /var/jenkins_home/workspace/fgedu-pipeline # timeout=10
Fetching upstream changes from https://github.com/fgedu/fgedu-app.git
> git –version # timeout=10
> git fetch –tags –progress https://github.com/fgedu/fgedu-app.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git config remote.origin.url https://github.com/fgedu/fgedu-app.git # timeout=10
> git config –add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
> git config core.sparsecheckout # timeout=10
> git checkout -f abc123def4567890123456789012345678901234 # timeout=10
> git branch -a -v –no-abbrev # timeout=10
> git checkout -b main abc123def4567890123456789012345678901234 # timeout=10
Commit message: “Update application”
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] echo
Building application…
[Pipeline] sh
+ mvn clean package -DskipTests
[INFO] Scanning for projects…
[INFO]
[INFO] ———————-< com.fgedu:fgedu-app >———————-
[INFO] Building fgedu-app 1.0.0
[INFO] ——————————–[ jar ]———————————
[INFO]
[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ fgedu-app —
[INFO] Deleting /var/jenkins_home/workspace/fgedu-pipeline/target
[INFO]
[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ fgedu-app —
[INFO] Copying 2 resources
[INFO]
[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ fgedu-app —
[INFO] Changes detected – recompiling the module!
[INFO] Compiling 10 source files
[INFO]
[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ fgedu-app —
[INFO] Copying 1 resource
[INFO]
[INFO] — maven-surefire-plugin:2.12:test (default-test) @ fgedu-app —
[INFO] Tests are skipped.
[INFO]
[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ fgedu-app —
[INFO] Building jar: /var/jenkins_home/workspace/fgedu-pipeline/target/fgedu-app-1.0.0.jar
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 10.123 s
[INFO] Finished at: 2026-03-15T10:00:00+08:00
[INFO] ————————————————————————
[Pipeline] }
[Pipeline] // stage
…
[Pipeline] End of Pipeline
Finished: SUCCESS
7. Jenkins Agent配置
Jenkins支持配置多个Agent节点实现分布式构建,提高构建效率。from:www.itpux.com
步骤1:配置SSH Agent
# 节点配置:
# 节点名称: agent-01
# 描述: Jenkins Agent Node 01
# 远程工作目录: /data/jenkins-agent
# 用法: 只允许运行绑定到这台机器的Job
# 启动方式: Launch agents via SSH
# 主机: 192.168.1.52
# 凭证: ssh-key (SSH私钥)
# Host Key Verification Strategy: Non verifying Verification Strategy
# 可用性: Keep this agent online as much as possible
# 查看Agent状态
$ curl -s -u admin:Admin@12345 http://localhost:8080/computer/api/json | jq ‘.computer[].displayName’
输出示例如下:
“master”
“agent-01”
“agent-02”
# 测试Agent连接
$ curl -s -u admin:Admin@12345 http://localhost:8080/computer/agent-01/api/json | jq ‘.offline’
输出示例如下:
false
步骤2:配置Kubernetes Agent
# Kubernetes配置:
# 名称: kubernetes
# Kubernetes URL: https://kubernetes.default
# Kubernetes Namespace: jenkins
# Jenkins URL: http://jenkins.jenkins.svc.cluster.local:8080
# Jenkins tunnel: jenkins-agent.jenkins.svc.cluster.local:50000
# Pod Template配置:
# 名称: jenkins-agent
# 命名空间: jenkins
# 标签: jenkins-agent
# 容器模板:
# 名称: jnlp
# Docker镜像: jenkins/inbound-agent:latest
# 工作目录: /home/jenkins/agent
# 资源请求:
# CPU: 500m
# Memory: 512Mi
# 资源限制:
# CPU: 2000m
# Memory: 2Gi
# Pipeline使用Kubernetes Agent
pipeline {
agent {
kubernetes {
yaml ”’
apiVersion: v1
kind: Pod
metadata:
labels:
app: jenkins-agent
spec:
containers:
– name: jnlp
image: jenkins/inbound-agent:latest
resources:
requests:
cpu: “500m”
memory: “512Mi”
limits:
cpu: “2000m”
memory: “2Gi”
– name: maven
image: maven:3.9.6-eclipse-temurin-17
command:
– cat
tty: true
volumeMounts:
– name: maven-repo
mountPath: /root/.m2
volumes:
– name: maven-repo
persistentVolumeClaim:
claimName: maven-repo-pvc
”’
}
}
stages {
stage(‘Build’) {
steps {
container(‘maven’) {
sh ‘mvn clean package’
}
}
}
}
}
8. Jenkins备份与恢复
Jenkins的数据备份包括配置文件、插件和构建历史,需要定期执行确保数据安全。
步骤1:手动备份
$ tar -czf jenkins_backup_$(date +%Y%m%d).tar.gz -C /root .jenkins
输出示例如下:
tar: Removing leading `/’ from member names
# 查看备份文件
$ ls -lh jenkins_backup_*.tar.gz
输出示例如下:
-rw-r–r– 1 root root 500M Mar 15 10:00 jenkins_backup_20260315.tar.gz
# 备份关键目录
$ tar -czf jenkins_config_$(date +%Y%m%d).tar.gz \
-C /root/.jenkins \
jobs/ \
users/ \
secrets/ \
credentials.xml \
config.xml \
hudson.model.UpdateCenter.xml
# 使用thinBackup插件备份
# 系统管理 -> thinBackup -> Backup Now
# 备份目录: /data/jenkins-backup
步骤2:恢复Jenkins
$ systemctl stop jenkins
# 或停止Docker容器
$ docker stop jenkins
# 恢复数据
$ tar -xzf jenkins_backup_20260315.tar.gz -C /root
# 或恢复到Docker卷
$ tar -xzf jenkins_backup_20260315.tar.gz -C /data/jenkins_home
# 启动Jenkins服务
$ systemctl start jenkins
# 或启动Docker容器
$ docker start jenkins
# 验证恢复
$ curl -s -u admin:Admin@12345 http://localhost:8080/api/json | jq ‘.jobs[].name’
输出示例如下:
“fgedu-pipeline”
“test-job”
“deploy-job”
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
