CI/CD基础概念
CI/CD基础概念
什么是CI/CD
CI(持续集成)
开发人员频繁地将代码集成到共享仓库,每次集成都通过自动化构建和测试验证。
CD(持续交付/持续部署)
- 持续交付:代码随时可以部署到生产环境
- 持续部署:代码通过所有测试后自动部署到生产环境
CI/CD流程
代码提交 → 自动构建 → 自动测试 → 制品发布 → 部署 → 监控
CI/CD工具
| 工具 | 类型 | 特点 |
|---|---|---|
| Jenkins | 自建 | 功能强大,插件丰富 |
| GitLab CI | SaaS/自建 | 与GitLab深度集成 |
| GitHub Actions | SaaS | 与GitHub集成 |
| CircleCI | SaaS | 易用,性能好 |
| ArgoCD | 自建 | GitOps风格 |
Jenkins
安装Jenkins
# Docker方式
docker run -d --name jenkins \
-p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
Jenkinsfile
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
stage('Test') {
steps {
sh 'npm test'
}
}
stage('Docker Build') {
steps {
sh 'docker build -t myapp:${BUILD_NUMBER} .'
}
}
stage('Deploy') {
steps {
sh 'kubectl set image deployment/myapp myapp=myapp:${BUILD_NUMBER}'
}
}
}
post {
always {
cleanWs()
}
success {
echo 'Build succeeded!'
}
failure {
echo 'Build failed!'
}
}
}
GitLab CI
.gitlab-ci.yml
stages:
- build
- test
- deploy
variables:
DOCKER_IMAGE: myapp
build:
stage: build
script:
- npm install
- npm run build
- docker build -t $DOCKER_IMAGE:$CI_COMMIT_SHA .
artifacts:
paths:
- dist/
test:
stage: test
script:
- npm test
coverage: '/Lines\s*:\s*(\d+\.?\d*)%/'
deploy_staging:
stage: deploy
script:
- kubectl set image deployment/myapp myapp=$DOCKER_IMAGE:$CI_COMMIT_SHA
environment:
name: staging
only:
- develop
deploy_production:
stage: deploy
script:
- kubectl set image deployment/myapp myapp=$DOCKER_IMAGE:$CI_COMMIT_SHA
environment:
name: production
when: manual
only:
- main
GitHub Actions
# .github/workflows/ci.yml
name: CI/CD Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Build
run: npm run build
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/myapp:${{ github.sha }}
实践:完整CI/CD流程
# .github/workflows/ci-cd.yml
name: CI/CD
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm ci
- run: npm test
build:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: docker build -t myapp:${{ github.sha }} .
- run: docker push myapp:${{ github.sha }}
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: kubectl set image deployment/myapp myapp=myapp:${{ github.sha }}
总结
CI/CD是现代软件开发的核心实践。选择合适的工具,建立自动化的构建、测试和部署流程,可以显著提高开发效率和软件质量。