插件窝 干货文章 如何在Linux上配置持续集成和持续部署(CI/CD)

如何在Linux上配置持续集成和持续部署(CI/CD)

部署 Jenkins 使用 myapp 538    来源:    2025-04-15

在Linux上配置持续集成和持续部署(CI/CD)指南

1. CI/CD基础概念

持续集成(CI)是指开发人员频繁地将代码变更合并到共享主干的实践,每次合并都会触发自动构建和测试。持续部署(CD)则是将通过测试的代码自动部署到生产环境的过程。

2. 常见CI/CD工具选择

开源解决方案

  • Jenkins: 最流行的开源CI/CD工具,插件丰富
  • GitLab CI/CD: 与GitLab深度集成
  • Travis CI: 对开源项目友好
  • CircleCI: 云优先的CI/CD平台
  • Argo CD: Kubernetes原生持续交付工具

商业解决方案

  • GitHub Actions
  • Azure DevOps
  • AWS CodePipeline

3. 使用Jenkins配置CI/CD

安装Jenkins

# 在Ubuntu/Debian上
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins openjdk-11-jdk

# 启动Jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins

初始设置

  1. 访问 http://your-server-ip:8080
  2. 从日志中获取初始管理员密码: sudo cat /var/lib/jenkins/secrets/initialAdminPassword
  3. 安装推荐插件
  4. 创建管理员用户

创建第一个Pipeline

  1. 新建Item → 选择Pipeline
  2. 在Pipeline部分选择"Pipeline script"并输入:
pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                sh 'echo "Building..."'
            }
        }
        stage('Test') {
            steps {
                sh 'echo "Testing..."'
            }
        }
        stage('Deploy') {
            steps {
                sh 'echo "Deploying..."'
            }
        }
    }
}

4. 使用GitLab CI/CD

配置.gitlab-ci.yml

stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - echo "Building the application"
    - make build

test_job:
  stage: test
  script:
    - echo "Running tests"
    - make test

deploy_job:
  stage: deploy
  script:
    - echo "Deploying to production"
    - make deploy
  only:
    - master

5. 使用GitHub Actions

在项目根目录创建 .github/workflows/main.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
      uses: actions/setup-java@v1
      with:
        java-version: '11'

    - name: Build with Maven
      run: mvn -B package --file pom.xml

    - name: Run Tests
      run: mvn test

    - name: Deploy to Production
      if: github.ref == 'refs/heads/main'
      run: |
        echo "Deploying to production..."
        # 添加部署脚本

6. 容器化部署(使用Docker)

# 安装Docker
sudo apt update
sudo apt install docker.io
sudo systemctl enable --now docker

# 创建Dockerfile
echo "FROM nginx:alpine
COPY . /usr/share/nginx/html" > Dockerfile

# 在CI流水线中添加构建和推送步骤
docker build -t myapp:$CI_COMMIT_SHA .
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
docker push myapp:$CI_COMMIT_SHA

7. Kubernetes部署(进阶)

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:latest
        ports:
        - containerPort: 80

使用Argo CD进行GitOps风格的持续部署:

# 安装Argo CD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# 创建应用
argocd app create myapp \
  --repo https://github.com/example/myapp.git \
  --path k8s \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

8. 最佳实践

  1. 基础设施即代码: 使用Terraform或Ansible管理CI/CD基础设施
  2. 不可变基础设施: 每次部署创建新的容器/镜像而非修改现有环境
  3. 蓝绿部署/金丝雀发布: 减少部署风险
  4. 全面的监控: 集成Prometheus、Grafana等监控工具
  5. 安全扫描: 在流水线中加入静态代码分析、依赖扫描等安全步骤

9. 常见问题解决

  • 权限问题: 确保Jenkins用户有足够的权限执行构建和部署命令
  • 网络问题: 检查防火墙设置,确保CI服务器可以访问代码仓库和目标部署环境
  • 资源不足: 监控服务器资源使用情况,必要时增加资源
  • 构建缓存: 合理使用缓存加速构建过程

通过以上步骤,您可以在Linux服务器上建立一个完整的CI/CD流水线,实现从代码提交到生产部署的自动化流程。