Pular para o conteúdo principal

Questão de Engenharia de Software — Jenkins — CESGRANRIO 2024

Engenharia de SoftwareJenkins
Código
cg057923
Banca
CESGRANRIO
Órgão
IPEA
Ano
2024
Cargo
TPP ( )
O Jenkins Pipeline, ou simplesmente Pipeline, é um conjunto de plug-ins que suporta a implementação e a integração de pipelines de entrega contínua no Jenkins. A definição de um Jenkins Pipeline é normalmente escrita em um arquivo de texto chamado Jenkinsfile, como mostrado no exemplo a seguir. node {        stage('Build') {               echo 'Building....'        }        stage('Test') {               echo 'Testing....'       }       stage('Deploy') {              echo 'Deploying....'       } }   Esse arquivo de texto é um exemplo de uma
  1. ADepictive Pipeline
  2. BDescriptive Pipeline
  3. CDeclarative Pipeline
  4. DScripted Pipeline
  5. EHybrid Pipeline
Revelar gabarito e comentário

GabaritoD — Scripted Pipeline

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Jenkins Pipeline: Scripted vs Declarative

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

pipeline { } com agent, stages, steps

node { } com código Groovy imperativo

Paradigma

Declarativo (configuração fixa)

Imperativo (programação livre)

Complexidade

Mais simples e legível

Mais flexível, porém complexo

Exemplo de sintaxe

pipeline { agent any; stages { stage('Build') { steps { echo '...' } } } }

node { stage('Build') { echo '...' } }

Alternativa A — ❌ Incorreta

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.

Alternativa B — ❌ Incorreta

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.

Alternativa C — ❌ Incorreta

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.

Alternativa D — ✅ Correta ⟵ GABARITO

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 { }.

Alternativa E — ❌ Incorreta

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.

NÃO CAIA NESSA!

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