Jenkins on Docker:从安装到配置的完整实践
一、简介
中文文档:https://www.jenkins.io/zh/
Jenkins 是什么?
Jenkins 是一个开源的、基于 Java 的自动化服务器。它是 持续集成 (Continuous Integration, CI) 和 持续交付/部署 (Continuous Delivery/Deployment, CD) 领域的先驱和领导者之一。
一、主要特点
开源免费
基于 Java 开发,跨平台(Windows/Linux/macOS)。
社区活跃,插件生态庞大(超 1,800 个插件)。
持续集成与持续部署(CI/CD)核心引擎
自动化完成代码构建、测试、打包、部署全流程。
支持 Pipeline as Code(用
Jenkinsfile
定义流水线),实现版本化管理。
高度可扩展
通过插件无缝集成主流工具链(如 Git、Docker、Kubernetes、JIRA、AWS)。
示例:
Docker
插件实现容器化构建;Kubernetes
插件动态调度资源。
分布式构建能力
将任务分发到多台代理节点(Agent),并行执行加速流程。
灵活的任务触发机制
支持代码提交(Git Webhook)、定时任务、手动触发等事件驱动。
可视化与监控
提供构建历史、测试报告、日志追踪和流水线视图,实时监控状态。
二、核心用途
自动化构建与测试
代码编译(如 Maven/Gradle 编译 Java 项目)。
自动化测试(运行单元测试、集成测试,生成覆盖率报告)。
代码质量扫描(集成 SonarQube 检测代码缺陷)。
持续集成(CI)
开发者提交代码后,自动触发构建和测试,10分钟内反馈结果,快速定位问题。
持续交付/部署(CD)
交付流水线:自动打包应用(生成 Docker 镜像/JAR 包)。
自动化部署:发布到测试/生产环境(如通过 Ansible 部署到 Kubernetes)。
基础设施自动化
结合 Terraform/Ansible,实现环境配置的“基础设施即代码(IaC)”。
定时任务调度
定期执行数据库备份、日志清理、报表生成等运维操作。
多环境发布治理
分阶段部署(开发→测试→生产),支持人工审批卡点,保障发布安全。
三、典型应用场景
总之,Jenkins
是一个功能强大、易于使用的持续集成工具,可以帮助团队实现软件开发和交付的自动化。通过自动化构建、测试和部署过程,可以提高团队的效率、减少错误,并加速软件项目的交付。
二、安装
一、安装前准备
这次我们用Docker
进行安装,安装前请先确保服务器上有Docker环境
Jenkins
官方安装文档:docker/README.md at master · jenkinsci/docker
创建Jenkins
数据存放目录并授权,您可以自定义目录位置,所有 Jenkins
数据都位于其中 - 包括插件和配置, 默认jenkins user - uid
为 1000
,所以在创建好目录后需要对目录进行授权,否则安装会报错。
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_home
下secrets/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
即可进入到插件商店,搜索需要安装的插件点击安装即可
Git Parameter
为 Jenkins 构建任务提供动态 Git 参数化能力,允许用户在启动构建时实时选择 Git 仓库中的代码版本(分支、标签、提交记录等)。
Publish Over SSH
实现 Jenkins 与远程 Linux/Unix 服务器之间的安全文件传输和命令执行,打通 CI/CD 最后一公里。
注意:Jenkins插件在安装完成后需要重启才能生效。
二、Jenkins 基础环境配置
一、JDK 配置
Jenkins 配置 JDK 的核心目的是:为 Java 项目提供标准化、隔离的编译和运行环境,确保跨构建任务的可靠执行与多版本兼容性控制。
进入Java Downloads | Oracle Europe选择你服务器相应版本的JDK,复制下载链接。这是
Linux AMD64 JDK21
的下载链接:jdk-21_linux-x64_bin.tar.gz
然后在宿主机
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
解压后进入Jenkins全局工具配置页面
找到
JDK安装
,点击新增JDK
,配置JDK别名
,指定JAVA_HOME
,JAVA_HOME的路径为容器内路径,我的是/var/jenkins_home/Tools/jdk-21.0.7
,也可以勾选自定义安装,由Jenkins自动安装JDK
二、Maven 配置
Jenkins 配置 Maven 的核心目的是:通过标准化构建环境和自动化依赖管理,实现 Java 项目的可靠、高效持续集成与交付。
进入Download Apache Maven – Maven ,选择你服务器相应版本的Maven包,复制下载链接。这是
Linux AMD64 Maven3.9.10
的下载链接:apache-maven-3.9.10-bin.tar.gz
然后进入宿主机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
解压后进入Jenkins全局工具配置页面
找到
Maven 安装
,点击新增 Maven
,配置Mavenname
,指定MAVEN_HOME
,MAVEN_HOME的路径为容器内路径,我的是/var/jenkins_home/Tools/apache-maven-3.9.10
,也可以勾选自定义安装,由Jenkins自动安装Maven
修改
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.xml
中localRepository
标签,解注释修改为你定义的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 具备这个能力。
让 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
其中:
第一个数字
0
是root
用户的 UID第二个数字
65536
就是 docker.sock 所属组的 GID这表示宿主机上的 Docker socket 属于 GID 为
65536
的用户组
修改 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官方文档
首先安装 SonarQube ScannerVersion 插件。
下载对应版本 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
解压后进入Jenkins全局工具配置页面
找到
SonarQube Scanner 安装
,点击新增 SonarQube Scanner,
配置 SonarScannername
,指定SONAR_RUNNER_HOME
,SONAR_RUNNER_HOME 的路径为容器内路径,我的是/var/jenkins_home/Tools/sonar-scanner-7.1.0.4889-linux-x64
,也可以勾选自定义安装,由Jenkins自动安装 SonarQube Scanner。
生成 SonarQube 令牌
登录 SonarQube,依次点击右上角头像
-我的账号
-安全
。输入通用令牌信息,点击生成
。复制保存生成的令牌。
配置 SonarQube 地址、凭证
进入系统管理
-系统配置
,找到SonarQube servers
,点击Add SonarQube
,指定Name
和Server URL
,然后再点击Server authentication token
下方的添加按钮添加密钥
凭据类型选择Secret text
,将刚才生成好的令牌填进Secret
输入框,修改描述为SonarQube-Token
,添加保存即可。
未完待续······