我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

从 Jenkins 迁移到 GitHub 操作

GitHub Actions 和 Jenkins 有多种相似之处,这使得迁移到 GitHub Actions 相对简单。

本文内容

简介

Jenkins 和 GitHub Actions 都允许您创建能自动构建、测试、发布、发行和部署代码的工作流程。 Jenkins 和 GitHub Actions 的工作流程配置有一些相似之处:

  • Jenkins 使用 Declarative Pelines 创建工作流程,这些工作流程类似于 GitHub Actions 工作流程文件。
  • Jenkins 使用阶段运行步骤集合,而 GitHub Actions 则使用作业来分组一个或多个步骤或单个命令。
  • Jenkins 和 GitHub Actions 支持基于容器的构建。 更多信息请参阅“创建 Docker 容器操作”。
  • 步骤或任务可以重复使用并与社区共享。

更多信息请参阅“GitHub Actions 的核心概念”。

主要差异

  • Jenkins 有两种类型的语法用来创建管道:Declarative Pipeline 和 Scripted Pipeline。 GitHub Actions 使用 YAML 创建工作流程和配置文件。 更多信息请参阅“GitHub 操作的工作流程语法”。
  • Jenkins 部署通常是自托管的,用户在自己的数据中心维护服务器。 GitHub Actions 通过托管自己可用于运行作业的运行器提供混合云方法,同时也支持自托管运行器。 更多信息请参阅“关于自托管运行器”。

比较功能

分发版本

Jenkins 可让您发送版本到单个构建代理,或者您可以在多个代理之间进行分发。 您也可以根据不同的属性(例如操作系统类型)对这些代理进行分类。

同样, GitHub Actions 可以向 GitHub 托管或自托管的运行器发送作业,您可以根据不同的属性使用标签对运行器分类。 下表比较了如何对 Jenkins 和 GitHub Actions 实施分布式构建概念。

JenkinsGitHub Actions
agentsrunners
self-hosted runners

使用区段组织管道

Jenkins 将其 Declarative Pipelines 分为多个区段。 同样,GitHub Actions 也将其工作流程分成单独的部分。 下表比较了Jenkins 区段与 GitHub Actions 工作流程。

Jenkins 指令GitHub Actions
agentjobs.<job_id>.runs-on
jobs.<job_id>.container
post
stagesjobs
stepsjobs.<job_id>.steps

使用指令

Jenkins 使用指令来管理 Declarative Pipelines。 这些指令定义工作流程的特性及其执行方式。 下表演示这些指令如何映射到 GitHub Actions 中的概念。

Jenkins 指令GitHub Actions
environmentjobs.<job_id>.env
jobs.<job_id>.steps.env
optionsjobs.<job_id>.strategy
jobs.<job_id>.strategy.fail-fast
jobs.<job_id>.timeout-minutes
parametersinputs
outputs
triggerson
on.<event_name>.types
on.<push|pull_request>.<branches|tags>
on.<push|pull_request>.paths
triggers { upstreamprojects() }jobs.<job_id>.needs
Jenkins cron syntaxon.schedule
阶段,暂存jobs.<job_id>
jobs.<job_id>.name
toolsGitHub 托管的运行器的规格
inputinputs
whenjobs.<job_id>.if

使用连续阶段

并行作业处理

Jenkins 可以并行运行 stagessteps,而 GitHub Actions 目前只能并行运行作业。

Jenkins ParallelGitHub Actions
paralleljobs.<job_id>.strategy.max-parallel

构建矩阵

GitHub Actions 和 Jenkins 都允许您使用构建矩阵来定义各种系统组合。

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludes

使用步骤执行任务

Jenkins 将 steps 组织在 stages。 每个步骤都可以是脚本、函数或命令等。 同样, GitHub Actions 使用 job 来执行特定的 steps 组。

Jenkins 步骤GitHub Actions
scriptjobs.<job_id>.steps

常见任务示例

计划与 cron 一起运行的管道

Jenkins Pipeline GitHub Actions 工作流程
  pipeline {
   agent any
    triggers {
      cron('H/15 * * * 1-5')
    }
 }
on:
schedule:
  - cron:  '*/15 * * * 1-5'

配置管道中的环境变量

Jenkins Pipeline GitHub Actions 工作流程
pipeline {
  agent any
  environment {
    MAVEN_PATH = '/usr/local/maven'
  }
}
jobs:
  maven-build:
  env:
    MAVEN_PATH: '/usr/local/maven'

从上游项目构建

Jenkins Pipeline GitHub Actions 工作流程
pipeline {
  triggers {
    upstream(
      upstreamProjects: 'job1,job2',
      threshold: hudson.model.Result.SUCCESS)
    }
  }
}
jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

使用多个操作系统构建

Jenkins Pipeline GitHub Actions 工作流程
pipeline {
agent none
stages {
stage('Run Tests') {
  matrix {
    axes {
      axis {
        name: 'PLATFORM'
        values: 'macos', 'linux'
      }
    }
    agent { label "${PLATFORM}" }
    stages {
      stage('test') {
        tools { nodejs "node-12" }
        steps {
          dir("scripts/myapp") {
            sh(script: "npm install -g bats")
            sh(script: "bats tests")
          }
        }
      }
    }
  }
}
}
}
name: demo-workflow
on:
  push:
jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, ubuntu-latest]
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-node@v1
        with:
          node-version: 12
      - run: npm install -g bats
      - run: bats tests
        working-directory: scripts/myapp

此文档对您有帮助吗?

Privacy policy

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。