Pular para o conteúdo principal

Questão de Engenharia de Software — DevOps, IaC, Integração Contínua e Entrega Contínua — CESPE / CEBRASPE 2025

Engenharia de SoftwareDevOps, IaC, Integração Contínua e Entrega Contínua
Código
ce417850
Banca
CESPE / CEBRASPE
Órgão
STM
Ano
2025
Cargo
AJ ( )

A respeito de CI/CD (continuous integration/continuous delivery), julgue o próximo item.

 

No trecho do arquivo .gitlab-ci.yml, utilizado no GitLab CI/CD para definir regras de execução de pipelines com base em variáveis de ambiente, na execução do bloco job2, o valor da variável ALL_JOBS_VAR será “Different value than default”, pois variáveis definidas no nível do job têm precedência sobre as globais com o mesmo nome.

 

variables:
  ALL_JOBS_VAR: "A default variable"

 

job1:
  variables:
    JOB1_VAR: "Job 1 variable"
  script:
    - echo "Variables are '$ ALL_JOBS_VAR'
and '$ JOB1_VAR'"

 

job2:
  variables:
    ALL_JOBS_VAR: "Different value than default"
    JOB2_VAR: "Job 2 variable"
  script:
    - echo "Variables are '$ ALL_JOBS_VAR',
'$ JOB2_VAR', and '$ JOB1_VAR'"

  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

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”.

GitLab CI/CD: precedência de variáveis

Gabarito: Certo (C). No GitLab CI/CD, variáveis definidas no nível do job têm precedência sobre variáveis globais com o mesmo nome. Portanto, no bloco job2, a variável ALL_JOBS_VAR será "Different value than default", pois a definição local ao job sobrescreve a global. Essa é uma regra fundamental de escopo de variáveis em pipelines do GitLab.

O GitLab CI/CD é uma ferramenta de integração contínua e entrega contínua que permite definir pipelines como código, geralmente em um arquivo .gitlab-ci.yml. Nesse arquivo, é possível declarar variáveis em diferentes níveis de escopo: global (no topo do arquivo), por job, por pipeline, ou até mesmo como variáveis de ambiente configuradas no projeto ou no grupo. A precedência dessas variáveis segue uma hierarquia bem definida, e a regra central é que quanto mais específico o escopo, maior a precedência. Assim, uma variável definida diretamente em um job tem prioridade sobre uma variável global com o mesmo nome.

Essa hierarquia existe para dar flexibilidade e controle fino sobre o comportamento de cada job. Imagine um cenário em que a maioria dos jobs deve usar uma configuração padrão, mas um job específico precisa de um valor diferente. Em vez de duplicar o pipeline ou criar condições complexas, basta redefinir a variável no nível do job. Isso é exatamente o que o trecho de código da questão demonstra: a variável ALL_JOBS_VAR é definida globalmente como "A default variable", mas o job2 a redefine como "Different value than default". Quando o job2 é executado, o valor da variável será o local, pois ele tem precedência.

É importante não confundir essa precedência com a ordem de definição ou com o conceito de variáveis em linguagens de programação tradicionais. No GitLab CI/CD, a precedência é determinada pelo escopo, não pela ordem em que as variáveis aparecem no arquivo. A hierarquia completa, da maior para a menor precedência, inclui: variáveis de pipeline (definidas na interface do GitLab), variáveis de projeto, variáveis de grupo, variáveis de instância, e, dentro do arquivo .gitlab-ci.yml, variáveis de job, variáveis de pipeline (bloco variables no topo), e variáveis definidas em outros lugares. A regra prática é: o escopo mais específico vence.

A pegadinha que a banca explora aqui é justamente a inversão dessa lógica. O candidato pode ser tentado a acreditar que a variável global, por ser definida "primeiro" ou por estar "acima" no arquivo, teria precedência. No entanto, a precedência é por escopo, não por posição. A variável do job é mais específica e, portanto, tem prioridade. Guarde essa distinção: global vs. local, e a local vence.

Precedência de variáveis no GitLab CI/CD
  • 1Regra central
    • Quanto mais específico o escopo, maior a precedência
    • Escopo vence, não a ordem no arquivo
  • 2Hierarquia (maior → menor)
    • Variáveis de pipeline (interface)
    • Variáveis de projeto
    • Variáveis de grupo
    • Variáveis de instância
    • Variáveis de job
    • Variáveis globais (topo do .gitlab-ci.yml)
  • 3Exemplo prático
    • ALL_JOBS_VAR global: "A default variable"
    • job2 redefine ALL_JOBS_VAR
      • "Different value than default"
    • job2 usa o valor local (mais específico)
LEVEL · soulevel.com.br

Item — ✅ CERTO

A afirmativa está correta. No GitLab CI/CD, a precedência de variáveis é definida pelo escopo, e variáveis definidas no nível do job têm precedência sobre variáveis globais com o mesmo nome. No trecho apresentado, ALL_JOBS_VAR é definida globalmente como "A default variable" e, dentro do job2, é redefinida como "Different value than default". Portanto, na execução do job2, o valor da variável será o local, confirmando a afirmação.

GitLab CI/CD (documentação oficial):

A precedência de variáveis no GitLab CI/CD é determinada pela hierarquia de escopos. Variáveis definidas em um nível mais específico (como um job) sobrescrevem variáveis definidas em níveis mais gerais (como o global).

A regra é consistente com o princípio de que cada job pode ter seu próprio ambiente de execução, permitindo personalização sem afetar outros jobs. O job1, por exemplo, não redefine ALL_JOBS_VAR, então usará o valor global "A default variable". Já o job2, ao redefinir a variável, garante que seu script utilize o valor específico "Different value than default".

Gabarito: Certo (C).

Link permanente: /questoes/ce417850