Jenkins 已成过去式!新兴替代工具GitHub Actions即将崛起

都 2025 年了,我是真的不想再用 Jenkins 了!

我们运维工程师在工作中经常会遇到:Jenkins 服务器突然宕机,Jenkins 正在构建的任务又失败了,Jenkins 刚更新完的插件又挂掉了....,等等诸如此类的问题,有时候搞的我们真的是精力憔悴,接近奔溃的边缘。

众所周知,Jenkins 应该是大中小互联网科技型企业首选的 CI/CD 工具。

但,使用至今,它真的好用吗?它真适合所有企业吗?

带着这些问题,我不得不重新审视 Jenkins 这个强大的 CI/CD 工具。

随着时间的推移,Jenkins 正在显露老态,逐渐变的力不从心。

比如:单体结构的性能与扩展瓶颈,插件生态的兼容性与维护困境,用户学习曲线陡峭与界面落后,云原生与多端部署的短板,管理与运维成本随规模扩大而显著上升。

诸如上述的种种原因,Jenkins 难以满足现代 CI/CD 对灵活性、云原生支持及高效运维的核心需求。

GitHub Actions:Jenkins 替代方案由此而生。

Jenkins 已成过去式!

新兴工具即将崛起!

GitHub Actions 简介

GitHub Actions 是 GitHub 提供的自动化工作流平台,它允许开发者通过定义工作流(Workflows)来自动化软件开发中的各种任务,例如代码构建、测试、部署、发布等。

核心优势在于与 GitHub 生态深度集成,无需额外工具即可实现从代码提交到生产环境的全流程自动化。

核心优势

无缝集成 GitHub:GitHub Actions是GitHub平台的一部分,因此它能够与GitHub的代码仓库、问题跟踪、Pull Request等功能无缝集成。这使得开发者能够在GitHub平台上完成从代码提交到部署的全过程流程自动化,无需切换工具,大大提高了开发效率。

跨平台支持:支持 Linux、Windows、macOS 虚拟机,以及容器化环境(Docker),满足多样化需求。

灵活的调度机制:支持基于事件、定时或手动触发,适应不同场景(如持续集成、夜间构建)。

强大的复用性:通过 Action 市场共享和复用模块,减少重复开发,提升效率。

免费额度:公共仓库每月提供 2000 分钟免费执行时间,私有仓库每月 3000 分钟(按使用量计费)。

核心概念

工作流(Workflow)

由 YAML 文件定义,描述自动化任务的执行流程。工作流存储在仓库的 .github/workflows/ 目录下,支持多文件配置。

事件(Event)

触发工作流运行的机制,常见事件包括:

  • 代码推送push
  • 拉取请求pull_request
  • 定时任务schedule
  • 手动触发workflow_dispatch
  • 标签创建create

任务(Job)

工作流中的独立执行单元,可并行或串行运行。每个任务在独立的虚拟机或容器中执行。

步骤(Step)

任务中的具体操作,可以是:

  • 运行命令run
  • 使用 Action(预定义或自定义的复用模块)

Action

可复用的代码模块,封装了特定功能(如安装依赖、部署到云服务)。GitHub 官方和社区提供了大量现成 Action(如 actions/checkoutactions/setup-node)。

对比其他工具

|-----------|--------------------|-------------|---------------|--------------|
| 特性 | GitHub Actions | Jenkins | GitLab CI | CircleCI |
| 集成度 | 深度集成 GitHub | 独立部署 | 深度集成 GitLab | 独立部署 |
| 配置复杂度 | 低(YAML) | 高(需配置服务器) | 中(YAML) | 中(YAML) |
| 跨平台支持 | 优秀(VM/容器) | 优秀 | 优秀 | 优秀 |
| 免费额度 | 公共仓库 2000 分钟/月 | 需自托管 | 私有项目免费 | 公共仓库免费 |
| 社区生态 | 丰富(官方+社区 Action) | 插件丰富 | 集成 GitLab 生态 | 插件丰富 |

快速入门示例

示例 1:Node.js 项目 CI
复制代码
name: Node.jsCI

on:[push,pull_request]

jobs:
build:
    runs-on:ubuntu-latest# 运行环境
    steps:
      -uses:actions/checkout@v4# 检出代码
      -uses:actions/setup-node@v3# 设置 Node.js 环境
        with:
          node-version:'18'
      -run:npminstall# 安装依赖
      -run:npmtest# 运行测试
示例 2:自动部署到 GitHub Pages
复制代码
name: DeploytoGitHubPages

on:
push:
    branches:[main]

jobs:
deploy:
    runs-on:ubuntu-latest
    steps:
      -uses:actions/checkout@v4
      -run:npminstall&&npmrunbuild# 构建静态文件
      -uses:peaceiris/actions-gh-pages@v3# 部署到 GitHub Pages
        with:
          github_token:${{secrets.GITHUB_TOKEN}}
          publish_dir:./dist

