Questão de Engenharia de Software — Jenkins — CESGRANRIO 2024
- Código
- cg057923
- Banca
- CESGRANRIO
- Órgão
- IPEA
- Ano
- 2024
- Cargo
- TPP ( )
- ADepictive Pipeline
- BDescriptive Pipeline
- CDeclarative Pipeline
- DScripted Pipeline
- EHybrid Pipeline
GabaritoD — Scripted Pipeline
Gabarito: letra D. O código apresentado usa a sintaxe Scripted Pipeline, caracterizada pelo bloco node { ... } e pela linguagem Groovy imperativa, sem a estrutura pipeline { ... } com agent e stages típica do Declarative. A distinção entre as duas formas é o núcleo da questão.
O Jenkins Pipeline é um conjunto de plug-ins que permite implementar pipelines de entrega contínua (CI/CD) como código, normalmente em um arquivo chamado Jenkinsfile. Existem duas sintaxes principais: Declarative e Scripted. Ambas são escritas em Groovy, mas com paradigmas diferentes.
A Declarative Pipeline é a mais recente e recomendada pela comunidade. Ela usa uma estrutura fixa e mais simples, com blocos pipeline { }, agent { }, stages { } e steps { }. É mais fácil de aprender e de ler, pois separa claramente a configuração da lógica. Veja um exemplo:
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Test') {
steps {
echo 'Testing...'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
}
}
}
}Já a Scripted Pipeline é a forma mais antiga, baseada em um DSL (Domain Specific Language) do Groovy. Ela usa o bloco node { } para alocar um executor (agente) e permite escrever código Groovy imperativo, como if, for, def, etc. É mais flexível e poderosa, porém mais complexa e difícil de manter. O exemplo do enunciado é exatamente isso: node { stage('Build') { ... } }.
A pegadinha da banca está em confundir os nomes: "Scripted" (roteirizado, imperativo) com "Declarative" (declarativo). O candidato que não conhece a sintaxe pode achar que o código é declarativo por ser "descritivo" ou "depictive", mas a presença do node é a marca registrada do Scripted.
Na prática, a escolha entre as duas formas depende do contexto: para pipelines simples e legíveis, use Declarative; para pipelines complexos que exigem lógica avançada, Scripted pode ser necessário. Mas a banca cobra o reconhecimento da sintaxe, e o node { } é o sinal inequívoco de Scripted.
Guarde a fronteira: Declarative = pipeline { } + agent + stages; Scripted = node { } + código Groovy imperativo. É exatamente nessa distinção que as alternativas se dividem.
Critério | Declarative Pipeline | Scripted Pipeline |
|---|---|---|
Estrutura principal |
|
|
Paradigma | Declarativo (configuração fixa) | Imperativo (programação livre) |
Complexidade | Mais simples e legível | Mais flexível, porém complexo |
Exemplo de sintaxe |
|
|
Depictive Pipeline não existe na terminologia do Jenkins. O termo "depictive" (descritivo) não é usado; a banca inventou um nome para confundir com "Declarative". Não há nenhuma referência a "Depictive Pipeline" na documentação oficial.
Descriptive Pipeline também não existe. O nome correto é Declarative, não "Descriptive". A banca trocou o termo para testar se o candidato conhece a nomenclatura exata. O código do enunciado, além disso, não é declarativo.
Declarative Pipeline é uma das duas formas válidas, mas o código do enunciado não é declarativo. A sintaxe declarativa exige o bloco pipeline { } com agent e stages, e não o node { } isolado. O node é um passo do Scripted, não do Declarative. Portanto, a alternativa está errada por não corresponder ao exemplo.
O código apresentado é um exemplo clássico de Scripted Pipeline. O bloco node { } é a marca registrada dessa sintaxe, que usa Groovy imperativo para definir os estágios (stage) e os passos (echo). A estrutura node { stage('Build') { ... } } é exatamente o formato do Scripted, sem a camada declarativa pipeline { }.
Hybrid Pipeline não é uma categoria oficial do Jenkins. Não existe uma sintaxe "híbrida" reconhecida; o Jenkins oferece apenas as duas formas: Declarative e Scripted. A banca inventou esse termo para completar as alternativas.
A banca explora a confusão entre os nomes "Scripted" e "Declarative". O candidato que decora apenas os nomes, sem conhecer a sintaxe, pode achar que o código é declarativo por ser "descritivo" (Descriptive) ou "depictive". Mas a presença do node { } é o sinal inequívoco de Scripted. Fique atento: Declarative = pipeline { } + agent + stages; Scripted = node { } + código Groovy imperativo.
Gabarito: letra D
Link permanente: /questoes/cg057923