Freestyle vs Pipeline:我该怎么选?
好,在动手之前,咱得先搞清楚一件事:Jenkins 给我们准备了两大类项目类型,一个是 Freestyle Project(自由风格项目),另一个是 Pipeline(流水线项目)。
什么时候用 Freestyle?
刚学习 Jenkins,想快速看到效果
构建步骤简单(拉代码→编译→打包)
临时任务,不需要长期维护
为什么最终要迁移到 Pipeline?
Freestyle 的配置存在 Jenkins 内部,一旦误操作丢了就麻烦了
Pipeline 可以把构建流程当做代码来管理,配合 Git 使用
团队协作时,Pipeline 的代码审查机制更安全
所以哈,今天咱们学 Freestyle 是为了打基础,后续章节咱们会深入 Pipeline!
创建 Freestyle 项目的完整流程
第一步:新建任务
登录 Jenkins 控制台,点击左侧菜单的 「新建任务」:
输入任务名称,建议用有意义的命名,比如
hello-world-build选择 「构建一个自由风格的软件项目」
点击 「OK」 进入详细配置页面
配置页面有几个Tab,咱一个个来看。
第二步:源码管理配置
这一步是让 Jenkins 知道从哪拉代码。咱们以 Git 为例:
勾选 Git
Repository URL:填仓库地址,这里有两种方式:
HTTPS 克隆:
https://github.com/username/repo.gitSSH 克隆:
git@github.com:username/repo.git
Credentials:添加访问凭证
凭证配置详解
HTTPS 方式需要配置用户名密码或 Personal Access Token:
# GitHub 生成 Personal Access Token 步骤:
# Settings → Developer settings → Personal access tokens → Generate new token
# 勾选 repo 和 admin:repo_hook 权限添加凭证:
点击 「添加」 → 「Jenkins」
类型选择 「用户名和密码」
填入 GitHub 用户名和刚才生成的 Token(Token 当密码用)
SSH 方式需要配置 SSH 密钥:
# 1. 生成 SSH 密钥(如果还没有的话)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 2. 查看公钥
cat ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAA... your_email@example.com
# 3. 把公钥添加到 GitHub/GitLab 的 SSH Keys 设置中然后在 Jenkins 中添加 「SSH用户名-private key」 类型的凭证。
克隆方式对比
第三步:构建触发器
构建触发器决定了什么时候自动执行构建。常见的有这几种:
定时构建(Build periodically)
使用 cron 表达式,格式是:MINUTE HOUR DOM MONTH DOW
常用示例:
# 每5分钟构建一次
H/5 * * * *
# 每天早上8点构建(工作日)
H 8 * * 1-5
# 每天下午6点构建
H 18 * * *
# 每周一早上9点构建
H 9 * * 1
# 每2小时构建一次
H H/2 * * *
# 每天凌晨2点构建(适合跑测试)
H 2 * * *cron 表达式小贴士:
MINUTE:分钟,0-59HOUR:小时,0-23DOM:每月几号,1-31MONTH:月份,1-12DOW:每周几,1-7(1=周一,7=周日)H:Hash关键字,让 Jenkins 自动分配时间,避免多任务同时执行
Poll SCM(轮询代码变更)
和定时构建类似,但只有检测到代码变化时才真正构建:
# 每10分钟检查一次代码变化,有变化才构建
H/10 * * * *⚠️ 注意:Poll SCM 会产生额外的 API 调用,大型项目可能触发 GitHub 的速率限制。如果仓库人多,建议用 Webhook。
Webhook 触发
代码推送时自动触发构建,这是最推荐的方式!咱们会在第4章详细讲。
手动触发 + 参数化构建
在「General」Tab 勾选 「参数化构建过程」,添加字符串参数:
Name: BRANCH
Default Value: main
Description: 要构建的分支名这样每次构建可以选择不同的参数,超级灵活。
第四步:构建步骤
构建步骤是整个项目的核心,告诉 Jenkins 实际要执行什么操作。
执行 Shell(Linux/Mac)
#!/bin/bash
# 打印环境信息
echo "===== 开始构建 ====="
echo "工作目录: $WORKSPACE"
echo "构建编号: $BUILD_NUMBER"
# 清理之前的构建产物
mvn clean
# 编译项目
mvn compile
# 运行测试
mvn test
# 打包
mvn package -DskipTests
# 输出结果
echo "===== 构建完成 ====="
ls -la target/*.jar 2>/dev/null || echo "没有找到jar包"执行 Windows Batch
@echo off
echo ===== 开始构建 =====
call mvn clean
call mvn package -DskipTests
echo ===== 构建完成 =====
dir target\\*.jar调用顶层 Maven 目标
如果安装了 Maven 插件,可以直接选择 Maven 版本和目标:
Maven 版本: Maven 3.9
Goals: clean package -DskipTests
POM 文件: pom.xml第五步:构建后操作
构建完成后可以做一些收尾工作:
邮件通知
安装 Email Extension Plugin
在「构建后操作」添加 「Editable Email Notification」
配置收件人、邮件内容模板
基础配置示例:
收件人: developer@example.com
主题: $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS
内容:
构建结果: $BUILD_STATUS
构建链接: $BUILD_URL归档构建产物(Archive artifacts)
把构建产生的文件保存起来,方便后续下载:
Files to archive: target/*.jar触发其他项目
串联多个构建任务:
Projects to build: other-job-name常见问题
Q1:克隆代码时报 "Failed to connect to repository"
原因:网络不通或凭证配置错误
解决方案:
检查 Jenkins 机器能否访问 Git 仓库:
curl -I https://github.com确认凭证有效,试试用同样的凭证在 Jenkins 机器上手动克隆
如果是内网环境,检查代理设置
Q2:SSH 方式克隆失败,提示 "Permission denied"
原因:SSH 密钥配置问题
解决方案:
确认公钥已添加到 GitHub/GitLab
在 Jenkins 凭证中正确选择了私钥
测试 SSH 连接:
ssh -T git@github.com(在 Jenkins 机器上执行)
Q3:定时构建没有执行
原因:cron 表达式格式错误
解决方案:
cron 表达式是5个字段,不是6个(没有秒)
用在线 cron 表达式校验器验证
检查 Jenkins 系统时间是否正确
Q4:构建产物归档后找不到文件
原因:路径写错了
解决方案:
使用通配符更宽松:
target/**/*.jar在构建脚本中用
pwd和ls确认实际路径检查「保留较久构建天数」设置,避免被清理
总结
今天咱们学了这些:
Freestyle 和 Pipeline 的区别,以及各自的适用场景
如何创建 Freestyle 项目
Git 源码管理的两种克隆方式和凭证配置
四种构建触发器:定时、轮询、Webhook、参数化
构建步骤:Shell 脚本和 Maven 调用
构建后操作:邮件通知、归档产物
Freestyle 适合快速验证和学习,但要真正掌握 Jenkins 自动化,Webhook 是关键!下一章咱们就来看看 Git 集成与 Webhook 自动触发,实现代码推送自动构建的效果!
练习题
任务:创建你的第一个 Freestyle 项目
目标:创建一个 Freestyle 项目,从 GitHub 拉取代码并执行 Maven 构建
具体要求:
创建名为
my-first-freestyle的 Freestyle 项目源码管理使用 HTTPS 方式连接 GitHub
配置轮询 SCM,每15分钟检查一次代码变化
构建步骤执行
mvn clean package -DskipTests归档
target/*.jar文件
验收标准:
✅ 项目创建成功,能看到完整的配置界面
✅ 首次构建能够成功执行(控制台输出 "BUILD SUCCESS")
✅ 构建产物能正常归档,可以在构建历史中下载 jar 包
✅ 配置了轮询 SCM,能自动检测代码变化
验证方式:
手动点击「立即构建」
查看控制台输出,确认 Maven 构建流程
访问构建产物的归档链接,确认 jar 包可下载
修改 GitHub 仓库代码,等待15分钟观察是否自动触发(或者手动再点一次构建)