Sobes.tech
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