一、简介

官网:https://www.jenkins.io

中文文档:https://www.jenkins.io/zh/

Jenkins 是什么?

Jenkins 是一个开源的、基于 Java 的自动化服务器。它是 持续集成 (Continuous Integration, CI)持续交付/部署 (Continuous Delivery/Deployment, CD) 领域的先驱和领导者之一。

一、主要特点

  1. 开源免费

    • 基于 Java 开发,跨平台(Windows/Linux/macOS)。

    • 社区活跃,插件生态庞大(超 1,800 个插件)。

  2. 持续集成与持续部署(CI/CD)核心引擎

    • 自动化完成代码构建、测试、打包、部署全流程。

    • 支持 Pipeline as Code(用 Jenkinsfile 定义流水线),实现版本化管理。

  3. 高度可扩展

    • 通过插件无缝集成主流工具链(如 Git、Docker、Kubernetes、JIRA、AWS)。

    • 示例:Docker 插件实现容器化构建;Kubernetes 插件动态调度资源。

  4. 分布式构建能力

    • 将任务分发到多台代理节点(Agent),并行执行加速流程。

  5. 灵活的任务触发机制

    • 支持代码提交(Git Webhook)、定时任务、手动触发等事件驱动。

  6. 可视化与监控

    • 提供构建历史、测试报告、日志追踪和流水线视图,实时监控状态。


二、核心用途

  1. 自动化构建与测试

    • 代码编译(如 Maven/Gradle 编译 Java 项目)。

    • 自动化测试(运行单元测试、集成测试,生成覆盖率报告)。

    • 代码质量扫描(集成 SonarQube 检测代码缺陷)。

  2. 持续集成(CI)

    • 开发者提交代码后,自动触发构建和测试,10分钟内反馈结果,快速定位问题。

  3. 持续交付/部署(CD)

    • 交付流水线:自动打包应用(生成 Docker 镜像/JAR 包)。

    • 自动化部署:发布到测试/生产环境(如通过 Ansible 部署到 Kubernetes)。

  4. 基础设施自动化

    • 结合 Terraform/Ansible,实现环境配置的“基础设施即代码(IaC)”。

  5. 定时任务调度

    • 定期执行数据库备份、日志清理、报表生成等运维操作。

  6. 多环境发布治理

    • 分阶段部署(开发→测试→生产),支持人工审批卡点,保障发布安全。


三、典型应用场景

场景

Jenkins 实现方案

Web 应用部署

Git 提交 → 构建镜像 → 推送仓库 → 滚动更新 K8s

移动端 CI/CD

自动编译 Android/iOS 包 → 上传测试平台

微服务流水线

并行构建多个服务 → 自动化集成测试 → 灰度发布

数据管道处理

定时运行 Spark 作业 → 生成报表 → 邮件通知

总之,Jenkins 是一个功能强大、易于使用的持续集成工具,可以帮助团队实现软件开发和交付的自动化。通过自动化构建、测试和部署过程,可以提高团队的效率、减少错误,并加速软件项目的交付。

二、安装

一、安装前准备

这次我们用Docker进行安装,安装前请先确保服务器上有Docker环境

Jenkins官方安装文档:docker/README.md at master · jenkinsci/docker

创建Jenkins数据存放目录并授权,您可以自定义目录位置,所有 Jenkins数据都位于其中 - 包括插件和配置, 默认jenkins user - uid1000 ,所以在创建好目录后需要对目录进行授权,否则安装会报错。

 mkdir /mnt/sata1-4/DockerData/JenkinsHome
 #给Jenkins用户授权
 chown -R 1000:1000 /mnt/sata1-4/DockerData/JenkinsHome

二、Docker安装Jenkins

版本选择

进入jenkins/jenkins - Docker Image | Docker Hub查看Jenkins所有发布版本

用命令行进行安装

直接进入服务器命令行执行以下命令即可完成安装 ,记得将/mnt/sata1-4/DockerData/JenkinsHome 替换为您定义的目录。

docker run -p 8080:8080 -p 50000:50000 --restart=on-failure -v /mnt/sata1-4/DockerData/JenkinsHome:/var/jenkins_home jenkins/docker pull jenkins/jenkins:jdk21

或者用compose进行部署

进入你docker数据目录,创建Jenkins目录,然后在Jenkins目录中创建docker-compose.yml文件,编辑文件将下方配置粘贴进文件后保存,执行docker compose up -d 即可完成自动部署

cd /mnt/sata1-4/DockerData/
mkdir jenkins
cd jenkins
vi docker-compose.yml
docker compose up -d

docker-compose.yml 文件内容:

services:
  jenkins:
    ports:
      - 8080:8080
      - 50000:50000
    restart: on-failure
    volumes:
      - /mnt/sata1-4/DockerData/JenkinsHome:/var/jenkins_home
    image: jenkins/jenkins:jdk21
