docker 构建 Jenkins2.528

docker 构建 Jenkins2.528.2-1

打开一个终端窗口。

使用以下 docker network create 命令在 Docker 中创建一个 bridge 网络:

docker network create jenkins

为了能在 Jenkins 节点中执行 Docker 命令,使用以下 docker run 命令下载并运行 docker:dind(Docker in 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

下面是对上面各选项的解释:

  • (可选)指定 Docker 容器的名称。如果不指定,Docker 会自动生成一个唯一名称。
  • (可选)容器关闭时自动删除该容器(运行出来的实例)。
  • (可选)后台运行容器。可用 docker stop jenkins-docker 停止。
  • 运行 Docker in Docker 需要 --privileged 权限才能正常工作,这个要求可能会在未来较新的 Linux 内核中被取消。
  • 让容器加入先前创建的 jenkins 网络。
  • 将此 Docker in Docker 容器在 jenkins 网络内以 docker 这个主机名对外提供服务。
  • 启用 Docker 服务器的 TLS。由于使用了 privileged 容器,推荐开启 TLS,但这需要下面提到的共享 volume。该变量定义 TLS 证书管理的根目录。
  • 将容器内 /certs/client 映射到名为 jenkins-docker-certs 的 Docker 卷。
  • 将容器内 /var/jenkins_home 映射到名为 jenkins-data 的 Docker 卷。这样外部由这个 Docker daemon 控制的容器就能从 Jenkins 中挂载数据。
  • (可选)在宿主机暴露 Docker 守护进程端口。用于从宿主机运行 docker 命令以控制内部 Docker daemon。
  • 运行 docker:dind 镜像本身。如果你没有预先下载,可以执行 docker image pull docker:dind
  • 设置 Docker 的存储驱动。可参考 Docker storage drivers 文档选择其它选项。

如果你复制粘贴上面命令时遇到问题,可用以下无注释精简版本:

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.528.2-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"

第二步:基于 Dockerfile 构建镜像,并给镜像起个有意义的名字,例如:

docker build -t myjenkins-blueocean:2.528.2-1 .

如果你之前没有下载官方 Jenkins 镜像,上面的步骤会自动下载。


使用以下 docker run 命令运行你创建的 Jenkins 镜像:

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.528.2-1 

下面是选项解释:

  • (可选)指定 Jenkins 容器的名称。
  • 如果容器停止则自动重启。手动停止的容器只有在 Docker daemon 重启或你手动启动时才会恢复。
  • (可选)后台运行,输出容器 ID。不加 --detach 会显示容器日志。
  • 加入前面创建的 jenkins 网络。此时 Jenkins 可通过主机名 docker 连接到 Docker daemon。
  • 指定 docker、docker-compose 等工具连接 Docker daemon 所需的环境变量。
  • 将容器的 8080 端口映射到宿主机 8080 端口。比如若希望宿主机的 49000 访问 Jenkins,可写成:-p 49000:8080
  • (可选)将容器 50000 端口映射到宿主机,用于 inbound Jenkins agent 。如果你修改了 Jenkins controller 的 TCP agent 端口,则需对应修改这里。
  • 将容器的 /var/jenkins_home 持久化到 Docker volume jenkins-data。也可以映射到宿主机路径。
  • /certs/client 挂载为只读 volume,用于 Docker TLS 客户端证书。
  • 指定运行的镜像名。

如果复制粘贴有问题,请使用以下无注释版本:

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.528.2-1

Jenkins 推荐的插件说明

Jenkins 插件解释大全(你的列表逐个解释)


1. Folders

用于在 Jenkins 中创建 文件夹,用来:

  • 对 Job 进行分类
  • 多团队、多项目环境下隔离和管理 Job

比如:

/DevOps
  /K8s-Build
  /Helm-Publish
/Frontend
  /Vue-Build

2. OWASP Markup Formatter

用于限制 Jenkins 页面可以渲染的 HTML 格式。

作用:

  • 防止 XSS
  • 限制任意 HTML 或脚本被执行
  • 提高安全性

一般:

  • 企业会选 “Safe HTML”
  • 个人环境随便选

3. Build Timeout

Job 设置超时时间

功能:

  • 防止步骤卡死无限阻塞(如 Maven 依赖卡住)
  • 自动中断超时的构建

示例:

timeout(time: 30, unit: 'MINUTES')

4. Credentials Binding

让你能在 Pipeline 中安全注入:

  • 密码
  • Token
  • SSH Key
  • Secret 文件

例如:

withCredentials([string(credentialsId: 'docker-pass', variable: 'PASS')]) {
    sh "docker login -u user -p $PASS"
}

5. Timestamper

给 Jenkins 控制台输出加上时间戳。

例如:

[2025-11-21 10:15:30] Building Docker image...

用途:

  • 排查性能问题
  • 对齐日志时间
  • 加快故障追踪

6. Workspace Cleanup

构建前或构建后自动清理 Workspace。

用途:

  • 避免磁盘占满
  • 避免构建之间互相污染文件
  • 保证构建可重复性

7. Ant

支持用 Apache Ant 构建 Java 项目。

用途:

  • 很老的 Java 项目(你不写也可能看到)

8. Gradle

让 Jenkins 执行 Gradle 构建

常用于:

  • Spring Boot 项目
  • Kotlin 项目

9. Pipeline

Jenkins 必备插件,让你可以写:

✔️ Jenkinsfile
✔️ 声明式 Pipeline
✔️ 脚本式 Pipeline

没有它 Jenkins Pipeline 就不能用。


10. GitHub Branch Source

用于:

✔️ 自动扫描 GitHub 仓库
✔️ 多分支流水线(Multibranch Pipeline)
✔️ GitHub Webhook 集成
✔️ PR 触发构建

你不用手动创建每个分支的 job。


11. Pipeline: GitHub

让 Pipeline 里面可以使用 GitHub 相关步骤:

  • PR 管理
  • GitHub API 调用
  • GitHub 状态反写

12. Groovy Libraries(Shared Libraries)

用于:

✔️ 复用 Pipeline 代码
✔️ 把公共逻辑写成函数
✔️ 多项目共享同一套构建逻辑

大型企业 CI/CD 标准化必备。


13. Pipeline Graph View

提供新的 Pipeline 可视化图表:

  • 更清晰展示 Stage
  • 能看到并行步骤情况

比传统 BlueOcean 更轻量。


14. Git

允许 Jenkins 从 Git 仓库拉取代码。

没有它无法 git clone。


15. SSH Build Agents

让 Jenkins 使用 SSH 方式连接到远程机器作为 agent。

用途:

  • 构建机分布在多台服务器
  • 动态扩容
  • 弹性代理

16. Matrix Authorization Strategy

提供 矩阵权限控制

可以权限细化到:

  • 某个 Job
  • 某个用户
  • 某个操作(Build/View/Delete/Configure)

企业常用来做 RBAC 权限控制。


17. LDAP

让 Jenkins 接入企业 LDAP/AD 做统一身份认证。

用于:

  • 公司员工统一账号登录 Jenkins
  • 权限自动同步到 Jenkins

18. Email Extension

比默认邮件通知更强:

✔️ 模板可定制
✔️ 失败邮件带详细日志
✔️ 成功/失败不同模板

企业常用标准通知插件。


19. Mailer

最基础的邮件发送插件(基础版)。

Email Extension 是它的增强版。


20. Dark Theme

Jenkins 黑暗主题。

好处:

  • 不伤眼
  • 稳定性比 BlueOcean 更强

21. Localization: Chinese (Simplified)

Jenkins 中文语言包。

让 Jenkins UI 变中文。


posted @ 2025-11-21 14:26  broadviews  阅读(35)  评论(0)    收藏  举报