Jenkins快速入门教程

前几年在参与维护德国的一个软件项目时,他们使用了Atlassian Bamboo和Bitbucket实现了自动化流程。

当我提交代码到Bitbucket仓库分支时,Bamboo会自动打包,并提供安装包下载。

 

Bitbucket是什么?

Bitbucket Cloud 是一款基于 Git 的代码托管与协作工具,专为团队打造。Bitbucket 一流的 Jira 和 Trello 集成旨在集结整个软件团队以便共同处理一个项目。我们为您的团队提供了一个平台,方便您的团队开展从概念到云的代码协作、通过自动化测试构建优质代码,以及从容地部署代码。

 

Bamboo是什么?

Bamboo是Atlassian推出的持续集成与持续交付(CI/CD)工具,用于自动化构建、测试和部署流程,并与Jira、Bitbucket等产品深度集成。

 

这两款产品都是商业付费使用,一个5-10人小型团队一年的费用大概在3-5w,我还吃不上细糠,所以只能自己去搭建了。

这里我选用的方案是Gogs + Jenkins。Gogs实现代码托管,Jenkins实现CI/CD.

关于Gogs的搭建,在我前面的文章中有介绍过:https://www.cnblogs.com/zhaotianff/p/17887191.html

后续会再更新如何 使用Gogs配合Jenkins实现自动化流程。

本文主要介绍Jenkins的使用。

 

Jenkins是什么

Jenkins 是一款使用Java开发的主流开源自动化服务器,开发人员借助它实现软件构建、测试与部署流程自动化。它是持续集成 / 持续交付(CI/CD)流水线的核心基础工具,支持研发团队高频合并代码变更,并自动将代码发布至生产环境。

项目地址:https://github.com/jenkinsci/jenkins

 

安装步骤

1、安装Java环境

打开Oracle网站Java Downloads | Oracle 中国下载JDK

如果不想麻烦就直接下载Installer或MSI Installer,这两个是安装包,可以省去配置的麻烦。

 

image

 

我这里直接下载压缩包,自行解压。

注意:因为Jenkins里面的插件也是依赖Java环境的,所以必须要配置环境变量。如果是使用Installer或MSI Installer安装的,可以跳过这一步。

运行输入sysdm.cpl,切换到【高级】页,打开环境变量设置

image

 

在系统变量这里增加一个JAVA_HOME变量,变量值设置为JDK的路径

image

 

然后在Path里增加一行%JAVA_HOME%\bin路径

image

 

 此时打开命令提示符/PowerShell/终端,输入Java,输出如下:

image

 

2、下载Jenkins

下载地址:http://mirrors.jenkins.io/war-stable/latest/jenkins.war

 

如果下载速度比较慢,可以到这里下载

https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/

 

这里需要注意Java和Jenkins的版本对应关系

image

 

3、启动Jenkins

下面的命令行可以指定8080端口启动jenkins

注意:需要在已配置java环境变量参数的情况下,在jenkins.war文件所在的目录下启动,不然会提示找不到jenkins.war

1 java -jar jenkins.war --httpPort=8080

 

启动效果如下

image

 

4、打开浏览器,访问http://localhost:8080进行配置

image

 

这里需要输入密码,密码的位置在前面的控制台上已经打印出来了

image

 

题外话:

做开Java开发的同学都知道,在安装Java时是必须要配置环境变量的,要先创建一个%JAVA_HOME%的变量。这是因为很多依赖Java的软件会去读取这个环境变量,如果读取不到Java的路径,可能就会报错。

Jenkins这里也不例外,它需要配置一个%JENKINS_HOME%的环境变量。

这个环境变量会决定后续一些文件的输出路径,如日志、配置等。

我们将jenkins.war放到一个固定路径,例如D:\Software\Jenkins\jenkins.war。

然后再打开环境变量配置界面,增加一个JENKINS_HOME变量

image

 注意:这一步不是必须的,如果没有配置,这些文件会输出在C:\Users\你的用户名\.jenkins和jenkins.war所在目录下。

 

在Windows开发中,我一般很少去配置环境变量,在需要时,调用SetCurrentDirectory win32 api函数即可解决路径问题。

 

5、配置Jenkins

输入密码后进入插件配置界面

image

 

我这里直接点了安装推荐的插件

image

 

安装完成后进入管理员用户配置界面

如果遇到安排失败的插件也没关系,直接点继续,进入管理员用户配置界面

image

 

点击保存并完成,进入实例配置,这里直接用默认的配置

image

 

进入主界面

image

 

注意:

因为网络原因或其它原因,在前面安装插件时,会出现插件安装失败的情况。可以尝试下面的方法。

1、点击设置,进入插件管理

image

 

2、选择高级设置

