Docker部署Jenkins持续集成(CI)工具的实现

 更新时间:2025年02月27日 09:13:21   作者:老友@  
Jenkins 是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧

前言

Jenkins 是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中。通过 Docker 部署 Jenkins,可以简化安装和配置过程,并让你方便地管理 Jenkins 容器。

本文将介绍如何使用 Docker 部署 Jenkins,并对比两种端口配置方式:使用 host 网络模式和使用 port 映射来设置 Jenkins 容器的访问端口。

一、准备工作

首先,确保你的系统上已经安装了 Docker。

Linux上进行Docker安装有两种方式:

  • Docker自动化安装
  • Docker手动安装

可以根据该文章的步骤进行安装:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502

二、设置变量和目录结构

在部署 Jenkins 之前,首先设置一些变量并创建相关目录,以确保 Jenkins 数据和日志能够持久化存储。

#!/bin/bash

# 设置变量
PORT=8081
PROJECT_DIR="/opt/docker/jenkins"

# 创建目录结构
mkdir -p "$PROJECT_DIR/jenkins_home"
mkdir -p "$PROJECT_DIR/logs"
  • PORT=8081 设置 Jenkins 容器暴露的端口。可以根据需求修改为其他端口。
  • PROJECT_DIR 是 Jenkins 配置和数据存储的根目录。
  • 创建 jenkins_home 目录来存储 Jenkins 的数据。
  • 创建 logs 目录来存储 Jenkins 的日志文件。

三、配置 Docker 权限和网络

运行 Jenkins 容器时,我们可能需要赋予它一些特权和网络设置,具体如下:

  • --privileged=true:该选项赋予容器管理员权限,这样容器可以执行更多操作。需要评估是否赋予这个权限。
  • --network=host:使容器与主机共享网络堆栈,而不进行端口映射。Jenkins 将直接使用主机的端口。
  • --cap-add=NET_ADMIN:允许容器管理网络接口,某些 Jenkins 插件可能需要此权限。
  • --cap-add=SYS_PTRACE:允许容器内的进程进行调试,通常用于调试工具或监控进程。

四、启动 Jenkins 容器

1. 使用 host 网络模式(共享主机网络)

通过设置 --network host,容器将直接使用宿主机的网络堆栈。此时,不需要端口映射,容器会占用主机上的端口 8080。因此,访问 Jenkins 的 URL 会直接是宿主机的 IP 地址。

# 运行 Jenkins 容器(使用 host 网络)
docker run -d \
  --restart=always \
  --cap-add=SYS_PTRACE \
  --cap-add=NET_ADMIN \
  --name jenkins \
  -u root \
  -e JENKINS_OPTS="--httpPort=$PORT" \
  -v "$PROJECT_DIR/jenkins_home:/var/jenkins_home" \
  -v "$PROJECT_DIR/logs:/var/log/jenkins" \
  -v "/var/run/docker.sock:/var/run/docker.sock" \
  -v "/etc/localtime:/etc/localtime" \
  --network host \
  jenkins/jenkins:lts-alpine-jdk17

修改 host模式下 Jenkins 端口的正确方法:

如果你需要更改 Jenkins URL 或 端口,可以直接修改 jenkins.model.JenkinsLocationConfiguration.xml 文件。
这个文件通常位于 Jenkins 的数据目录中(即 /var/jenkins_home)。

  • 找到并打开 /var/jenkins_home/jenkins.model.JenkinsLocationConfiguration.xml 文件。

  • 修改 标签中的端口部分,例如:

    <jenkinsUrl>http://localhost:8081/</jenkinsUrl>
    

优点:

  • 不需要额外的端口映射,容器和主机共享网络堆栈。
  • 对于没有多个容器的简单环境,配置非常方便。

缺点:

  • 端口直接共享主机端口,因此如果主机上有其他服务占用了相同的端口,可能会导致冲突。
  • 不能灵活配置容器的端口映射。

2. 使用 port 映射(绑定特定端口)

如果你想控制容器的端口映射,或者在一台机器上运行多个 Docker 容器,可以使用 -p 参数将宿主机的端口映射到容器的端口。在这种情况下,Jenkins 容器会绑定到宿主机的指定端口,而不是共享整个主机的网络。

# 运行 Jenkins 容器(使用端口映射)
docker run -d \
  --restart=always \
  --cap-add=SYS_PTRACE \
  --cap-add=NET_ADMIN \
  --name jenkins \
  -u root \
  -p "$PORT:8080" \
  -v "$PROJECT_DIR/jenkins_home:/var/jenkins_home" \
  -v "$PROJECT_DIR/logs:/var/log/jenkins" \
  -v "/var/run/docker.sock:/var/run/docker.sock" \
  -v "/etc/localtime:/etc/localtime" \
  jenkins/jenkins:lts-alpine-jdk17

