Files
README/c15_docker部署jenkins.md

337 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# docker部署jenkins
## 获取镜像
```
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/jenkins:2.546-jdk21
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/jenkins:2.546-jdk21 docker.io/jenkins/jenkins:2.546-jdk21
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/jenkins:2.546-jdk21
```
## 启动镜像
### 创建数据目录并配置权限
```
mkdir -p ~/data/jenkins/jenkins-data
sudo chown -R 1000:1000 ~/data/jenkins/jenkins-data
```
### 创建容器
`-e JENKINS_OPTS="--prefix=/jenkins" \`用于nginx代理,如直接访问端口不通过nginx则可去除
```
docker run \
--name jenkins \
--restart=on-failure \
--detach \
--publish 7368:8080 \
-e JENKINS_OPTS="--prefix=/jenkins" \
--volume ~/data/jenkins/jenkins-data:/var/jenkins_home \
jenkins/jenkins:2.546-jdk21
```
### 查看初始密码
容器中的目录:
```
/var/jenkins_home/secrets/initialAdminPassword
```
宿主机中查看:
```
cat ~/data/jenkins/jenkins-data/secrets/initialAdminPassword
```
### nginx代理配置(需要代理才配置):
```
location /jenkins/ {
proxy_pass http://127.0.0.1:7368/jenkins/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
```
## 官方文档:
`https://www.jenkins.io/doc/book/installing/docker/`
```
Docker
目录
安装Docker
前提条件
在 Docker 中下载和运行 Jenkins
在macOS和Linux上
在Windows上
访问 Docker 容器
访问Docker日志
访问Jenkins主目录
安装后安装向导
解锁詹金斯
用插件定制Jenkins
创建第一个管理员用户
Docker 是一个用于在被称为“容器”(或 Docker 容器)的隔离环境中运行应用程序的平台。 像 Jenkins 这样的应用程序可以作为只读“镜像”(或 Docker 镜像)下载,每个镜像都可以作为容器在 Docker 中运行。 Docker 容器是 Docker 镜像的“运行实例”。 Docker 镜像是永久存储的,只有在发布新版本时才会更新,而容器本质上是临时的。 在 Docker 文档中的《入门第一部分:导向与设置》中了解更多这些概念。
由于 Docker 的基本平台和容器设计,对于某个应用程序(如 Jenkins)的 Docker 镜像,可以运行在任何支持的作系统或云服务上运行 Docker。 支持的作系统包括macOS、Linux和Windows,支持的云服务包括AWS和Azure。
安装Docker
要在您的作系统上安装Docker,请按照导览前置条件中的说明作。
或者,访问 Docker Hub,选择适合你作系统或云服务的 Docker 社区版。 请按照他们网站上提供的安装说明作。
如果你是在基于Linux的作系统上安装Docker,确保Docker配置为可以作为非root用户管理。 可以查看 Docker 文档中的 Linux 安装后步骤页面,了解更多相关内容。 本页面还包含配置 Docker 启动时自动启动的说明。
前提条件
最低硬件需求:
256 MB 内存
1 GB 硬盘空间(虽然运行时建议至少 10 GB Jenkins 作为 Docker 容器)
推荐给小团队的硬件配置:
4 GB+ 内存
50 GB+ 硬盘空间
全面的硬件推荐:
硬件:详见硬件推荐页面
软件需求:
Java 21及更高版本:详见Java需求页面
网页浏览器:详见网页浏览器兼容性页面
对于Windows作系统:Windows支持策略
针对Linux作系统:Linux支持政策
对于 servlet 容器:Servlet 容器支持政策
在 Docker 中下载和运行 Jenkins
Jenkins 有多个 Docker 镜像可供使用。
请使用Docker Hub仓库推荐的官方jenkins/jenkins镜像。 本镜像包含当前的 Jenkins 长期支持(LTS)版本,已具备生产准备。 然而,该镜像不包含 Docker CLI,也未与常用的 Blue Ocean 插件及其功能捆绑销售。 要充分利用 Jenkins 和 Docker 的全部功能,你可能需要按照下面描述的安装流程进行。
每当 Jenkins Docker 新版本可用时,都会发布一个新的镜像。 你可以在标签页查看该图片之前发布版本的列表。jenkins/jenkinsjenkins/jenkins
在macOS和Linux上
打开终端窗口。
在 Docker 中使用以下 docker network create 命令创建桥接网络:
docker network create jenkins
为了在 Jenkins 节点内执行 Docker 命令,请使用以下 docker run 命令下载并运行 Docker 镜像:docker:dind
docker run \
--name jenkins-docker \
--rm \
--detach \
--privileged \
--network jenkins \
--network-alias docker \
--env DOCKER_TLS_CERTDIR=/certs \
--volume jenkins-docker-certs:/certs/client \
--volume jenkins-data:/var/jenkins_home \
--publish 2376:2376 \
docker:dind \
--storage-driver overlay2
( 可选 :)指定用于运行镜像的 Docker 容器名称。 默认情况下,Docker 会为容器生成唯一的名称。
( 可选 :)关闭时会自动移除 Docker 容器(Docker 镜像的副本)。
( 可选 :)后台运行 Docker 容器。 你可以通过运行 来停止这个过程。docker stop jenkins-docker
目前在 Docker 中运行 Docker 需要特权访问才能正常运行。 这一要求可能会在更新的 Linux 内核版本中有所放宽。
这对应于前一步创建的网络。
它使 Docker 容器中的 Docker 作为网络内的主机名可用。dockerjenkins
使 Docker 服务器能够使用 TLS。 由于使用特权容器,建议这样做,但需要使用下文描述的共享卷。 该环境变量控制管理 Docker TLS 证书的根目录。
将容器内的目录映射到上述创建的 Docker 卷。/certs/clientjenkins-docker-certs
将容器内的目录映射到名为 的 Docker 卷。 这使得由该 Docker 容器的 Docker 守护进程控制的其他 Docker 容器能够挂载 Jenkins 的数据。/var/jenkins_homejenkins-data
( 可选 :)它会暴露主机上的 Docker 守护进程端口。 这对于在主机上执行命令以控制内部的 Docker 守护进程非常有用。docker
图片本身。 运行前使用命令下载此图: 。docker:dinddocker image pull docker:dind
Docker 卷的存储驱动。 请参阅 Docker 存储驱动文档以获取支持的选项。
如果你在复制粘贴上述命令摘要时遇到困难,请使用下面无注释版本:
docker run --name jenkins-docker --rm --detach \
--privileged --network jenkins --network-alias docker \
--env DOCKER_TLS_CERTDIR=/certs \
--volume jenkins-docker-certs:/certs/client \
--volume jenkins-data:/var/jenkins_home \
--publish 2376:2376 \
docker:dind --storage-driver overlay2
通过执行以下两个步骤,定制官方的 Jenkins Docker 镜像:
创建一个包含以下内容的 Dockerfile :
FROM jenkins/jenkins:2.541.1-jdk21
USER root
RUN apt-get update && apt-get install -y lsb-release ca-certificates curl && \
install -m 0755 -d /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && \
chmod a+r /etc/apt/keyrings/docker.asc && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/debian $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null && \
apt-get update && apt-get install -y docker-ce-cli && \
apt-get clean && rm -rf /var/lib/apt/lists/*
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow json-path-api"
从这个 Docker 文件构建一个新的 Docker 镜像,并为镜像赋予一个有意义的名称,比如“myjenkins-blueocean:2.541.1-1”:
docker build -t myjenkins-blueocean:2.541.1-1 .
如果你还没有下载官方的 Jenkins Docker 镜像,上述流程会自动帮你下载。
在 Docker 中使用以下 docker run 命令,将你自己的镜像作为容器运行:myjenkins-blueocean:2.541.1-1
docker run \
--name jenkins-blueocean \
--restart=on-failure \
--detach \
--network jenkins \
--env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client \
--env DOCKER_TLS_VERIFY=1 \
--publish 8080:8080 \
--publish 50000:50000 \
--volume jenkins-data:/var/jenkins_home \
--volume jenkins-docker-certs:/certs/client:ro \
myjenkins-blueocean:2.541.1-1
( 可选 :)指定该 Docker 镜像实例的 Docker 容器名称。
如果容器停止,务必重启。如果是手动停止的,只有在 Docker 守护进程重启或容器本身手动重启时才会重启。
( 可选 :)在后台运行当前容器,称为“分离”模式,并输出容器ID。如果你没有指定这个选项,那么该容器的运行中的Docker日志会显示在终端窗口中。
将该容器连接到之前定义的网络。Docker 守护进程现在可以通过主机名 .jenkinsdocker
指定了 、 及其他 Docker 工具用于连接前一步 Docker 守护进程的环境变量。dockerdocker-compose
映射或发布当前容器的8080端口到主机上的8080端口。第一个数字代表主机上的端口,最后一个代表容器的端口。例如,要通过端口49000访问主机上的Jenkins,输入该选项。-p 49000:8080
( 可选 :)将当前容器的50000端口映射到主机上的50000端口。只有在你在其他机器上设置了一个或多个入站Jenkins代理,这些代理与你的容器(称为Jenkins“控制器”)交互时才需要这样做。入站Jenkins代理默认通过TCP端口50000与Jenkins控制器通信。你可以通过安全页面更改Jenkins控制器上的端口号。例如,如果你将Jenkins控制器入站Jenkins代理的TCP端口更新为51000,你需要通过该命令重新运行Jenkins。例如,将“发布”选项指定为:第一个值是托管 Jenkins 控制器机器的端口号,最后一个值与 Jenkins 控制器上更改后的值相匹配,例如。入站的 Jenkins 代理与该端口上的 Jenkins 控制器通信(本例为 52000)。注意 WebSocket 代理不需要此配置。jenkins-blueoceandocker run …​--publish 52000:51000
将容器中的目录映射到 Docker 卷,名为 。 你也可以把这个目录映射到你机器本地文件系统的某个卷,而不是把目录映射到 Docker 卷。 例如,指定将容器目录映射到本地机器中该目录中的子目录的选项——通常为 或 。 注意:如果你更改了源卷或目录,上面容器的卷也需要更新以匹配。/var/jenkins_homejenkins-data/var/jenkins_home--volume $HOME/jenkins:/var/jenkins_home/var/jenkins_homejenkins$HOME/Users/<your-username>/jenkins/home/<your-username>/jenkinsdocker:dind
将目录映射到之前创建的卷。连接 Docker 守护进程所需的客户端 TLS 证书现在可以在环境变量指定的路径中获得。/certs/clientjenkins-docker-certsDOCKER_CERT_PATH
你在上一步构建的Docker镜像名称。
如果你在复制粘贴命令片段时遇到困难,请使用下面无注释版本:
docker run --name jenkins-blueocean --restart=on-failure --detach \
--network jenkins --env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
--publish 8080:8080 --publish 50000:50000 \
--volume jenkins-data:/var/jenkins_home \
--volume jenkins-docker-certs:/certs/client:ro \
myjenkins-blueocean:2.541.1-1
进入安装后安装向导。
在Windows上
Jenkins 项目提供的是 Linux 容器镜像,而不是 Windows 容器镜像。 确保你的 Docker for Windows 安装设置为运行,而不是 。 请参阅 Docker 文档,了解如何切换到 Linux 容器。 一旦配置为运行,步骤如下:Linux ContainersWindows ContainersLinux Containers
打开命令提示符窗口,类似于上面macOS和Linux的作步骤:
在 Docker 中创建一个桥接网络
docker network create jenkins
运行 docker:dind Docker image
docker run --name jenkins-docker --rm --detach ^
--privileged --network jenkins --network-alias docker ^
--env DOCKER_TLS_CERTDIR=/certs ^
--volume jenkins-docker-certs:/certs/client ^
--volume jenkins-data:/var/jenkins_home ^
--publish 2376:2376 ^
docker:dind
通过执行以下两个步骤,定制官方的 Jenkins Docker 镜像:
创建一个包含以下内容的 Dockerfile :
FROM jenkins/jenkins:2.541.1-jdk21
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow json-path-api"
从这个 Dockerfile 构建一个新的 Docker 镜像,并为该镜像赋予一个有意义的名称,例如 “myjenkins-blueocean:2.541.1-1”:
docker build -t myjenkins-blueocean:2.541.1-1 .
如果你还没有下载官方的 Jenkins Docker 镜像,上述流程会自动帮你下载。
在 Docker 中使用以下 docker run 命令,将你自己的镜像作为容器运行:myjenkins-blueocean:2.541.1-1
docker run --name jenkins-blueocean --restart=on-failure --detach ^
--network jenkins --env DOCKER_HOST=tcp://docker:2376 ^
--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 ^
--volume jenkins-data:/var/jenkins_home ^
--volume jenkins-docker-certs:/certs/client:ro ^
--publish 8080:8080 --publish 50000:50000 myjenkins-blueocean:2.541.1-1
进入设置向导。
访问 Docker 容器
如果你想通过 docker exec 命令通过终端/命令提示符访问你的 Docker 容器,可以在命令中添加类似选项。 这样可以访问名为“jenkins-tutorial”的 Jenkins Docker 容器。--name jenkins-tutorialdocker exec
你可以通过另一个终端/命令提示符窗口访问你的 Docker 容器,使用类似这样的命令:docker exec
docker exec -it jenkins-blueocean bash
访问Docker日志
例如,在安装后设置向导中解锁Jenkins时,你可能想访问Jenkins控制台日志。
通过你执行该命令的终端/命令提示符窗口访问 Jenkins 控制台日志。 或者,你也可以通过容器的 Docker 日志访问 Jenkins 控制台日志,使用以下命令:docker run …​
docker logs <docker-container-name>
你的武器可以通过命令获得。<docker-container-name>docker ps
访问Jenkins主目录
你可以访问 Jenkins 的主目录,查看子目录中 Jenkins 构建的详细信息。workspace
例如,如果你将 Jenkins 的主目录()映射到你机器本地文件系统的某个目录,比如在上面的命令中,可以通过你机器的常用终端/命令提示符访问目录内容。/var/jenkins_homedocker run …​
如果你在命令中指定了选项,可以通过容器的终端/命令提示符,使用 docker container exec 命令访问 Jenkins 主目录的内容:--volume jenkins-data:/var/jenkins_homedocker run …​
docker container exec -it <docker-container-name> bash
如前一节所述,使用docker容器ls命令。 如果你在上面命令中指定了选项(如有需要,请参考访问 Jenkins/Blue Ocean Docker 容器),请使用以下命令:<docker-container-name>--name jenkins-blueoceandocker container run …​docker container exec
docker container exec -it jenkins-blueocean bash
安装后安装向导
下载、安装并使用其中一个步骤运行Jenkins后 上图(除使用 Jenkins Operator 安装时外),安装后安装向导开始。
设置向导会带你完成几个快速一次性步骤,解锁Jenkins,用插件自定义,并创建第一个管理员用户 通过这些渠道,你可以继续访问詹金斯。
解锁詹金斯
当你第一次使用新的Jenkins手柄时,系统会要求你用以下方式解锁它 一个自动生成的密码。
浏览到(或者你配置的端口) 安装时使用Jenkins),然后等待解锁Jenkins页面。http://localhost:8080
解锁詹金斯页面
从Jenkins控制台的日志输出中复制自动生成的 字母数字密码(夹在两组星号之间)。
复制初始管理员密码
注:
命令:会在控制台打印密码。sudo cat /var/lib/jenkins/secrets/initialAdminPassword
如果你在Docker里用官方镜像运行Jenkins,你可以在控制台里打印密码,而不必在容器内打开交互壳。jenkins/jenkinssudo docker exec ${CONTAINER_ID or CONTAINER_NAME} cat /var/jenkins_home/secrets/initialAdminPassword
在解锁Jenkins页面,将此密码粘贴到管理员页面 密码字段,点击继续。
注:
Jenkins 控制台日志显示了位置(在 Jenkins 主目录中) 该密码也可获得。该密码必须输入 在你能访问Jenkins主线之前,先在新安装的Jenkins上设置向导 UI。这个密码同时也是管理员账户的默认密码 (用户名“admin”)如果你跳过了后续的用户创建 进入设置向导。
用插件定制Jenkins
解锁詹金斯后,自定义詹金斯页面 出现了。在这里你可以安装各种有用的插件,作为你 初步设置。
点击显示的两个选项之一:
安装推荐插件——安装推荐的插件集,这些插件 基于最常见的用例。
选择要安装的插件——以选择最初要安装的插件集合 安装。当你第一次进入插件选择页面时,建议 插件默认选择。
如果你不确定需要哪些插件,可以选择“建议安装” 插件。 你可以之后安装或移除更多Jenkins插件 通过 Jenkins 中的 Manage Jenkins > 插件页面。
设置向导显示了Jenkins的配置进程和你的 正在安装部分Jenkins插件。这个过程可能需要一些时间 几分钟后完成。
创建第一个管理员用户
最后,在给Jenkins定制后, 插件,Jenkins 要求你创建第一个管理员用户。
当“创建第一管理员用户”页面出现时,请指定您的详细信息 在相应字段中选择管理员用户,点击保存并完成。
当Jenkins准备好页面出现时,点击“开始使用Jenkins”。
注释:
本页可能会显示詹金斯几乎准备好了!如果是这样,请点击重新开始。
如果页面一分钟后不自动刷新,请使用网页 浏览器手动刷新页面。
如有需要,请使用您刚用的使用者凭证登录Jenkins 创建后你已经准备好开始使用 Jenkins!
```