创建第一个Jenkins Freestyle项目 - 从零开始自动化构建

创建第一个Freestyle项目

一、前言

前面的文章我们安装了Jenkins,了解了界面操作。现在到了最激动人心的时刻——创建你的第一个Jenkins构建任务!本文将带你从零开始创建一个Freestyle项目,这是Jenkins最基础也最直观的任务类型。

二、什么是Freestyle项目

Freestyle项目是Jenkins最传统的任务类型,它的特点是:

  • 图形化配置:通过网页界面勾选、填写表单来配置,不需要写代码
  • 简单直观:适合新手入门和简单构建场景
  • 灵活性有限:无法像Pipeline那样定义复杂的流程

什么时候用Freestyle?

  • 简单的编译打包任务
  • 定时执行脚本
  • 快速验证某个构建步骤
  • 不需要复杂流程的简单项目

三、创建Freestyle项目

3.1 新建任务

步骤:

  • 1. 点击左侧菜单 "New Item"(新建任务)
  • 2. 输入任务名称,如 my-first-build
  • 3. 选择 "Freestyle project"(自由风格项目)
  • 4. 点击 "OK"

进入配置页面后,你会看到多个配置区域,我们逐一讲解。

3.2 General(通用配置)

这里是一些基本设置:

  • Description(描述):给任务写个说明,方便团队理解
  • Discard old builds(丢弃旧的构建)
    • Days to keep builds:保留多少天的构建记录
    • Max # of builds to keep:最多保留多少条构建记录
    • 建议设置,否则构建记录会越来越多,占用磁盘空间
  • This project is parameterized(参数化构建):后面会专门讲
  • Build periodically(定时构建):按时间表自动触发构建

四、源码管理(Source Code Management)

如果你的项目需要从Git仓库拉取代码,在这里配置。

4.1 配置Git仓库

选择"Git",填写:

  • Repository URL:Git仓库地址
    • HTTPS方式:https://github.com/username/project.git
    • SSH方式:git@github.com:username/project.git
  • Credentials:选择之前配置的Git凭据
  • Branches to build:指定分支,如 */main*/develop

4.2 高级Git配置

点击"Additional Behaviours"的"Add"按钮,可以添加:

  • Check out to specific local branch:检出到指定本地分支
  • Clean after checkout:检出后清理未跟踪的文件
  • Sparse Checkout paths:只检出指定目录(大仓库很有用)
  • Clone options:设置克隆深度(shallow clone)
# 浅克隆示例 - 只拉取最近5次提交,加快速度
Depth: 5

# 稀疏检出示例 - 只检出src目录
Sparse Checkout paths: src

五、构建触发器(Build Triggers)

构建触发器决定了"什么时候开始构建",这是自动化的核心。

5.1 定时构建(Build periodically)

使用Cron表达式定时触发构建:

# 格式:分 时 日 月 星期

# 每天凌晨2点构建
H 2 * * *

# 每15分钟构建一次
H/15 * * * *

# 工作日每天上午9点构建
H 9 * * 1-5

# 每小时构建一次
H * * * *

注意:用 H 代替具体的分钟数,Jenkins会自动分散负载。比如 H 2 * * * 可能会在2:00-2:59之间的某个时间点执行。

5.2 轮询SCM(Poll SCM)

定期检查代码仓库是否有新的提交,有新提交就触发构建:

# 每5分钟检查一次
H/5 * * * *

# 工作时间每10分钟检查
H/10 9-18 * * 1-5

注意:Poll SCM会持续请求Git服务器,占用资源。推荐使用Webhook代替(后续文章会讲)。

5.3 触发远程构建

通过HTTP请求触发构建:

  • 勾选"Trigger builds remotely"
  • 设置一个Authentication Token,如 my-build-token
  • 触发URL:JENKINS_URL/job/my-first-build/build?token=my-build-token
# 使用curl触发构建
curl -X POST "http://jenkins-server:8080/job/my-first-build/build?token=my-build-token"

# 带参数触发
curl -X POST "http://jenkins-server:8080/job/my-first-build/buildWithParameters?token=my-build-token&env=dev"

5.4 其他项目构建后触发

勾选"Build after other projects are built",填写上游项目名称。当上游项目构建完成后,自动触发当前项目。

六、构建步骤(Build Steps)

这是最核心的配置——定义Jenkins要做什么。

6.1 执行Shell脚本

选择"Execute shell"(Linux)或"Execute Windows batch command"(Windows):

#!/bin/bash
echo "===== 开始构建 ====="

# 显示当前环境
echo "工作目录: $(pwd)"
echo "当前用户: $(whoami)"
echo "Java版本:"
java -version

# 编译项目(以Java Maven项目为例)
echo "===== 编译打包 ====="
mvn clean package -DskipTests