volumes:
  jenkins_home:
    external: true
    name: jenkins_home
networks: {}
​

三、初始化

一、解锁Jenlins

安装完成后访问宿主机8080端口即可进入 Jenkins页面

Jenkins安装好后,默认密码会存放在你宿主机 jenkins_homesecrets/initialAdminPassword文件中

所以我的目录就是 /mnt/sata1-4/DockerData/JenkinsHome/secrets/initialAdminPassword,用cat命令查看密码

root@iStoreOS:/mnt/sata1-4/DockerData# cat /mnt/sata1-4/DockerData/JenkinsHome/secrets/initialAdminPassword
0cf5f3c5a72c4d19af053354dccc53a7
​

二、安装插件

输入密码后进入初始化页面

直接选择安装推荐插件即可,系统会自动安装所需插件,可能需要几分钟,如果插件安装失败也没关系,后续进入Jenkins后也可以安装插件

三、创建管理员用户

插件安装完毕后进入管理员账户创建页面,完善用户信息点击保存。

四、Jenkins实例配置

默认的Jenkins URL 就是对的,直接点击下一步即可,一般为宿主机的IP和你配置的端口号


五、进入首页

完成后访问宿主机8080端口即可进入Jenkins首页,如果你看到如下页面,恭喜你Jenkins已经完成安装了!!!

四、Jenkins 配置

一、必要插件安装

依次点击首页右上角设置图标-选择插件管理-Available plugins 即可进入到插件商店,搜索需要安装的插件点击安装即可

  1. Git Parameter
    Jenkins 构建任务提供动态 Git 参数化能力,允许用户在启动构建时实时选择 Git 仓库中的代码版本(分支、标签、提交记录等)。

  1. Publish Over SSH
    实现 Jenkins 与远程 Linux/Unix 服务器之间的安全文件传输和命令执行,打通 CI/CD 最后一公里。

注意:Jenkins插件在安装完成后需要重启才能生效

二、Jenkins 基础环境配置

一、JDK 配置

Jenkins 配置 JDK 的核心目的是:为 Java 项目提供标准化、隔离的编译和运行环境,确保跨构建任务的可靠执行与多版本兼容性控制。

  1. 进入Java Downloads | Oracle Europe选择你服务器相应版本的JDK,复制下载链接。这是Linux AMD64 JDK21的下载链接:jdk-21_linux-x64_bin.tar.gz

  1. 然后在宿主机JenkinsHome目录下创建Tools文件夹,后面相关的工具文件都可以放在该文件夹下。

#进入JenkinsHome目录
cd /mnt/sata1-4/DockerData/JenkinsHome
#创建文件夹
mkdir Tools
#进入文件夹
cd Tools
#用wget下载JDK
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
#解压JDK到当前文件夹下
tar -zxvf jdk-21_linux-x64_bin.tar.gz
#查看解压文件夹名称
ls
  1. 解压后进入Jenkins全局工具配置页面

  1. 找到JDK安装,点击新增JDK,配置JDK别名,指定JAVA_HOME,JAVA_HOME的路径为容器内路径,我的是/var/jenkins_home/Tools/jdk-21.0.7 ,也可以勾选自定义安装,由Jenkins自动安装JDK

二、Maven 配置

Jenkins 配置 Maven 的核心目的是:通过标准化构建环境和自动化依赖管理,实现 Java 项目的可靠、高效持续集成与交付。

  1. 进入Download Apache Maven – Maven ,选择你服务器相应版本的Maven包,复制下载链接。这是Linux AMD64 Maven3.9.10的下载链接:apache-maven-3.9.10-bin.tar.gz

  1. 然后进入宿主机Tools目录,执行以下命令。

#进入Tools文件夹
cd /mnt/sata1-4/DockerData/JenkinsHome/Tools
#下载Maven
wget https://dlcdn.apache.org/maven/maven-3/3.9.10/binaries/apache-maven-3.9.10-bin.tar.gz
#解压文件
tar -zxvf apache-maven-3.9.10-bin.tar.gz
#查看解压文件夹名称
ls
  1. 解压后进入Jenkins全局工具配置页面

  2. 找到Maven 安装,点击新增 Maven,配置Mavenname,指定MAVEN_HOMEMAVEN_HOME的路径为容器内路径,我的是/var/jenkins_home/Tools/apache-maven-3.9.10 ,也可以勾选自定义安装,由Jenkins自动安装Maven

  1. 修改Maven配置文件,设置Maven使用的JDK和下载的jar包存放位置。

#创建Maven 下载jar包存放位置
mkdir MavenJar
#进入Maven存放配置文件夹
cd apache-maven-3.9.10/conf
#备份配置文件
cp  settings.xml settings.xml.bak
#编辑配置文件
vi settings.xml

