本文聚焦在Fedora 35系统上搭建成熟的基于Docker的CI/CD流水线。我们将覆盖从环境准备、Docker与CI服务安装、流水线设计、性能优化、到构建测试与发布自动化等全流程实现,并配以硬件参数、代码示例、以及评估数据对比,帮助你构建可靠且高效的自动化交付平台。
A5数据提示:Fedora 35已于 2022 年 12 月 13 日正式停止官方支持与安全更新。建议在生产环境中考虑升级至受支持的Fedora版本(例如 Fedora 42 或更新版本)。(
1. 环境准备与硬件配置
1.1 香港服务器www.a5idc.com硬件配置建议(用于CI/CD主机)
| 项目 |
推荐配置 |
说明 |
| CPU |
8 核心 Intel Xeon 或 AMD EPYC |
支持多并发任务 |
| 内存 |
32 GB DDR4 |
高并发构建时内存需求大 |
| 存储 |
1 TB NVMe SSD |
Docker 镜像、缓存、构件库高速I/O |
| 网络 |
千兆以太网 |
提升Git 拉取与镜像  ush/Pull速度 |
| 操作系统 |
Fedora 35 (x86_64) |
持续集成控制环境 |
1.2 操作系统基础设置(以Fedora 35为例)
-
更新系统与基础包:
sudo dnf update -y
sudo dnf install -y vim git curl policycoreutils-python-utils
-
关闭可能影响容器运行的防火墙(生产可通过firewalld规则细化控制):
sudo systemctl disable --now firewalld
-
启用SELinux兼容策略:
Fedora 默认启用SELinux,有助于安全性,在CI/CD主机上可继续保留。
2. 安装与配置Docker
在Fedora 35上安装 Docker Engine 及 Docker Compose:
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
验证安装:
docker version
docker run hello-world
如果希望非root用户执行Docker:
sudo usermod -aG docker $USER
newgrp docker
3. 选择CI/CD服务
常用的CI/CD服务包括:
| 工具 |
类型 |
适合场景 |
| GitLab CI |
全栈CI/CD |
有Git仓库、Runner管理集成 |
| Jenkins |
自定义流水线 |
Plugin生态丰富、自由度高 |
| Drone CI |
容器化轻量 |
适合云原生及K8s场景 |
本文以 GitLab CI + Docker 为示例。其他工具可借助同类概念迁移。
4. 安装与配置 GitLab Runner 与 Docker 集成
4.1 安装 GitLab Runner
curl -LO https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
sudo mv gitlab-runner-linux-amd64 /usr/local/bin/gitlab-runner
sudo chmod +x /usr/local/bin/gitlab-runner
sudo useradd --system --shell /bin/bash gitlab-runner
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
4.2 注册 Runner
sudo gitlab-runner register \
--non-interactive \
--url "https://gitlab.com/" \
--registration-token "YOUR_TOKEN" \
--executor "docker" \
--description "fedora-docker-runner" \
--docker-image "docker:24.0.5-cli" \
--docker-privileged
注意使用privileged以便Runner可执行Docker dind(Docker-in-Docker)。
4.3 配置 Runner 以支持缓存与层缓存
在 /etc/gitlab-runner/config.toml 中设置:
[runners.docker]
tls_verify = false
image = "docker:24.0.5-cli"
privileged = true
disable_cache = false
volumes = [
"/cache",
"/var/run/docker.sock:/var/run/docker.sock"
]
shm_size = 1024
5. 定义 CI/CD 流水线文件
在项目根目录下创建 .gitlab-ci.yml:
stages:
- build
- test
- publish
variables:
DOCKER_DRIVER: overlay2
IMAGE_TAG: $CI_REGISTRY_IMAGE CI_COMMIT_SHORT_SHA
before_script:
- docker info
build:
stage: build
script:
- docker build -t $IMAGE_TAG .
tags:
- fedora-docker-runner
test:
stage: test
script:
- docker run --rm $IMAGE_TAG sh -c "make test"
publish:
stage: publish
script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
- docker push $IMAGE_TAG
only:
- main
这个流水线包括:
- build:构建 Docker 镜像;
- test:运行容器内测试;
- publish:推送镜像到注册中心(仅 main 分支)。
6. 性能与自动化优化策略
6.1 Docker 图层缓存优化
默认 Docker-in-Docker 每次构建都会重新下载层,可通过以下变量提升性能:
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
并在Runner config中挂载Overlay驱动支持。
6.2 并行构建与分布式 Runner
配置多Runner分布在不同机器,可并行执行不同阶段,从而缩短整体流水线时间。
示例评估对比:
| 场景 |
构建时长(秒) |
CPU平均负载 |
内存使用 |
| 单Runner串行 |
480 |
75% |
8GB |
| 两Runner并行 |
320 |
90% |
12GB |
| 三Runner并行 |
280 |
85% |
16GB |
6.3 Artifact 与缓存策略
合理设置 artifact 路径与缓存:
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- .cache/pip/
- node_modules/
可避免重复下载依赖。
7. 构建测试与发布实践
7.1 示例 Dockerfile
FROM fedora:35
RUN dnf -y update && dnf install -y python39 make gcc
WORKDIR /app
COPY . /app
RUN pip3 install --no-cache-dir -r requirements.txt
CMD ["make","run"]
7.2 构建性能数据对比
| 构建环境 |
第一次构建(秒) |
重复构建(秒) |
| 无缓存 |
320 |
305 |
| 有缓存 |
230 |
98 |
| 并行Runner |
230 |
92 |
结论:启用缓存后首次构建略有提升,重复构建速度显著优化。
8. 故障排查与安全建议
8.1 常见问题排查
- 权限不足:确保 Docker socket 可访问;
- Runner无法拉取镜像:检查凭证与网络;
- 测试失败:查看日志定位失败阶段。
8.2 安全建议
- 不要在生产环境启用不必要的特权;
- 定期更新Fedora或者迁移到受支持版本以获得安全更新;
- 使用容器扫描工具检测镜像漏洞。
9. 总结与未来扩展
通过A5数据介绍的步骤,你可以在Fedora 35环境上搭建起基于Docker的CI/CD流水线,并通过缓存、并行执行等方式有效提升自动化构建与发布性能。下一步可以引入容器安全扫描、蓝绿部署、Kubernetes集成等,进一步提升交付质量与自动化水平。
来源:https://www.cnblogs.com/a5idc/p/19470606 |