返回文章列表

文章

Jenkins、GitLab CI/CD 和 GitHub Actions

Jenkins、GitLab CI/CD 和 GitHub Actions 都是 DevOps 自动化工具,但它们在设计理念、语法、功能强度和场景适配方面有一些关键区别

目录
  1. 🆚 Jenkins vs GitLab CI/CD vs GitHub Actions 对比一览表
  2. 🚀 一、Jenkins 示例
  3. 📄 Jenkinsfile 示例(构建 Java + Docker)
  4. 🚀 二、GitLab CI/CD 示例
  5. 📄 .gitlab-ci.yml 示例(构建 Java + Docker)
  6. 🚀 三、GitHub Actions 示例
  7. 📄 .github/workflows/build.yml
  8. 🔐 四、Secrets 管理
  9. 🛠️ 五、使用场景推荐
  10. 🧠 总结

🆚 Jenkins vs GitLab CI/CD vs GitHub Actions 对比一览表#

项目JenkinsGitLab CI/CDGitHub Actions
配置文件`Jenkinsfile`(Groovy DSL)`.gitlab-ci.yml``.github/workflows/*.yml`
平台绑定任意 Git 仓库GitLabGitHub
触发方式Push、定时、Webhook、PR 等Push、MR、Tag、SchedulePush、PR、Dispatch、Schedule
Agent 支持Master/Agent 模式,灵活可扩展GitLab Runner(内置/自建)GitHub Hosted Runner(有分钟数限制)
插件生态最丰富(上千插件)一般极其丰富(Actions Marketplace)
并发控制自控(需部署 Agent)自建 Runner 可扩展免费额度限制(2k\~6k 分钟/月)
学习曲线高(Groovy DSL 较复杂)中(YAML 简洁)低(YAML 灵活好上手)
适用场景企业私有部署、大型定制流水线GitLab 用户和 DevOps 一体化开源项目、轻量构建、GitHub 原生仓库
文件结构单文件,Jenkinsfile 在根目录或指定路径单一 `.yml` 文件多 `.yml` 可按任务分拆

🚀 一、Jenkins 示例#

📄 Jenkinsfile 示例(构建 Java + Docker)#

pipeline {
  agent any

  environment {
    IMAGE_NAME = "myapp"
    IMAGE_TAG = "${env.BUILD_NUMBER}"
    REGISTRY = "registry.example.com"
  }

  stages {
    stage('Checkout') {
      steps {
        checkout scm
      }
    }

    stage('Build JAR') {
      steps {
        sh 'mvn clean package -DskipTests'
      }
    }

    stage('Build Docker Image') {
      steps {
        sh '''
          docker build -t $REGISTRY/$IMAGE_NAME:$IMAGE_TAG .
          echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin $REGISTRY
          docker push $REGISTRY/$IMAGE_NAME:$IMAGE_TAG
        '''
      }
    }
  }
}


🚀 二、GitLab CI/CD 示例#

📄 .gitlab-ci.yml 示例(构建 Java + Docker)#

stages:
  - build
  - docker

variables:
  MAVEN_OPTS: "-DskipTests"

build_jar:
  stage: build
  image: maven:3.9-openjdk-17
  script:
    - mvn clean package $MAVEN_OPTS
  artifacts:
    paths:
      - target/*.jar

docker_image:
  stage: docker
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker build -t registry.example.com/myapp:$CI_COMMIT_SHORT_SHA .
    - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin registry.example.com
    - docker push registry.example.com/myapp:$CI_COMMIT_SHORT_SHA


🚀 三、GitHub Actions 示例#

📄 .github/workflows/build.yml#

name: Build and Deploy

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        java-version: '17'
        distribution: 'temurin'

    - name: Build JAR
      run: mvn clean package -DskipTests

    - name: Upload artifact
      uses: actions/upload-artifact@v4
      with:
        name: app-jar
        path: target/*.jar

  docker:
    runs-on: ubuntu-latest
    needs: build

    steps:
    - uses: actions/checkout@v4

    - name: Login to Docker Hub
      uses: docker/login-action@v3
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - name: Build & Push Docker Image
      uses: docker/build-push-action@v5
      with:
        context: .
        push: true
        tags: yourname/app:latest


🔐 四、Secrets 管理#

工具Secret 存储方式
Jenkins通过 Web 界面或文件配置 Credentials
GitLab项目设置 \> **CI/CD \> Variables**
GitHub仓库设置 \> **Settings \> Secrets and variables**

🛠️ 五、使用场景推荐#

场景推荐平台
企业自建平台、老项目迁移、大规模流水线✅ Jenkins
GitLab 用户、内网 DevOps 一体化部署✅ GitLab CI/CD
GitHub 仓库、开源项目、快速集成✅ GitHub Actions
插件生态丰富、部署平台灵活Jenkins / GitHub Actions
低成本、小团队使用GitLab CI/CD / GitHub Actions

🧠 总结#

GitHub Actions 是当前轻量 CI/CD 最佳选择;GitLab CI/CD 适合 GitLab 用户;Jenkins 是最成熟但运维成本最高的方案,适合对构建控制粒度要求极高的企业使