1. DevOps概述
DevOps是一种软件开发和IT运维的实践,旨在缩短开发周期,提高部署频率,确保可靠的发布。它强调开发团队和运维团队之间的协作和沟通,通过自动化工具和流程来实现持续集成和持续部署。更多学习教程www.fgedu.net.cn
# uname -a
Linux server 3.10.0-1160.el7.x86_64 #1 SMP Wed Aug 26 15:27:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
# 检查Docker状态
# systemctl status docker
● docker.service – Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-03-30 10:00:00 CST; 1h ago
Docs: https://docs.docker.com
Main PID: 1234 (dockerd)
CGroup: /system.slice/docker.service
└─1234 /usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock
# 检查Git状态
# git –version
git version 2.27.0
2. CI/CD概述
CI/CD是持续集成(Continuous Integration)和持续部署(Continuous Deployment)的缩写,是DevOps的核心实践。CI/CD通过自动化构建、测试和部署流程,提高开发效率和代码质量。学习交流加群风哥微信: itpux-com
1. 开发者提交代码到Git仓库
2. CI工具(如Jenkins)自动拉取代码
3. 自动构建项目
4. 自动运行测试
5. 生成构建报告
# 持续部署流程
1. 构建成功后,自动部署到测试环境
2. 运行集成测试
3. 部署到预生产环境
4. 运行验收测试
5. 部署到生产环境
3. Jenkins安装
Jenkins是一种开源的CI/CD工具,用于自动化构建、测试和部署流程。
# yum install -y java-1.8.0-openjdk
# 安装Jenkins
# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# rpm –import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
# yum install -y jenkins
# 启动Jenkins服务
# systemctl start jenkins
# systemctl enable jenkins
# 查看Jenkins状态
# systemctl status jenkins
● jenkins.service – LSB: Jenkins Automation Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; generated)
Active: active (running) since Wed 2026-03-30 10:00:00 CST; 1h ago
Docs: man:systemd-sysv-generator(8)
Process: 1234 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/jenkins.service
└─1235 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war –logfile=/var/log/jenkins/jenkins.log –webroot=/var/cache/jenkins/war –httpPort=8080 –debug=5 –handlerCountMax=100 –handlerCountMaxIdle=20
# 查看Jenkins初始密码
# cat /var/lib/jenkins/secrets/initialAdminPassword
1234567890abcdef1234567890abcdef
4. Jenkins配置
Jenkins配置包括插件安装、系统设置、凭据管理等。
# 访问 http://fgedudb:8080 并登录
# 安装推荐插件和必要插件(如Git、Pipeline、Docker等)
# 配置Git
# 在Jenkins管理界面中,进入”系统管理” > “全局工具配置”
# 配置Git路径:/usr/bin/git
# 配置Docker
# 安装Docker插件
# 在Jenkins管理界面中,进入”系统管理” > “系统设置”
# 配置Docker服务器:unix:///var/run/docker.sock
# 配置凭据
# 在Jenkins管理界面中,进入”凭据” > “系统” > “全局凭据”
# 添加Git凭据(fgedu/密码或SSH密钥)
# 添加Docker Hub凭据
5. Jenkins Pipeline
Jenkins Pipeline是一种通过代码定义CI/CD流程的方式,支持声明式和脚本式两种语法。
# cat Jenkinsfile
pipeline {
agent any
stages {
stage(‘Checkout’) {
steps {
git branch: ‘main’, url: ‘https://github.com/example/project.git’
}
}
stage(‘Build’) {
steps {
sh ‘mvn clean package’
}
}
stage(‘Test’) {
steps {
sh ‘mvn test’
}
}
stage(‘Deploy’) {
steps {
sh ‘kubectl apply -f k8s/deployment.yaml’
}
}
}
post {
success {
echo ‘构建成功!’
}
failure {
echo ‘构建失败!’
}
}
}
# 在Jenkins中创建Pipeline项目
# 进入Jenkins管理界面
# 点击”新建项目”
# 选择”Pipeline”
# 配置项目名称和描述
# 在”Pipeline”部分,选择”Pipeline script from SCM”
# 配置Git仓库地址和Jenkinsfile路径
# 保存配置
# 运行Pipeline
# 点击”立即构建”
# 查看构建日志
6. Git集成
Git是一种分布式版本控制系统,与CI/CD工具集成可以实现代码的自动拉取和构建。
# git init
Initialized empty Git repository in /home/user/project/.git/
# 添加文件
# echo “Hello World” > README.md
# git add README.md
# git commit -m “Initial commit”
[main (root-commit) 1234567] Initial commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
# 推送到远程仓库
# git remote add origin https://github.com/example/project.git
# git push -u origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 216 bytes | 216.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/example/project.git
* [new branch] main -> main
Branch ‘main’ set up to track remote branch ‘main’ from ‘origin’.
# 配置Git Webhook
# 在GitHub仓库中,进入”Settings” > “Webhooks”
# 添加Webhook:http://jenkins-server:8080/github-webhook/
# 选择事件:Push
# 保存配置
7. Docker集成
Docker与CI/CD工具集成可以实现容器化应用的自动构建和部署。
# cat Dockerfile
FROM openjdk:8-jdk-alpine
COPY target/app.jar /app.jar
ENTRYPOINT [“java”, “-jar”, “/app.jar”]
# 构建Docker镜像
# docker build -t example/app .
Sending build context to Docker daemon 10.24kB
Step 1/3 : FROM openjdk:8-jdk-alpine
—> 1234567890ab
Step 2/3 : COPY target/app.jar /app.jar
—> 9876543210cd
Step 3/3 : ENTRYPOINT [“java”, “-jar”, “/app.jar”]
—> 6543219870ef
Successfully built 6543219870ef
Successfully tagged example/app:latest
# 推送Docker镜像
# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don’t have a Docker ID, head over to https://hub.docker.com to create one.
Username: example
Password:
Login Succeeded
# docker push example/app
The push refers to repository [docker.io/example/app]
1234567890ab: Pushed
9876543210cd: Pushed
6543219870ef: Pushed
latest: digest: sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef size: 948
8. Kubernetes集成
Kubernetes与CI/CD工具集成可以实现容器化应用的自动部署和管理。
# cat k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
– name: app
image: example/app:latest
ports:
– containerPort: 8080
# 创建Kubernetes服务文件
# cat k8s/service.yaml
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
selector:
app: app
ports:
– port: 80
targetPort: 8080
type: NodePort
# 部署到Kubernetes
# kubectl apply -f k8s/deployment.yaml
# kubectl apply -f k8s/service.yaml
# 查看部署状态
# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
app-deployment 3/3 3 3 1m
# 查看服务状态
# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
app-service NodePort 10.100.200.100
kubernetes ClusterIP 10.96.0.1
9. CI/CD最佳实践
遵循CI/CD最佳实践可以提高构建和部署的效率和可靠性。
# 将CI/CD流程定义为代码,存储在版本控制系统中
# 实现自动化测试
# 在构建过程中运行单元测试、集成测试和端到端测试
# 使用环境变量管理配置
# 在Jenkins中配置环境变量,避免硬编码敏感信息
# 实现蓝绿部署
# 同时运行两个版本的应用,通过路由切换实现零 downtime 部署
# 实现回滚机制
# 在部署失败时自动回滚到之前的稳定版本
# 监控和日志
# 集成监控工具(如Prometheus、Grafana)和日志工具(如ELK)
# 安全扫描
# 在构建过程中集成安全扫描工具,检测代码和依赖项的安全漏洞
10. DevOps工具链
DevOps工具链包括版本控制、CI/CD、容器化、编排、监控等工具。
– Git: 分布式版本控制系统
– GitHub: Git代码托管平台
– GitLab: 集成了CI/CD的Git代码托管平台
# CI/CD工具
– Jenkins: 开源CI/CD工具
– GitLab CI: GitLab内置的CI/CD工具
– CircleCI: 云端CI/CD工具
– Travis CI: 云端CI/CD工具
# 容器化工具
– Docker: 容器化平台
– Docker Compose: 多容器应用编排工具
# 编排工具
– Kubernetes: 容器编排平台
– Docker Swarm: Docker内置的编排工具
# 监控工具
– Prometheus: 监控系统
– Grafana: 数据可视化平台
– ELK Stack: 日志管理平台
# 配置管理工具
– Ansible: 自动化配置管理工具
– Puppet: 配置管理工具
– Chef: 配置管理工具
# 基础设施即代码工具
– Terraform: 基础设施即代码工具
– CloudFormation: AWS基础设施即代码工具
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
