Middle
Quais são as diferenças entre artefatos e cache no GitLab CI como atributos de tarefa (job)?
sobes.tech IA
Resposta da IA
Os artefactos e o cache no GitLab CI servem para acelerar a compilação e os testes, mas têm funções diferentes e propósitos distintos.
Artefactos (artifacts):
- Propósito: Guardar os resultados da execução de uma tarefa (construção, testes, documentação, etc.) para uso ou visualização posterior. Podem ser descarregados manualmente ou acessíveis através da interface web.
- Tempo de vida: Determinado pelas configurações em
.gitlab-ci.yml. Podem ser eliminados após um tempo ou mantidos. - Tamanho: Geralmente maior que o cache, pois contêm construções prontas, relatórios e outros resultados.
- Utilização: Transferir resultados entre tarefas em diferentes etapas ou para disponibilizar aos utilizadores.
Exemplo de configuração:
artifacts:
paths: # caminhos para ficheiros e diretórios que se tornarão artefactos
- build/
- test-results.xml
expire_in: 1 week # tempo de vida dos artefactos
Cache (cache):
- Propósito: Guardar dependências do projeto ou resultados intermédios para acelerar execuções futuras da mesma tarefa. O cache está ligado a um ramo ou etiqueta específicos (pode ser configurado).
- Tempo de vida: Gerido automaticamente pelo GitLab. Os registos antigos de cache são eliminados quando se ultrapassa a cota ou expira o período de validade. O cache pode ser restaurado ou criado automaticamente numa nova execução.
- Tamanho: Geralmente menor que os artefactos, pois contém dependências como repositórios Maven, pacotes npm, etc.
- Utilização: Acelerar a instalação de dependências e reduzir o tempo de compilação.
Exemplo de configuração:
cache:
paths: # caminhos para diretórios que serão cacheados
- node_modules/
- ~/.m2/repository/
key: # chave do cache, pode usar variáveis predefinidas
files:
- package-lock.json # o cache será atualizado se este ficheiro mudar
prefix: ${CI_COMMIT_REF_SLUG} # adiciona um prefixo com o nome do ramo/etiqueta
Diferenças principais:
| Característica | Artefactos (artifacts) | Cache (cache) |
|---|---|---|
| Propósito | Guardar resultados da tarefa | Guardar dependências para acelerar a compilação |
| Utilização | Descarregar, transferência entre tarefas (diferentes etapas) | Restauração/criação automática |
| Tempo de vida | Especificado explicitamente em .gitlab-ci.yml |
Gerido pelo GitLab, eliminação automática |
| Acesso | Via interface web, API | Utilizado automaticamente pelo Runner |
| Ligação à branch | Sem ligação direta (a menos que seja explicitamente indicado) | Geralmente ligado à branch para isolamento |
Assim, os artefactos são os dados de saída da compilação, e o cache são componentes reutilizáveis para acelerar a própria compilação.
job_example:
stage: build
script:
- echo "Construção e teste..."
- mkdir build
- echo "Resultado da construção" > build/result.txt
- echo "Instalação de dependências"
cache:
paths:
- dependency_dir/ # pasta com dependências, será cacheada
artifacts:
paths:
- build/ # pasta build tornará um artefacto