Skip to main content

Migrando do Jenkins para o GitHub Actions

GitHub Actions e Jenkins compartilham várias 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 Enterprise Server no GitHub.

Introdução

O Jenkins e GitHub Actions ambos permitem criar fluxos de trabalho que criam, testam, publicam, liberam e implantam código automaticamente. Jenkins e GitHub Actions compartilham algumas semelhanças na configuração do fluxo de trabalho:

  • O Jenkins cria fluxos de trabalho usando Pipelines Declarativos, que são semelhantes aos GitHub Actions arquivos de fluxo de trabalho.
  • O Jenkins usa estágios para executar uma coleção de etapas, enquanto GitHub Actions usa trabalhos para agrupar uma ou mais etapas ou comandos individuais.
  • Jenkins e GitHub Actions oferecem suporte a compilaçõ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 Noções básicas sobre GitHub Actions.

Principais diferenças

  • O Jenkins tem dois tipos de sintaxe para a criação de pipelines: Declarative Pipeline e Scripted Pipeline. GitHub Actions usa 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. GitHub Actions oferece uma abordagem de nuvem híbrida hospedando seus próprios corredores que você pode usar para executar trabalhos, ao mesmo tempo em que dá suporte a corredores 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.

Da mesma forma, GitHub Actions pode enviar trabalhos para executores hospedados no GitHub ou auto-hospedados, e pode usar rótulos para classificar os executores de acordo com vários atributos. Para saber mais, confira Noções básicas sobre GitHub Actions e Executores auto-hospedados.

Usar seções para organizar pipelines

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

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 a seguir demonstra como essas diretivas correspondem a conceitos em 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
tools
Especificações para GitHubrunners hospedados
inputinputs
whenjobs.<job_id>.if

Usar estágios sequenciais

Processamento paralelo do trabalho

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

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

Matriz

Tanto GitHub Actions quanto Jenkins permitem que você use uma matriz para definir várias combinações do 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, 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')
  }
}

GitHub Actions fluxo de trabalho 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'
  }
}

GitHub Actions fluxo de trabalho 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
    )
  }
}

GitHub Actions fluxo de trabalho criado a partir de um projeto de origem

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")
              }
            }
          }
        }
      }
    }
  }
}

GitHub Actions fluxo de trabalho criado com 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@v6
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm install -g bats
      - run: bats tests
        working-directory: ./scripts/myapp