# 显示构建结果
echo "===== 构建完成 ====="
ls -la target/*.jar

# 输出构建信息
echo "构建时间: $(date)"
echo "构建号: ${BUILD_NUMBER}"
echo "构建ID: ${BUILD_ID}"

6.2 调用Maven目标

如果安装了Maven Integration插件,可以选择"Invoke top-level Maven targets":

  • Maven Version:选择之前配置的Maven
  • Goals:填写Maven命令,如 clean package -DskipTests
  • POM:指定pom.xml路径(如果不在根目录)

6.3 执行Python脚本

# 在Shell步骤中执行Python
python3 -c "
import os
import subprocess

print('当前工作目录:', os.getcwd())
print('环境变量 BUILD_NUMBER:', os.environ.get('BUILD_NUMBER', 'N/A'))

# 执行Python脚本
result = subprocess.run(['python3', 'scripts/build.py'], capture_output=True, text=True)
print(result.stdout)
if result.returncode != 0:
    print('构建失败:', result.stderr)
    exit(1)
"

6.4 多个构建步骤

可以添加多个构建步骤,按顺序执行:

  • Step 1:拉取代码(自动完成)
  • Step 2:编译打包
  • Step 3:运行单元测试
  • Step 4:构建Docker镜像
  • Step 5:推送镜像到仓库

七、构建后操作(Post-build Actions)

构建完成后要做什么?这里配置。

7.1 归档构建产物

选择"Archive the artifacts":

  • Files to archivetarget/*.jardist/**
  • 构建成功后,可以在Jenkins页面下载这些文件

7.2 邮件通知

选择"E-mail Notification":

  • Recipients:收件人邮箱,多个用空格分隔
  • 勾选"Send e-mail for every unstable build":不稳定构建也发邮件

7.3 构建其他项目

选择"Build other projects":

  • 当前项目构建成功后,触发其他项目构建
  • 形成构建链:项目A → 项目B → 项目C

7.4 Publish HTML reports

可以发布HTML报告,如测试报告、覆盖率报告:

  • HTML directory to archivetarget/site
  • Index pageindex.html
  • Report titleTest Report

八、构建环境配置

在"Build Environment"区域,还有一些实用设置:

8.1 删除工作空间

勾选"Delete workspace before build starts",每次构建前清理工作空间,确保构建的干净性。

8.2 设置环境变量

勾选"Add timestamps to the Console Output",在构建日志中添加时间戳,方便排查问题。

8.3 注入环境变量

使用"Inject environment variables to the build process":

# 环境变量内容
BUILD_ENV=development
APP_VERSION=1.0.${BUILD_NUMBER}
DEPLOY_SERVER=192.168.1.100

九、构建与查看结果

9.1 手动触发构建

配置完成后,点击左侧 "Build Now",你会看到构建队列和执行器中出现新的构建。

9.2 查看构建日志

点击构建号(如 #1) → "Console Output",查看实时构建日志。这是排查构建问题最重要的工具。

9.3 构建状态说明

  • 🔵 蓝色:构建成功
  • 🔴 红色:构建失败
  • 🟡 黄色:构建不稳定(成功但有测试失败)
  • 灰色:构建被中止或尚未构建

9.4 常用构建变量

在Shell脚本中可以使用Jenkins内置变量:

BUILD_NUMBER    # 构建号,如 42
BUILD_ID        # 构建ID,如 2024-01-15_10-30-00
BUILD_TAG       # 标签,如 jenkins-myproject-42
JOB_NAME        # 任务名称
BUILD_URL       # 构建页面的URL
WORKSPACE       # 工作空间路径
GIT_COMMIT      # 当前Git提交哈希
GIT_BRANCH      # 当前Git分支
NODE_NAME       # 执行构建的节点名称

十、实战:创建一个完整的Java项目构建

让我们把前面学到的知识综合起来,创建一个完整的Java项目构建任务。

配置清单:

  • 任务名称:java-app-build
  • 源码管理:Git,从GitHub拉取代码
  • 构建触发器:Poll SCM,每5分钟检查
  • 构建步骤1:Maven编译打包
  • 构建步骤2:构建Docker镜像
  • 构建步骤3:推送Docker镜像
  • 构建后操作:归档jar包、邮件通知
# 构建步骤1:Maven编译
clean package -DskipTests

# 构建步骤2:构建Docker镜像
docker build -t myapp:${BUILD_NUMBER} .
docker tag myapp:${BUILD_NUMBER} registry.example.com/myapp:${BUILD_NUMBER}
docker tag myapp:${BUILD_NUMBER} registry.example.com/myapp:latest

# 构建步骤3:推送镜像
docker push registry.example.com/myapp:${BUILD_NUMBER}
docker push registry.example.com/myapp:latest

echo "Docker镜像推送完成: registry.example.com/myapp:${BUILD_NUMBER}"

十一、总结

本文手把手带你创建了第一个Freestyle项目:

  • 项目创建:New Item → Freestyle project
  • 源码管理:配置Git仓库和凭据
  • 构建触发器:定时构建、轮询SCM、远程触发
  • 构建步骤:Shell脚本、Maven目标、Python脚本
  • 构建后操作:归档产物、邮件通知、触发下游
  • 实战演练:完整的Java项目构建配置

下一篇我们将学习Jenkins Pipeline——Jenkins的现代化构建方式,更强大、更灵活!

发表回复

后才能评论