← 返回首页
🔄

DevOps实践:CI/CD与自动化

📂 java ⏱ 2 min 239 words

DevOps实践:CI/CD与自动化

概述

DevOps是开发和运维协作的实践。本教程介绍CI/CD流水线和自动化部署。

1. CI/CD流水线

# Jenkins Pipeline
pipeline {
    agent any
    
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        
        stage('SonarQube') {
            steps {
                sh 'mvn sonar:sonar'
            }
        }
        
        stage('Docker Build') {
            steps {
                sh 'docker build -t my-app:${BUILD_NUMBER} .'
            }
        }
        
        stage('Deploy') {
            steps {
                sh 'kubectl set image deployment/my-app my-app=my-app:${BUILD_NUMBER}'
            }
        }
    }
}

2. GitHub Actions

# .github/workflows/ci.yml
name: CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'temurin'
    
    - name: Build with Maven
      run: mvn clean package
    
    - name: Run tests
      run: mvn test
    
    - name: Build Docker image
      run: docker build -t my-app:${{ github.sha }} .
    
    - name: Push to registry
      run: |
        echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
        docker tag my-app:${{ github.sha }} myregistry/my-app:${{ github.sha }}
        docker push myregistry/my-app:${{ github.sha }}

3. 实际应用示例

Docker构建

FROM maven:3.8-openjdk-11 AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests

FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Kubernetes部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:latest
        ports:
        - containerPort: 8080

4. 最佳实践

  1. 自动化构建:使用CI工具自动化构建
  2. 自动化测试:集成单元测试和集成测试
  3. 代码质量:使用SonarQube进行代码质量检查
  4. 容器化:使用Docker容器化应用
  5. 自动化部署:使用Kubernetes进行自动化部署

总结

DevOps是开发和运维协作的实践。掌握CI/CD流水线和自动化部署,可以实现快速、可靠的软件交付。