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 Jenkins | GitHub Actions |
|---|---|
agent | jobs.<job_id>.runs-on jobs.<job_id>.container |
post | Nenhum |
stages | jobs |
steps | jobs.<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.
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 paralelo | GitHub Actions |
|---|---|
parallel | jobs.<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.
| Jenkins | GitHub Actions |
|---|---|
axis | strategy/matrix context |
stages | steps-context |
excludes | Nenhum |
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.
| Jenkins | GitHub Actions |
|---|---|
steps | jobs.<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