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 "Criando 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 "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 obter mais informações, 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 Sobre 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 "Entendendo o GitHub Actions" e "Sobre 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 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 abaixo demonstra como estas diretivas são mapeadas com conceitos dentro do GitHub Actions.
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 paralelo | GitHub Actions |
---|---|
parallel | jobs.<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.
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, o 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')
}
}
Fluxo de trabalho GitHub Actions com cron
on:
schedule:
- cron: '*/15 * * * 1-5'
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-16" }
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@v4
- uses: actions/setup-node@v4
with:
node-version: 16
- run: npm install -g bats
- run: bats tests
working-directory: ./scripts/myapp