找到升级站点,修改为https://mirrors.huaweicloud.com/jenkins/update-center.json

image

 

 

此时再手动去安装前面安装失败的插件。

如果还是不行,可以直接打开 https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/

找到你需要的插件,并下载对应版本的文件,然后手动部署。

image

 

当进入系统配置页面没有任何报错时,代表所有的插件包括依赖插件都已经安装好了。

image

 

Pipeline

在系统架构设计中,有一种模式叫管道-过滤器(Pipe-Filter)模式。这种模式的核心就是将复杂任务拆解为多个处理单元(过滤器),数据在上一个单元处理完毕后,自动流入下一个单元继续处理。

Jenkins中的Pipeline(流水线)也是类似的原理。例如,代码提交后(或通过定时/手动触发),流水线会按依赖关系依次执行构建、测试、部署等阶段。

但一般在管道-过滤器模式中,处理的是纯数据。Jenkins Pipeline不仅传递数据流,更侧重于构建产物(Artifact)的流转和环境状态的传递。

同时,现代Pipeline还支持并行执行非依赖阶段,从而大幅提升自动化效率,本质上是将线性的“数据流”扩展为了带有依赖关系的“任务编排”。

 

 

通过下图我们就可以有一个直观的了解:

 

a58df4885f62ad90c38f9dc8be2d3b96_realworld-pipeline-flow

 

Jenkinsfile

对Jenkins 流水线的定义被写在一个文本文件中 (成为 Jenkinsfile),该文件可以被提交到项目的源代码的控制仓库。 

这是"流水线即代码"的基础; 将CD 流水线作为应用程序的一部分,像其他代码一样进行版本化和审查。 创建 `Jenkinsfile`并提交它到源代码控制中提供了一些即时的好处:

  • 自动地为所有分支创建流水线构建过程并拉取请求。

  • 在流水线上代码复查/迭代 (以及剩余的源代码)。

  • 对流水线进行审计跟踪。

  • 该流水线的真正的源代码, 可以被项目的多个成员查看和编辑。

 

流水线语法

Jenkins Pipeline 支持两种核心语法:声明式流水线(Declarative Pipeline) 和脚本化流水线(Scripted Pipeline)。它们底层使用相同的执行引擎-,核心区别在于设计哲学和灵活性

 

两种语法对比

 
特性声明式流水线 (Declarative)脚本化流水线 (Scripted)
核心设计 结构化的声明
灵活强大的Groovy脚本
语法结构 严格预定义,如 pipelinestagessteps
自由,基于Groovy语法,如 nodestage-
核心块 pipeline { ... }
node { ... }
可读性
中低
灵活性

适用场景 大多数标准CI/CD流程
需要复杂条件、自定义逻辑的非常规流程
学习曲线 平缓
陡峭
推荐度 Jenkins官方推荐
用于旧项目或特殊定制需求

 

 

声明式流水线

这是Jenkins官方推荐的、更现代化的流水线写法。

在声明式流水线语法中, pipeline 块定义了整个流水线中完成的所有的工作。 

  • 核心构成

    • agent:定义流水线或某个阶段在哪里执行(如 anylabel

    • stages:包含一个或多个 stage,每个 stage 代表流水线的一个逻辑阶段

    • steps:在 stage 内部,定义要执行的具体操作,这是最核心的部分

    • post:定义流水线或阶段执行后的操作(如 alwayssuccessfailure

    • when:条件判断指令,用于控制阶段是否执行

  • 优点:代码结构清晰,可读性和可维护性极高;语法错误能在脚本开始时被快速发现

  • 缺点:灵活性不足,复杂的编程逻辑需要通过 script {} 块来“借用”脚本化流水线的能力

 

我们可以看一下一个简单的声明式流水线示例

 1 pipeline {
 2     agent any  // 1
 3     stages {
 4         stage('Build') {   // 2
 5             steps {
 6                 // 3
 7             }
 8         }
 9         stage('Test') {  // 4
10             steps {
11                 // 5
12             }
13         }
14         stage('Deploy') {  // 6
15             steps {
16                 // 7
17             }
18         }
19     }
20 }

 

步骤1:在任何可用的代理上,执行流水线或它的任何阶段。
步骤2:定义 "Build" 阶段。
步骤3:执行与 "Build" 阶段相关的步骤。
步骤4:定义"Test" 阶段。
步骤5:执行与"Test" 阶段相关的步骤。
步骤6:定义 "Deploy" 阶段。
步骤7:执行与 "Deploy" 阶段相关的步骤。

 

方便大家理解 ,这里我们先试验 一下。

打开Jenkins主页,选择Create a job

image

 

输入任务名称,选项类型为流水线

image

 

 

posted @ 2026-06-23 12:43  zhaotianff  阅读(5)  评论(0)    收藏  举报