Skip to main content

Migrar do Jenkins para o GitHub Actions

O GitHub Actions e o Jenkins compartilham múltiplas semelhanças, o que torna a migração para GitHub Actions relativamente simples.

Observação

No momento, não há suporte para executores hospedados no GitHub no GitHub Enterprise Server.

Introdução

O Jenkins e o GitHub Actions permitem criar fluxos de trabalho que criam, testam, publicam, lançam e implementam código automaticamente. O Jenkins e o GitHub Actions compartilham algumas semelhanças em termos de configuração do fluxo de trabalho:

  • O Jenkins cria fluxos de trabalho usando Pipelines Declarativos, que são semelhantes aos arquivos de fluxo de trabalho do GitHub Actions.
  • O Jenkins usa fases para executar uma coleção de etapas, enquanto o GitHub Actions usa trabalhos para agrupar uma ou mais etapas ou comandos individuais.
  • O Jenkins e o GitHub Actions são compatíveis com criações baseadas em contêineres. Para saber mais, confira Criando uma ação de contêiner do Docker.
  • É possível reutilizar e compartilhar novamente etapas ou tarefas com a comunidade.

Para saber mais, confira Entendendo o GitHub Actions.

Principais diferenças

  • O Jenkins tem dois tipos de sintaxe para a criação de pipelines: Declarative Pipeline e Scripted Pipeline. O GitHub Actions usa o YAML para criar fluxos de trabalho e arquivos de configuração. Para saber mais, confira Sintaxe de fluxo de trabalho para o GitHub Actions.
  • As implementações do Jenkins são tipicamente auto-hospedadas, com usuários mantendo os servidores em seus próprios centros de dados. O GitHub Actions oferece uma abordagem de nuvem híbrida, hospedando seus próprios executores que você pode usar para executar trabalhos, ao mesmo tempo em que também oferece suporte aos executores auto-hospedados. Para saber mais, confira Executores auto-hospedados.

Comparar recursos

Distribuir suas criações

O Jenkins permite que se envie criações para um único agente de criação, ou você pode distribuí-las entre vários agentes. Você também pode classificar esses agentes de acordo com vários atributos, como, por exemplo, tipos de sistema operacional.

De modo similar, o GitHub Actions pode enviar trabalhos para executores hospedados em GitHub ou executores auto-hospedados, e você pode usar as etiquetas para classificar os executores de acordo com vários atributos. Para saber mais, confira Entendendo o GitHub Actions e Executores auto-hospedados.

Usar seções para organizar pipelines

O Jenkins divide seus Declarative Pipelines em múltiplas seções. De forma similar, o GitHub Actions organiza seus fluxos de trabalho em seções separadas. A tabela abaixo compara as seções do Jenkins com o fluxo de trabalho GitHub Actions.

Diretivas do JenkinsGitHub Actions
agentjobs.<job_id>.runs-on
jobs.<job_id>.container
postNenhum
stagesjobs
stepsjobs.<job_id>.steps

Uso de diretivas

O Jenkins usa diretivas para gerenciar os Pipelines Declarativos. Essas diretivas definem as características do seu fluxo de trabalho e como ele será executado. A tabela abaixo demonstra como estas diretivas são mapeadas com conceitos dentro do GitHub Actions.

Diretivas do JenkinsGitHub 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>.<branches|tags>
on.<pull_request>.<branches>
on.<push|pull_request>.paths
triggers { upstreamprojects() }jobs.<job_id>.needs
Sintaxe cron do Jenkinson.schedule
stagejobs.<job_id>
jobs.<job_id>.name
toolsEspecificações para executores hospedados no GitHub-hosted runners
inputinputs
whenjobs.<job_id>.if

Usar estágios sequenciais

Processamento paralelo do trabalho

O Jenkins pode executar as stages e as steps em paralelo, enquanto o GitHub Actions atualmente só executa trabalhos em paralelo.

Jenkins em paraleloGitHub Actions
paralleljobs.<job_id>.strategy.max-parallel

Matriz

Tanto o GitHub Actions quanto o Jenkins permitem que você use uma matriz para definir várias combinações de sistema.

JenkinsGitHub Actions
axisstrategy/matrix
context
stagessteps-context
excludesNenhum

Usar passos para executar tarefas

O Jenkins agrupa as steps em stages. Cada uma dessas etapas pode ser um script, função ou comando, entre outros. Da mesma forma, o GitHub Actions usa jobs para executar grupos específicos de steps.

JenkinsGitHub Actions
stepsjobs.<job_id>.steps

Exemplos de tarefas comuns

Como agendar um pipeline para ser executado com o cron

Pipeline do Jenkins com cron

pipeline { agent any triggers { cron('H/15 * * * 1-5') } } 

Fluxo de trabalho GitHub Actions com cron

on: schedule: - cron: '*/15 * * * 1-5' 

Para obter mais informações sobre eventos schedule e a sintaxe cron aceita, consulte Eventos que disparam fluxos de trabalho.

Configurar variáveis de ambiente em um pipeline

Pipeline do Jenkins com uma variável de ambiente

pipeline { agent any environment { MAVEN_PATH = '/usr/local/maven' } } 

Fluxo de trabalho do GitHub Actions com uma variável de ambiente

jobs: maven-build: env: MAVEN_PATH: '/usr/local/maven' 

Criar projetos projetos de upstream

Pipeline do Jenkins baseado em um projeto upstream

pipeline { triggers { upstream( upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS ) } } 

Fluxo de trabalho do GitHub Actions baseado em um projeto upstream

jobs: job1: job2: needs: job1 job3: needs: [job1, job2] 

Criar com vários sistemas operacionais

Pipeline do Jenkins baseado em vários sistemas operacionais

pipeline { agent none stages { stage('Run Tests') { matrix { axes { axis { name: 'PLATFORM' values: 'macos', 'linux' } } agent { label "${PLATFORM}" } stages { stage('test') { tools { nodejs "node-20" } steps { dir("scripts/myapp") { sh(script: "npm install -g bats") sh(script: "bats tests") } } } } } } } } 

Fluxo de trabalho do GitHub Actions baseado em vários sistemas operacionais

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@v5 - uses: actions/setup-node@v4 with: node-version: 20 - run: npm install -g bats - run: bats tests working-directory: ./scripts/myapp