配置JDK:settings.xml文件的profiles标签中添加如下内容:

     <profile>
            <id>set-JdkVersion</id>
            <activation>
                <activeByDefault>true</activeByDefault> <!-- 该profile是否默认激活, 不激活的话, 下面的properties是否默认生效, 这里设为true就能激活该profile从而使属性生效. 下方又用<activeProfile>JdkVersion-21</activeProfile>再次确保该profile激活 -->
            </activation>
            <properties>
                <JdkVersion>21</JdkVersion> <!--自定义一个属性用来设置版本,之后可以用${该属性名引用},就不用多处修改了-->
                <maven.compiler.source>${JdkVersion}</maven.compiler.source>
                <maven.compiler.target>${JdkVersion}</maven.compiler.target>  <!-- JRE System Library 的版本和这句相同  -->
            </properties>
        </profile>

配置Jar存放目录:找到settings.xmllocalRepository标签,解注释修改为你定义的jar存放目录,该目录为容器内目录

<localRepository>/var/jenkins_home/Tools/MavenJar</localRepository>

配置maven阿里云镜像仓库:settings.xml文件的mirrors标签中添加如下内容:

    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>*</mirrorOf>
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>

三、Docker 编译环境配置

Jenkins 配置 Docker 编译环境的核心目的是:通过容器化隔离技术,为每个构建任务提供纯净、一致且可移植的编译和测试环境,彻底解决「在我机器上能跑」的依赖冲突问题。

由于我们Jenkins是部署再Docker环境上的。Docker in Docker 太复杂且不安全。所以我们通过 挂载宿主机 Docker 的 socket 文件 让 Jenkins 具备这个能力。

  1. 让 Jenkins 容器使用与宿主机 docker 用户组一致的 GID

宿主机上,Docker socket 的权限通常长这样:

ls -l /var/run/docker.sock 

输出可能类似:srw-rw---- 1 root docker 0 Jul 13 16:07 /var/run/docker.sock

说明这个 socket 属于 docker 用户组。你可以查看 docker 组的 GID:

ls -n /var/run/docker.sock

输出类似这样:srw-rw---- 1 0 65536 0 Jul 13 16:07 /var/run/docker.sock

其中:

  • 第一个数字 0root 用户的 UID

  • 第二个数字 65536 就是 docker.sock 所属组的 GID

  • 这表示宿主机上的 Docker socket 属于 GID 为 65536 的用户组

  1. 修改 Jenkins 的docker-compose.yml文件

services:
  jenkins:
    ports:
      - 8080:8080
      - 50000:50000
    restart: on-failure
    volumes:
      - /mnt/sata1-4/DockerData/JenkinsHome:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock  # 让容器访问宿主机Docker引擎
      - /usr/bin/docker:/usr/bin/docker            # 让容器内有docker命令
    image: jenkins/jenkins:latest-jdk21
    group_add:
      - "65536" #让容器加入宿主机 docker.sock 所属组

执行 docker compose up -d 重启容器即可。

三、外部集成

一、SonarQube 集成

在集成之前你需要先安装 SonarQube ,具体安装方法参考 SonarQube官方文档

  1. 首先安装 SonarQube ScannerVersion 插件。

  2. 下载对应版本 SonarScanner 命令行界面

# 进入Tools文件夹
cd /mnt/sata1-4/DockerData/JenkinsHome/Tools
# 下载命令行界面
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-7.1.0.4889-linux-x64.zip
# 解压文件,解压后文件名称为sonar-scanner-7.1.0.4889-linux-x64
unzip sonar-scanner-cli-7.1.0.4889-linux-x64.zip
  1. 解压后进入Jenkins全局工具配置页面

  2. 找到SonarQube Scanner 安装,点击新增 SonarQube Scanner,配置 SonarScannername,指定SONAR_RUNNER_HOMESONAR_RUNNER_HOME 的路径为容器内路径,我的是/var/jenkins_home/Tools/sonar-scanner-7.1.0.4889-linux-x64 ,也可以勾选自定义安装,由Jenkins自动安装 SonarQube Scanner。

  1. 生成 SonarQube 令牌

登录 SonarQube,依次点击右上角头像-我的账号-安全。输入通用令牌信息,点击生成 。复制保存生成的令牌。

  1. 配置 SonarQube 地址、凭证

进入系统管理-系统配置,找到SonarQube servers,点击Add SonarQube ,指定NameServer URL ,然后再点击Server authentication token下方的添加按钮添加密钥

凭据类型选择Secret text ,将刚才生成好的令牌填进Secret输入框,修改描述为SonarQube-Token,添加保存即可。

未完待续······