Jenkins 是一个开源的持续集成和持续交付(CI/CD)工具,广泛用于软件开发中的自动化构建、测试和部署流程。它支持数百个插件,几乎可以与所有技术栈无缝集成,是 DevOps 流程中不可或缺的一环。
功能 |
描述 |
持续集成(CI) |
自动化代码合并后的构建和测试流程 |
持续交付 / 部署(CD) |
自动将代码部署到测试、预发布或生产环境 |
任务调度 |
支持定时任务、触发式任务(如 Git 提交后自动构建) |
插件生态丰富 |
支持 Git、Docker、Kubernetes、SonarQube 等主流工具 |
sudo apt update
sudo apt install openjdk-17-jdk -y
java -version
Jenkins 推荐使用 Java 11 或更高版本。
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.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 update
sudo apt install jenkins -y
sudo systemctl start jenkins
sudo systemctl enable jenkins
sudo systemctl status jenkins
打开浏览器访问:
http://<服务器IP>:8080
首次登录时需要查看管理员密码:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
按照提示安装推荐插件,并创建管理员账户。
进入 Jenkins → Manage Jenkins → Plugins → Available plugins
搜索并安装以下插件:
进入 Manage Jenkins → Global Tool Configuration
确保 pom.xml
存在且项目可通过 mvn package
编译打包。
mkdir -p /opt/myapp
cd /opt/myapp
touch restart.sh
chmod +x restart.sh
restart.sh
内容示例:#!/bin/bash
APP_NAME=myapp.jar
PID=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}')
if [ -z "$PID" ]; then
echo "$APP_NAME is not running."
else
echo "Stopping $APP_NAME with PID: $PID"
kill -9 $PID
fi
cp /home/jenkins/workspace/myapp/target/*.jar /opt/myapp/
nohup java -jar /opt/myapp/*.jar > app.log &
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/yourname/yourrepo.git'
}
}
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Deploy') {
steps {
sh '/opt/myapp/restart.sh'
}
}
}
post {
success {
echo 'Build and deploy succeeded!'
}
failure {
echo 'Build or deploy failed.'
}
}
}
pipeline {
agent any
environment {
IMAGE_NAME = "my-springboot-app"
CONTAINER_NAME = "app-container"
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/yourname/yourrepo.git'
}
}
stage('Build JAR') {
steps {
sh 'mvn clean package'
}
}
stage('Build Docker Image') {
steps {
sh """
docker build -t ${IMAGE_NAME} .
"""
}
}
stage('Stop & Remove Old Container') {
steps {
sh """
docker stop ${CONTAINER_NAME} || true
docker rm ${CONTAINER_NAME} || true
"""
}
}
stage('Run New Container') {
steps {
sh """
docker run -d --name ${CONTAINER_NAME} -p 8080:8080 ${IMAGE_NAME}
"""
}
}
}
}
Dockerfile
示例:FROM openjdk:17-jdk-slim
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
http:///github-webhook/
application/json
Just the push event
类别 |
建议 |
权限管理 |
使用 Role-based Authorization Strategy 插件进行权限控制 |
多人协作 |
创建共享用户组、限制敏感操作权限 |
日志审计 |
定期备份 Jenkins Home 目录 |
分布式构建 |
配置 Jenkins Agent(节点),提升并发效率 |
安全加固 |
使用 HTTPS、定期更新插件、关闭匿名访问 |
CI/CD 流水线 |
使用 Declarative Pipeline 语法统一规范 |
通知机制 |
配置邮件通知、Slack、企业微信等通知渠道 |
项目类型 |
部署方式 |
Jenkins Pipeline 示例 |
Spring Boot |
Maven + Shell/Docker |
✔️ 已展示 |
React/Vue 前端 |
npm + Nginx |
✔️ 可通过 Node.js 插件实现 |
Python Flask 应用 |
pip + Gunicorn + Docker |
✔️ 可自定义 Dockerfile |
微服务架构 |
Jenkins + Kubernetes |
✔️ 使用 Kubernetes 插件 |
移动端 App |
Jenkins + Android SDK/iOS 打包工具 |
✔️ 支持 Gradle/Xcode 构建 |
阶段 |
学习内容 |
目标 |
第1阶段 |
Jenkins 安装、基础配置 |
熟悉 Jenkins UI 和基本操作 |
第2阶段 |
创建 Job、Shell 脚本执行 |
能手动执行构建任务 |
第3阶段 |
Pipeline 脚本编写 |
掌握声明式流水线写法 |
第4阶段 |
Git 集成、Webhook 触发 |
实现自动构建 |
第5阶段 |
Docker 集成 |
构建镜像并部署容器 |
第6阶段 |
邮件通知、权限管理 |
提升安全性和可用性 |
第7阶段 |
与 Kubernetes、SonarQube 等集成 |
进阶云原生 CI/CD |
Jenkins 是一款强大的 CI/CD 工具,掌握它可以大幅提升软件开发效率和部署可靠性。从安装配置、流水线编写,到结合 Git、Docker 实现自动化构建与部署,你已经掌握了 Jenkins 的核心技能。