从 Jenkins 迁移到 GitHub Actions

从 Jenkins 迁移到 GitHub Actions,这也是很多用户非常关心的重点问题,从实际操作过程中,我们发现远没有想象中的复杂,还是比较简单的。

Jenkins 和 GitHub Actions 两者在工作流程、Jobs、容器支持等多个方面都相似。

迁移流程梳理

首先,我们需要梳理 Jenkinsfile,记录所有 stages、steps、environment 变量和插件依赖。

然后,将 Jenkins 插件(如 maven、docker)替换为 GitHub Actions 的 Marketplace Action 或原生指令。

在语法转换方面,我们需要将 Jenkins Pipeline 转换成 GitHub Actions YAML,下面通过一个小例子来了解一下转换过程:

Jenkins Pipeline 示例

复制代码
pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps { git 'https://github.com/user/repo.git' }
        }
        stage('Build') {
            environment { NODE_ENV = 'production' }
            steps { sh 'npm install && npm run build' }
        }
    }
}

GitHub Actions 转换

复制代码
name: CIPipeline
on:[push]
jobs:
    build:
        runs-on:ubuntu-latest
        steps:
            -name:Checkoutcode
              uses:actions/checkout@v4
            -name:SetupNode.js
              uses:actions/setup-node@v3
              with:
                  node-version:'18'
            -name:Build
              env:
                  NODE_ENV:production
              run: |
                  npm install
                  npm run build
关键指令对比

|---------------------|---------------------------------------------------|
| Jenkins 指令 | GitHub Actions 替代方案 |
| agent any | runs-on: ubuntu-latest(指定运行器) |
| environment { ... } | env: 或 jobs.<job_id>.env(作业级环境变量) |
| parallel stages | 通过 jobs.<job_id>.needs 控制依赖关系 |
| post 块(成功/失败) | jobs.<job_id>.steps 中使用 if: success()/failure() |

迁移工具

我们也可以使用自动辅助工具 GitHub Actions Importer 来迁移。

复制代码
#安装
gh extension install github/gh-actions-importer

#试运行
gh actions-importer dry-run jenkins --source-url https://jenkins.example.com/job/my-pipeline/

#迁移
gh actions-importer migrate jenkins --source-url https://jenkins.example.com/job/my-pipeline/ --target-repo user/repo

将 Jenkins 脚本(如 Groovy)拆分为多个步骤或自定义 Action,使用 GitHub Actions 的 inputs 和 outputs 传递参数。

通过以上步骤,团队可以系统化地完成迁移,同时利用 GitHub Actions 的现代特性提升开发效率。

结语

在云原生时代,开发者更倾向于使用云服务来构建和管理CI/CD管道。然而,Jenkins 的自我托管模型需要更多的手动配置,难以与云服务无缝集成。

相比之下,GitHub Actions 等云原生 CI/CD 工具则提供了更便捷、更高效的解决方案。

目前,已有大量企业和开发者从 Jenkins 迁移到 GitHub Actions。

此外,GitHub Actions 还受到了开源社区的广泛支持,拥有丰富的插件和集成选项。

云原生、低代码/无代码、AI 等技术的兴起,也在推动 CI/CD 工具向更高效、更智能的方向发展。GitHub Actions 等云原生 CI/CD 工具正是这一趋势的产物。

感兴趣的读者朋友们可以试一试!也期待更多在用的伙伴们分享你们的使用心得与踩坑经验,留言区等你们!

相关推荐
合作小小程序员小小店4 小时前
大屏开发,在线歌词舆情分析系统demo,基于python,flask,web,echart,nlp,自然语言数据库mysql。
后端·python·flask·nlp·echarts
Wang's Blog4 小时前
Linux小课堂: Tomcat容器中部署Jenkins的完整流程与关键技术要点
linux·tomcat·jenkins
芙蓉王真的好14 小时前
优化 Jenkins 构建脚本:避免 pnpm lockfile 相关报错的关键配置
spring·servlet·jenkins
要站在顶端4 小时前
Jenkins Pipeline 多job依赖、触发多Job、并行执行及制品下载
运维·servlet·jenkins
武子康4 小时前
大数据-138 ClickHouse MergeTree 实战详解|分区裁剪 × 稀疏主键索引 × marks 标记 × 压缩
大数据·后端·nosql
非凡ghost4 小时前
图吧工具箱-电脑硬件圈的“瑞士军刀”
前端·javascript·后端
非凡ghost4 小时前
Xrecode3(多功能音频转换工具)
前端·javascript·后端
非凡ghost4 小时前
Subtitle Edit(字幕编辑软件) 中文绿色版
前端·javascript·后端
扎瓦斯柯瑞迫5 小时前
cursor: 10分钟魔改环境、优雅获取Token
前端·javascript·后端