优点:

  • 容器和宿主机的网络堆栈相互隔离,避免了端口冲突。
  • 可以灵活设置宿主机与容器之间的端口映射。
  • 适合在单台机器上运行多个容器时使用不同的端口。

缺点:

  • 需要手动设置端口映射(如果有多个容器)。

五、Docker 内安装 Docker 环境

如果你需要在 Jenkins 容器内执行 Docker 命令(例如,构建 Docker 镜像),你可以通过在容器中安装 Docker 客户端来实现:

# 安装 Docker CLI 工具
apk add docker-cli

这将允许 Jenkins 在容器内部调用 Docker 命令。

六、访问 Jenkins

无论你选择了哪种端口配置方式,你都可以通过浏览器访问 Jenkins Web 界面:

  • 使用 host 网络模式:访问 http://<your-server-ip>:8080,直接通过主机的 IP 地址。
  • 使用 port 映射:访问 http://<your-server-ip>:8081,通过宿主机上映射的端口(在这里是 8081)。

首次访问时,Jenkins 会要求你输入解锁密钥。你可以在容器日志中找到该密钥:

在这里插入图片描述

复制并粘贴日志中的密钥,完成 Jenkins 的初始设置。

总结

通过 Docker 部署 Jenkins 容器并设置端口映射或共享主机网络堆栈,都是部署 Jenkins 的有效方式。选择哪种方式,取决于你的具体需求:

  • 如果你希望容器与宿主机共享网络,避免端口映射,选择 host 网络模式
  • 如果你需要灵活地控制容器与宿主机的端口映射,选择 port 映射 方式。

通过这种方式,你可以轻松地在 Docker 中管理 Jenkins 环境,提升持续集成和持续交付的效率。

到此这篇关于Docker部署Jenkins持续集成(CI)工具的实现的文章就介绍到这了,更多相关Docker部署Jenkins持续集成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker安装wordpress并配置数据库超详细介绍版

    Docker安装wordpress并配置数据库超详细介绍版

    安装WordPress是一项常见的任务,使用Docker可以使这个过程更加简单和可靠,下面这篇文章主要给大家介绍了关于Docker安装wordpress并配置数据库的相关资料,需要的朋友可以参考下
    2023-11-11
  • Docker 容器互联互通的实现方法

    Docker 容器互联互通的实现方法

    这篇文章主要介绍了Docker 容器互联互通,本文讲解不同网络下的容器可以通过加入同一个docker网络,来访问该docker网络下的容器,并且既可以通过容器ip也可以通过容器名连接,非常方便,需要的朋友可以参考下
    2022-10-10
  • Docker安装Nacos服务的实现

    Docker安装Nacos服务的实现

    本文主要介绍了Docker安装Nacos服务的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 在docker中部署并启动redis的方法

    在docker中部署并启动redis的方法

    这篇文章主要介绍了在docker中部署并启动redis的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Docker实现同Ip网段联通的实现

    Docker实现同Ip网段联通的实现

    这篇文章主要介绍了Docker实现同Ip网段联通的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 如何基于Dockerfile构建tomcat镜像

    如何基于Dockerfile构建tomcat镜像

    这篇文章主要介绍了如何基于Dockerfile构建tomcat镜像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Docker中Nginx反向代理的实现步骤

    Docker中Nginx反向代理的实现步骤

    为了安全考虑,我们一般会设置反向代理,用来屏蔽应用程序真实的IP和端口号,本文主要介绍了Docker中Nginx反向代理的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • docker容器在uos-12038.101上启动报错的解决办法

    docker容器在uos-12038.101上启动报错的解决办法

    这篇文章主要介绍了docker容器在uos-12038.101上启动报错的问题,解决方案是需要在/etc/systemd/system/或者 /usr/lib/systemd/system/
    找到docker.service文件,在ExecStart=/usr/bin/dockerd后面添加 --default-ulimit nofile=65536:65536参数,需要的朋友可以参考下
    2024-03-03
  • Docker中部署Redis集群与部署微服务项目的详细过程

    Docker中部署Redis集群与部署微服务项目的详细过程

    这篇文章主要介绍了Docker中部署Redis集群与部署微服务项目,主要包括使用docker部署的好处以及Docker与Kubernetes对比分析,需要的朋友可以参考下
    2022-06-06
  • docker在windows创建卷后本地找不到的完美解决方法

    docker在windows创建卷后本地找不到的完美解决方法

    这篇文章主要介绍了docker在windows创建卷后本地找不到的完美解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-02-02

最新评论