@[TOC](Docker 部署 Jenkins持續集成(CI)工具)
前言
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 環境,提升持續集成和持續交付的效率。