Publicamos atualizações frequentes em nossa documentação, e a tradução desta página ainda pode estar em andamento. Para obter as informações mais recentes, acesse a documentação em inglês. Se houver problemas com a tradução desta página, entre em contato conosco.

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.

Neste artigo

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 Declarative Pipelines, que são semelhantes aos arquivos do fluxo de trabalho GitHub Actions.
  • O Jenkins usa stages 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, consulte "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, consulte "Conceitos básicos para 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, consulte "Sintaxe do 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 obter mais informações, consulte 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. A tabela a seguir compara como o conceito de criação distribuída é implementado tanto para o Jenkins e quanto para o GitHub Actions.

JenkinsGitHub Actions
agentesexecutores
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
agentejobs.<job_id>.runs-on
jobs.<job_id>.container
post
stagesjobs
stepsjobs.<job_id>.steps

Usar diretivas

O Jenkins usa diretivas para gerenciar os Declarative Pipelines. 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
ambientejobs.<job_id>.env
jobs.<job_id>.steps.env
optionsjobs.<job_id>.strategy
jobs.<job_id>.strategy.fail-fast
jobs.<job_id>.timeout-minutes
parâmetrosentradas
saídas
gatilhosem
on.<event_name>.types
on.<push|pull_request>.<branches|tags>
on.<push|pull_request>.paths
aciona { upstreamprojects() }jobs.<job_id>.needs
Sintaxe cron do Jenkinson.schedule
stagejobs.<job_id>
jobs.<job_id>.name
toolsSoftware instalado em executores hospedados no GitHub
entradainputs (entradas)
quandojobs.<job_id>.if

Usar estágios sequenciais

Processamento paralelo do trabalho

O Jenkins pode executar os stages e as etapas em paralelo, enquanto o GitHub Actions está executando os trabalhos em paralelo.

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

Criar matriz

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

JenkinsGitHub Actions
eixoestratégia/matriz
contexto
stagessteps-context
exclui

Usar passos para executar tarefas

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

Etapas do JenkinsGitHub Actions
scriptjobs.<job_id>.steps

Exemplos de tarefas comuns

Agendar um pipeline para ser executado com 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') {
    parallel {
      stage('Test On MacOS') {
        agent { label "macos" }
        tools { nodejs "node-12" }
        steps {
          dir("scripts/myapp") {
            sh(script: "npm install -g bats")
            sh(script: "bats tests")
          }
        }
      }
      stage('Test On Linux') {
        agent { label "linux" }
        tools { nodejs "node-12" }
        steps {
          dir("script/myapp") {
            sh(script: "npm install -g bats")
            sh(script: "bats tests")
          }
        }
      }
    }
  }
}
}
nome: demo-workflow
em:
  push:
trabalhos:
  teste:
    runs-on: ${{ matrix.os }}
    estratégia:
      fail-fast: false
      matriz:
        os: [macos-latest, ubuntu-latest]
    etapas:
      - usa: actions/checkout@v1
      - usa: actions/setup-node@v1
        com:
          node-version: 12
      - executar: npm install -g bats
      - executar: bats tests
        working-directory: scripts/myapp

Pergunte a uma pessoa

Não consegue encontrar o que procura?

Entrar em contato