Integração e Entrega Contínua
Simulado respondido, com a resposta correta destacada e explicação de cada questão.
CI/CD - Conceitos Gerais
Questão 1
Qual é o objetivo principal da Integração Contínua (CI)?
Por quê: CI é sobre integrar código com frequência (várias vezes ao dia) num repositório compartilhado, rodando testes automáticos a cada mudança para detectar problemas cedo. Deploy em produção é papel do CD, não do CI.
Questão 2
Qual é a diferença fundamental entre Entrega Contínua (Continuous Delivery) e Implementação Contínua (Continuous Deployment)?
Por quê: Nos dois casos o código passa por testes automatizados e fica pronto para produção. A diferença está no "gatilho" do deploy: na Entrega Contínua alguém aperta o botão (decisão humana); na Implementação Contínua o deploy acontece sozinho assim que os testes passam.
Questão 3
Num pipeline de CI/CD, o que representa o termo 'Pipeline'?
Por quê: Pipeline é a sequência de etapas (build, teste, deploy etc.) que o código atravessa automaticamente. Pense numa "linha de montagem" do código.
Questão 4
Qual destes é um benefício direto da adoção de práticas de CI/CD?
Por quê: Lançar mudanças pequenas e frequentes é mais fácil de testar e de reverter caso algo dê errado, reduzindo o risco de cada release. CI/CD não elimina bugs nem a comunicação entre equipas.
Questão 5
O que acontece normalmente na fase de 'Build' de um pipeline de CI?
Por quê: "Build" é literalmente a etapa de compilação: transformar o código-fonte, com suas dependências, num artefato pronto para ser testado/executado (ex.: um .jar, um binário, uma imagem Docker).
Questão 6
O que caracteriza um 'Staging Environment' num pipeline de CD?
Por quê: Staging existe para simular produção o mais fielmente possível, servindo de última validação antes do lançamento real.
Questão 7
Qual é a importância dos 'Testes de Regressão' num pipeline automatizado?
Por quê: "Regressão" significa "voltar atrás": esses testes existem para pegar casos em que uma mudança nova quebrou algo que já funcionava.
Linux - Linha de Comando
Questão 8
Qual comando é utilizado para listar os arquivos e subdiretórios em diretório, incluindo os arquivos ocultos?
Por quê: A flag
-a ("all") do ls mostra também arquivos ocultos (os que começam com ponto). Já -l só muda o formato de exibição (lista longa), sem mostrar ocultos.Questão 9
Para mudar o proprietário de um arquivo no Linux, qual comando deve ser utilizado?
Por quê:
chown = "change owner". Não confundir com chmod (muda permissões) nem chgrp (muda apenas o grupo).Questão 10
Qual comando permite visualizar o conteúdo de um arquivo de texto diretamente no terminal sem abrir um editor?
Por quê:
cat ("concatenate") imprime o conteúdo de um arquivo direto no terminal. touch cria arquivos vazios e mkdir cria diretórios.Questão 11
Como se apaga um diretório que não está vazio através da linha de comandos?
Por quê:
rmdir só apaga diretórios vazios. Para remover um diretório com conteúdo é preciso rm -r (recursivo), que apaga tudo dentro dele também.Questão 12
Qual comando é utilizado para verificar o caminho completo do diretório onde se encontra atualmente?
Por quê:
pwd = "print working directory", mostra o caminho absoluto de onde você está. cd serve para mudar de diretório, não para mostrar o atual.Questão 13
Qual é o comando utilizado para pesquisar padrões de texto dentro de arquivos?
Por quê:
grep busca padrões de texto (inclusive expressões regulares) dentro do conteúdo dos arquivos. find busca arquivos pelo nome/atributos, não pelo conteúdo.Questão 14
Para dar permissão total (leitura, escrita e execução) a todos os usuários num arquivo, qual comando chmod deve ser usado?
Por quê: Cada dígito representa dono/grupo/outros, e 7 = leitura(4)+escrita(2)+execução(1).
777 dá todas as permissões a todo mundo. 666 não inclui execução.Questão 15
Como se pode criar um arquivo vazio chamado 'notas.txt' de forma rápida?
Por quê:
touch cria um arquivo vazio (ou atualiza a data de modificação se já existir). É o jeito padrão e rápido no Linux.Questão 16
Qual comando é usado para mover ou renomear arquivos e diretórios?
Por quê:
mv ("move") serve tanto para mover quanto para renomear (renomear é só "mover" para o mesmo lugar com outro nome). cp copia, não move.Docker
Questão 17
Qual é a principal diferença entre uma Imagem Docker e um Container Docker?
Por quê: Pense na imagem como uma "planta"/molde imutável, e o container como uma "casa construída" a partir dessa planta, em execução. Você pode criar vários containers a partir da mesma imagem.
Questão 18
Qual é o objetivo principal do arquivo 'Dockerfile'?
Por quê: O Dockerfile é uma "receita": lista passo a passo (FROM, COPY, RUN, CMD...) como montar a imagem automaticamente.
Questão 19
No Docker, para que servem os 'Volumes'?
Por quê: Por padrão, dados dentro de um container somem quando ele é removido. Volumes gravam esses dados fora do container (no host ou num volume gerenciado), fazendo-os sobreviver mesmo se o container for apagado.
Questão 20
Qual comando é utilizado para baixar uma imagem do Docker Hub para a sua máquina local sem necessariamente instanciar um container com base nela?
Por quê:
docker pull só baixa a imagem. docker run baixa (se não existir localmente) e já cria/inicia um container. docker push faz o caminho inverso (envia para o registro).Questão 21
Qual é a principal diferença entre um Container Docker e uma Máquina Virtual (VM)?
Por quê: Containers virtualizam só a aplicação e reutilizam o kernel do host, por isso são leves e rápidos. VMs carregam um sistema operacional inteiro por cima de um hypervisor, o que é mais pesado e lento para iniciar.
Questão 22
Qual é o comando utilizado para criar uma imagem a partir de um arquivo 'Dockerfile'?
Por quê:
docker build lê o Dockerfile e gera a imagem. É diferente de docker run, que usa uma imagem já pronta para criar um container.Questão 23
No Docker, o que acontece aos dados guardados dentro de um Container quando este é removido, caso não tenham sido utilizados volumes?
Por quê: Sem volume, os arquivos ficam só na camada de escrita do container. Ao remover o container, essa camada some e os dados se perdem — por isso volumes existem.
Questão 24
Qual instrução do Dockerfile define o comando padrão que será executado quando o Container for iniciado?
Por quê:
FROM define a imagem base, RUN executa comandos durante a construção da imagem, EXPOSE só documenta portas. CMD é o processo que roda quando o container é iniciado.Questão 25
Qual é a principal diferença entre o comando 'docker run' e 'docker start'?
Por quê:
run = criar (a partir da imagem) + iniciar. start = apenas religar um container que já existia e estava parado, sem criar um novo.Questão 26
No contexto de um Dockerfile, para que serve a instrução 'EXPOSE'?
Por quê: EXPOSE é apenas informativo/documental. Quem realmente abre a porta para o host é a flag
-p do docker run.Questão 27
O que acontece se for executado o comando 'docker run -d nginx'?
Por quê: A flag
-d significa "detached" (segundo plano). Apagar automaticamente é a flag --rm, e modo interativo com terminal é -it.Questão 28
Qual é a vantagem de utilizar 'Multi-stage builds' num Dockerfile?
Por quê: Com multi-stage você usa um estágio "pesado" (com compiladores, dependências de build) só para gerar o artefato, e depois copia apenas esse artefato para uma imagem final leve (ex.: nginx:alpine), descartando tudo que não é necessário em produção.
Git
Questão 29
Qual comando é utilizado para criar um novo repositório Git local num diretório existente?
Por quê:
git init transforma uma pasta comum num repositório Git. git clone é para copiar um repositório remoto já existente, não para criar um do zero.Questão 30
Após alterar um arquivo, qual comando é usado para adicioná-lo à 'Staging Area' antes do commit?
Por quê:
git add move as mudanças para a área de staging (o "carrinho" antes de fechar a compra). Só depois de adicionado é que o git commit registra a mudança no histórico.Questão 31
Como se pode verificar o estado atual do repositório, vendo quais arquivos foram modificados ou estão na staging area?
Por quê:
git status é o "raio-x" do momento: mostra o que mudou, o que está staged e o que não está. git log mostra o histórico de commits, não o estado atual.Questão 32
Qual comando cria um novo 'branch' (ramo) e muda para ele imediatamente?
Por quê:
git branch sozinho só cria o branch, sem mudar para ele. A flag -b do checkout faz as duas coisas: cria e já muda. (Equivalente moderno: git switch -c.)Questão 33
Para baixar as alterações de um repositório remoto e mesclá-las automaticamente no seu ramo (Branch) local atual, qual comando usa?
Por quê:
git pull = git fetch + git merge automático. O fetch sozinho só baixa as referências, sem mesclar no seu branch.Questão 34
Como se visualiza o histórico completo de commits de um projeto?
Por quê:
git log lista os commits em ordem cronológica, com autor, data e mensagem.Questão 35
Qual comando é usado para enviar as suas alterações locais confirmadas para o repositório remoto?
Por quê:
git commit só registra localmente. Para mandar isso para o servidor remoto (ex.: GitHub) é preciso git push.Questão 36
Qual comando mescla o conteúdo de um ramo específico (ex: 'feature') no ramo atual (ex: 'main')?
Por quê: Estando em "main",
git merge feature traz e combina as mudanças do branch "feature" para dentro do branch atual.Questão 37
Qual é a função do comando 'git remote add origin <url>'?
Por quê: Esse comando só cria a referência/apelido ("origin") apontando para uma URL remota. Ele não cria repositório nem baixa nada sozinho — quem baixa é o
fetch/pull.Questão 38
Se apagou acidentalmente um arquivo e ainda não fez commit, qual comando (nas versões mais recentes do Git) é recomendado para restaurar esse arquivo?
Por quê:
git restore é o comando moderno para desfazer mudanças não commitadas em um arquivo, trazendo-o de volta ao último estado salvo. git clean -f remove arquivos não rastreados (o oposto do que queremos aqui).GitHub Actions
Questão 39
Em qual diretório do repositório e com qual extensão os arquivos de workflow do GitHub Actions devem ser salvos?
Por quê: É uma convenção fixa do GitHub: os arquivos de workflow ficam em
.github/workflows/ e são escritos em YAML (.yml ou .yaml).Questão 40
Por padrão, de que maneira múltiplos jobs definidos dentro de um mesmo arquivo de workflow são executados se nenhuma dependência for especificada?
Por quê: Sem usar
needs, o GitHub Actions assume que os jobs são independentes e os roda todos ao mesmo tempo, em runners separados, para ganhar velocidade.Questão 41
Qual palavra-chave do YAML é utilizada na definição de um job para indicar que ele depende da conclusão bem-sucedida de outro job antes de iniciar?
Por quê:
needs: [nome_do_job] faz um job esperar outro terminar (com sucesso) antes de começar, criando uma sequência.Questão 42
Como o GitHub Actions gerencia os dados armazenados na seção de Secrets do repositório para garantir a segurança?
Por quê: Secrets são criptografados no GitHub e o próprio sistema de logs mascara automaticamente qualquer valor de secret que apareça na saída, mostrando
***.Questão 43
Qual evento (on:) permite adicionar um botão chamado "Run workflow" na interface do GitHub para disparar a automação manualmente?
Por quê:
workflow_dispatch é o evento que habilita o disparo manual pela interface do GitHub (o botão "Run workflow"). repository_dispatch é para disparos via API externa, não pelo botão da UI.Questão 44
Qual função de status em condicionais (if:) garante que uma etapa de limpeza (cleanup) seja executada sempre, independentemente de sucesso, falha ou cancelamento das etapas anteriores?
Por quê:
always() ignora o resultado das etapas anteriores e faz aquela etapa rodar sempre — ideal para limpeza de recursos ou notificações finais.Questão 45
O que a expressão POSIX cron '0 0 * * *' configura ao ser utilizada em um evento agendado (schedule)?
Por quê: A ordem dos campos cron é Minuto Hora Dia-do-mês Mês Dia-da-semana. "0 0 * * *" = minuto 0, hora 0 (meia-noite UTC), todo dia, todo mês, todo dia da semana — ou seja, todos os dias à meia-noite.
Questão 46
Qual é a principal diferença de visibilidade e segurança entre Variáveis de repositório e Secrets?
Por quê: Variáveis (Variables) são para configs não sensíveis (ex.: nome de ambiente) e aparecem em texto puro. Secrets são para dados sensíveis (senhas, tokens) e ficam criptografados/mascarados.
Questão 47
Para configurar uma etapa de notificação ou envio de logs que deve ser executada apenas se pelo menos uma etapa anterior do mesmo job falhar, qual função de status deve ser usada?
Por quê:
failure() retorna verdadeiro só quando alguma etapa anterior falhou — ideal para disparar alertas apenas em caso de erro.Questão 48
Em relação à sintaxe dos arquivos YAML no GitHub Actions, qual é a regra quanto à identação?
Por quê: YAML usa a identação para definir a hierarquia dos blocos, e essa identação precisa ser feita com espaços — caracteres TAB não são aceitos e quebram o arquivo.