@Jenkins 介绍、部署与使用标准作业程序
文章目录
- **1. 介绍与核心概念**
- **2. 部署**
- **3. 使用指南 (SOP)**
- **4. 常见问题 (FAQ)**
- 5.**Jenkins 官方资源链接**
- **1>. 项目首页与文档**
- **2>. 下载与安装**
- **3>. 插件中心**
- **4>. 问题追踪与社区支持**
- **6. 总结**
1. 介绍与核心概念
1.1 什么是 Jenkins?
Jenkins 是一个开源的、可扩展的持续集成、持续交付和持续部署 (CI/CD) 自动化服务器。它用于自动化软件开发过程中各种重复性技术任务,例如构建、测试和部署应用程序,从而加快开发周期并提高软件质量。
1.2 核心概念
- 持续集成 (CI): 开发人员频繁地将代码变更合并到共享主干中。每次合并都会触发一个自动化流程(构建、测试),以尽早发现集成错误。
- 持续交付/部署 (CD): 自动化流程将集成后的代码可靠地交付到测试、预发布和生产环境。
- 流水线 (Pipeline): 一套插件,支持将整个交付流程建模为一套代码(Jenkinsfile),定义了从构建到部署的所有阶段。
- 节点 (Node/Agent): 执行 Jenkins 任务的机器。主节点(Master)协调任务,代理节点(Agent)执行任务。
- 任务 (Job): 由一个配置脚本或插件定义的一个自动化流程,例如构建一个项目。
1.3 为什么选择 Jenkins?
- 开源且活跃的社区: 拥有庞大的用户群和丰富的插件生态。
- 高度可扩展: 通过超过 1800 个插件与几乎所有现代开发工具链集成。
- 易于安装和配置: 基于 Java,可以运行在任何主流操作系统上。
- 强大的流水线即代码 (Pipeline as Code): 使用 Groovy 语法将整个 CI/CD 流程版本化和管理。
2. 部署
本文提供两种主流的部署方式:使用 Docker(推荐用于快速学习和测试)和使用原生 War 包(推荐用于生产或稳定环境)。
环境准备:
- 一台运行 Linux 的服务器(例如 Ubuntu 22.04 LTS 或 CentOS 7/8)。
- 确保服务器具有互联网连接以下载软件包。
- 具备
sudo
权限的用户。
2.1 方式一:使用 Docker 部署 (推荐用于测试)
步骤 1: 安装 Docker
# 更新包索引
sudo apt-get update# 安装必要的依赖
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 设置稳定版仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io# 将当前用户加入 docker 组,避免每次使用 sudo
sudo usermod -aG docker $USER
# 退出终端重新登录使组更改生效
步骤 2: 运行 Jenkins Docker 容器
# 创建本地卷用于持久化 Jenkins 数据(防止容器删除后数据丢失)
mkdir ~/jenkins_home# 运行容器
docker run -d \--name jenkins \-p 8080:8080 -p 50000:50000 \-v ~/jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \ # 允许在容器内运行 Docker 命令(Docker in Docker)--restart unless-stopped \jenkins/jenkins:lts-jdk17
-d
: 后台运行。--name
: 容器名称。-p
: 端口映射。8080
是 Web 界面端口,50000
用于代理节点通信。-v
: 卷映射,将容器内的数据目录映射到宿主机。--restart
: 设置容器随 Docker 服务自动重启。
步骤 3: 查看初始管理员密码
docker logs jenkins
# 在日志中寻找如下一行,复制密码:
# *************************************************************
# *************************************************************
# *************************************************************
# Jenkins initial setup is required. An admin user has been created and a password generated.
# Please use the following password to proceed to installation:
#
# your_initial_admin_password_here
#
# This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
# *************************************************************
2.2 方式二:使用 War 包部署 (推荐用于生产)
步骤 1: 安装 Java (Jenkins 依赖)
# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-17-jdk# CentOS/RHEL
sudo yum install java-17-openjdk-devel# 验证安装
java -version
步骤 2: 安装 Jenkins
# 1. 添加 Jenkins 仓库密钥和源
curl -fsSL https://pkg.jenkins.io/debian/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 binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null# 2. 更新并安装
sudo apt-get update
sudo apt-get install jenkins# 对于 CentOS/RHEL,请参考官方文档:https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos
步骤 3: 启动并设置开机自启
sudo systemctl start jenkins
sudo systemctl enable jenkins # 设置开机自启
sudo systemctl status jenkins # 检查状态
步骤 4: 防火墙放行端口
# 如果使用了防火墙
sudo ufw allow 8080
sudo ufw allow 50000
sudo ufw enable
sudo ufw status
2.3 初始设置 (两种方式通用)
- 在浏览器中访问
http://<你的服务器IP>:8080
。 - 输入从日志或文件中获取的初始管理员密码。
- (对于 War 包部署)密码位于:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- (对于 War 包部署)密码位于:
- 安装推荐插件:选择“Install suggested plugins”,等待插件安装完成。
- 创建第一个管理员用户:填写信息,创建新的管理员账户(务必记住密码)。
- 实例配置:保持默认 URL
http://<你的服务器IP>:8080/
即可。 - 开始使用 Jenkins:点击“Save and Finish” -> “Start using Jenkins”。
3. 使用指南 (SOP)
3.1 创建一个简单的自由风格任务 (Freestyle Project)
- 点击 Jenkins 首页的 “新建任务”。
- 输入任务名称(例如
my-first-job
),选择 “自由风格项目”,点击 “确定”。 - 配置页面:
- 源码管理: 如果使用 Git,选择 “Git”,填入 Repository URL 和凭证(需要提前在“Manage Jenkins” -> “Manage Credentials”中添加)。
- 构建触发器: 例如,设置“轮询 SCM”(
H/5 * * * *
表示每 5 分钟检查一次代码变更)。 - 构建环境: 按需选择。
- 构建: 点击“增加构建步骤”,选择“Execute shell”(Linux)或“Execute Windows batch command”(Windows)。
# 示例:简单的 Shell 构建步骤 echo "Hello, World! Starting Build..." mvn clean package # 如果是 Maven 项目 # 或者 # npm install && npm run build # 如果是 Node.js 项目
- 构建后操作: 例如,“Archive the artifacts” 归档构建产物(如
target/*.jar
)。
- 点击 “保存”。
3.2 立即构建
在任务页面,点击左侧的 “立即构建”。构建历史中会出现一个球体,点击它并选择 “控制台输出” 来查看实时构建日志。
3.3 创建流水线任务 (Pipeline as Code - 推荐方式)
流水线是更强大、更灵活的现代方式。
- 新建任务 -> 输入名称 -> 选择 “流水线” -> “确定”。
- 在配置页面向下滚动到 “Pipeline” 部分。
- 定义: 选择 “Pipeline script from SCM”。
- SCM: 选择 “Git”。
- 填入你的 Git 仓库地址和凭证,该仓库根目录需要包含一个
Jenkinsfile
。 - 指定脚本路径(默认为
Jenkinsfile
)。 - 点击 “保存”。
3.4 编写一个简单的 Jenkinsfile
在你的项目根目录创建一个名为 Jenkinsfile
的文件(无后缀)。
pipeline {agent any // 在任何可用代理上运行stages {stage('Build') {steps {echo 'Building...'// 例如: sh 'mvn clean package'}}stage('Test') {steps {echo 'Testing...'// 例如: sh 'mvn test'}}stage('Deploy') {steps {echo 'Deploying...'// 例如: sh 'scp target/*.jar user@server:/path/to/deploy/'}}}post {always {echo 'This will always run at the end, success or failure.'}success {echo 'I will only run if the pipeline was successful!'// 例如: mail to: 'team@example.com', subject: 'Pipeline Succeeded!', body: 'Great!'}failure {echo 'I will only run if the pipeline had a failure :('}}
}
提交并推送 Jenkinsfile
到 Git 仓库。下次代码变更或轮询时,Jenkins 会自动拉取代码并执行 Jenkinsfile
中定义的流水线。
4. 常见问题 (FAQ)
Q1: 忘记管理员密码怎么办?
A: 如果未创建其他管理员账户:
- 找到 Jenkins 的
config.xml
文件(Docker 在~/jenkins_home
,War 包在/var/lib/jenkins
)。 - 备份后,编辑
config.xml
。 - 找到
useSecurity
和authorizationStrategy
相关标签,全部删除。 - 重启 Jenkins 服务 (
sudo systemctl restart jenkins
或docker restart jenkins
)。 - 再次访问 Web 界面,此时无需密码。请立即在 “Manage Jenkins” -> “Security” 中重新配置用户身份验证。
Q2: 插件安装失败或速度慢?
A: 这是由于默认插件中心服务器在国外。
- 进入 “Manage Jenkins” -> “Manage Plugins” -> “Advanced”。
- 在 “Update Site” 中,将
URL
替换为清华大学镜像源:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
- 点击 “Submit”,然后重启 Jenkins。
Q3: 构建时提示 “npm: not found” 或 “mvn: not found”?
A: Jenkins 容器或节点上没有安装这些工具。
- 对于 Docker 部署: 你需要一个包含这些工具的定制镜像,或者在 Shell 步骤中动态安装它们(不推荐,每次都会下载)。
- 对于 War 包部署: 需要在 Jenkins 主机构造这些工具,并告诉 Jenkins 路径。
- 进入 “Manage Jenkins” -> “Tools”。
- 添加 JDK、Maven、NodeJS 等的安装路径和自动安装配置。
- 在任务配置中,选择对应的工具版本。
Q4: “No such file or directory” 或权限被拒绝?
A: 路径错误或 Jenkins 用户(通常是 jenkins
)没有执行权限。
- 检查文件路径是否正确。
- 对于 War 包部署,检查
/var/lib/jenkins
目录的权限:sudo chown -R jenkins:jenkins /var/lib/jenkins
。
Q5: 如何备份和迁移 Jenkins?
A: 最安全的方式是备份整个 JENKINS_HOME
目录(对于 Docker 是 ~/jenkins_home
,对于 War 包是 /var/lib/jenkins
)。这个目录包含了所有配置、任务历史和插件数据。只需将此目录复制到新服务器并重新安装 Jenkins,然后指向这个目录即可。
5.Jenkins 官方资源链接
1>. 项目首页与文档
- Jenkins 官方网站
- 链接: https://www.jenkins.io/
- 说明: 这是 Jenkins 项目的门户网站。所有最重要的信息和链接都可以从这里找到。
- Jenkins 官方文档 (极度重要)
- 链接: https://www.jenkins.io/doc/
- 说明: 这是最全面、最权威的使用手册。包含入门指南、用户手册、插件开发指南等。遇到任何问题,都应首先从这里开始查找。
2>. 下载与安装
- 官方下载页面
- 链接: https://www.jenkins.io/download/
- 说明: 提供所有版本的下载,包括 Generic Java package (.war)、原生系统包(Docker, Windows, macOS, Linux/Unix)等。
- Docker Hub 官方镜像
- 链接: https://hub.docker.com/r/jenkins/jenkins/
- 说明: 获取官方 Docker 镜像及其不同标签(如
lts
,lts-jdk17
,latest
)的详细说明。
3>. 插件中心
- Jenkins 插件索引
- 链接: https://plugins.jenkins.io/
- 说明: 官方插件库。你可以在这里搜索、浏览所有可用插件,查看其文档、版本历史和兼容性。
4>. 问题追踪与社区支持
- GitHub Issues (Bug 报告与功能请求)
- 链接: https://github.com/jenkinsci/jenkins/issues
- 说明: 如果你认为发现了一个 Jenkins 核心本身的 Bug,或者有新的功能需求,可以在这里搜索或提交 Issue。
6. 总结
本文档涵盖了从 Jenkins 的核心概念到两种主流部署方式(Docker 和 War 包),再到基本和高级(流水线)的使用方法,并提供了常见问题的解决方案。遵循此文档,您应该能够成功地搭建起一个功能完整的 Jenkins CI/CD 服务器,并开始自动化您的软件交付流程。
下一步建议:
- 探索 Blue Ocean 插件,它提供了一个更直观、可视化的流水线界面。
- 学习如何设置 分布式构建代理(节点) 以分担主节点压力。
- 深入研究 Jenkinsfile 语法,实现更复杂的交付流程。
- 集成 SonarQube(代码质量检测)、Nexus(制品库)等工具,完善你的 DevOps 工具链。