第二十四节:Linux 自动化部署与持续集成(CI/CD)实践
在现代运维和开发实践中,CI/CD(持续集成/持续部署)是提升软件交付效率的关键方式。本节将围绕 Linux 环境下的自动化部署流程,从工具选择、部署流程设计到实战演练,全面介绍 CI/CD 的落地实践方法。
一、什么是 CI/CD?
✅ 持续集成(CI: Continuous Integration)
持续地将代码集成到主干,并自动化地进行构建、测试、代码检查等流程。
✅ 持续交付(CD: Continuous Delivery)
代码通过自动化测试后可以随时部署上线,但部署由人工触发。
✅ 持续部署(CD: Continuous Deployment)
构建、测试、部署全流程自动化完成,每一次代码提交都自动上线。
二、Linux 自动化部署的核心工具
工具名称 | 用途 |
---|---|
Git | 版本管理 |
Jenkins | 流水线构建、调度 |
GitLab CI | 与 GitLab 集成的 CI/CD 工具 |
Ansible | 无代理自动化部署、配置管理 |
Docker | 容器化部署,快速发布与回滚 |
systemd | 管理进程/守护服务 |
Nginx | 蓝绿部署、负载均衡 |
三、CI/CD 工作流程概览
开发者 Push 代码 → GitLab/GitHub → CI 工具触发 Pipeline →
→ 构建镜像/打包 → 单元测试 → 安全/语法检查 →
→ 部署至测试环境 → 自动化测试 →
→ 手动审批或自动部署至生产
四、Jenkins 在 Linux 中的部署与使用
1️⃣ 安装 Jenkins
yum install java-11-openjdk -y
wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install jenkins -y
systemctl enable jenkins && systemctl start jenkins
2️⃣ 配置 Jenkins
- 浏览器访问:http://your_ip:8080;
- 输入初始密码
/var/lib/jenkins/secrets/initialAdminPassword
; - 安装推荐插件;
- 创建管理员账户。
3️⃣ 创建一个 Job 实现部署
Pipeline 示例(Jenkinsfile
):
pipeline {
agent any
stages {
stage('Clone') {
steps {
git 'https://github.com/your-org/your-repo.git'
}
}
stage('Build') {
steps {
sh './build.sh'
}
}
stage('Test') {
steps {
sh './test.sh'
}
}
stage('Deploy') {
steps {
sh 'ansible-playbook deploy.yml'
}
}
}
}
五、基于 Ansible 的自动化部署实践
示例:部署一个 Nginx 服务
目录结构:
text复制编辑project/
├── inventory
├── deploy.yml
└── roles/
└── nginx/
├── tasks/
│ └── main.yml
└── templates/
└── nginx.conf.j2
tasks/main.yml 示例:
- name: 安装 nginx
yum: name=nginx state=present
- name: 部署配置文件
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
- name: 启动服务
service: name=nginx state=started enabled=yes
执行命令:
ansible-playbook -i inventory deploy.yml
六、Docker + CI/CD 实战简要流程
1️⃣ 创建 Dockerfile
dockerfile复制编辑FROM python:3.9
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
2️⃣ 编写自动化构建脚本
docker build -t myapp:latest .
docker stop myapp || true
docker rm myapp || true
docker run -d -p 80:5000 --name myapp myapp:latest
七、蓝绿部署/灰度发布策略(简要)
- 蓝绿部署:两套环境,蓝=当前稳定版,绿=新版本;
- 切换 nginx 配置指向不同后端,实现零中断上线;
- 灰度发布:先让部分用户使用新版本,根据反馈决定是否全量发布。
八、CI/CD 实战建议
- 所有部署操作都脚本化,可重现;
- 自动化测试必须覆盖关键路径;
- 保持流水线简洁易读;
- 配置权限隔离,避免滥权操作;
- 日志与版本统一存档,方便回溯;
- 结合钉钉/邮件实现告警通知。
九、小结
模块 | 关键技术 |
---|---|
源码管理 | Git |
构建工具 | Shell/Python/Maven |
流水线工具 | Jenkins/GitLab CI |
部署工具 | Ansible/Docker |
服务管理 | systemd/Supervisor |
回滚与监控 | 容器/ELK/Prometheus |
CI/CD 并不只是“工具整合”,更是 DevOps 流程思维的体现:追求小步快跑、可观测性强、部署可控、交付更稳。