Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

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 os executores hospedados no GitHub no GitHub Enterprise Server. Você pode ver mais informações sobre o suporte futuro planejado no GitHub public roadmap.

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 obter mais informações, confira "Como criar uma ação de contêiner do Docker".
  • É possível reutilizar e compartilhar novamente etapas ou tarefas com a comunidade.

Para obter mais informações, confira "Conceitos básicos do 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 obter mais informações, confira "Sintaxe de fluxo de trabalho do 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 obter mais informações, confira Sobre os 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 obter mais informações, confira "Noções básicas sobre o GitHub Actions" e "Sobre os 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
post
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 os executores hospedados no GitHub
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
excludes

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 Fluxo de trabalho do GitHub Actions
pipeline {
  agent any
  triggers {
    cron('H/15 * * * 1-5')
  }
}
on:
  schedule:
    - cron: '*/15 * * * 1-5'

Configurar variáveis de ambiente em um pipeline

Pipeline do Jenkins Fluxo de trabalho do GitHub Actions
pipeline {
  agent any
  environment {
    MAVEN_PATH = '/usr/local/maven'
  }
}
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Criar projetos projetos de upstream

Pipeline do Jenkins Fluxo de trabalho do GitHub Actions
pipeline {
  triggers {
    upstream(
      upstreamProjects: 'job1,job2',
      threshold: hudson.model.Result.SUCCESS
    )
  }
}
jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

Criar com vários sistemas operacionais

Pipeline do Jenkins Fluxo de trabalho do 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@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 12
      - run: npm install -g bats
      - run: bats tests
        working-directory: scripts/myapp