2016-08-15 1 views
7

Lorsque je configure le pipeline suivant:Pourquoi Concourse `get` une ressource après l'avoir mise?

resources: 
- name: my-image-src 
    type: git 
    source: 
    uri: https://github.com/concourse/static-golang 
- name: my-image 
    type: docker-image 
    source: 
    repository: concourse/static-golang 
    username: {{username}} 
    password: {{password}} 

jobs: 
- name: "my-job" 
    plan: 
    - get: my-image-src 
    - put: my-image 

Après avoir construit et en poussant l'image au registre Docker, il va chercher ensuite l'image. Cela peut prendre un certain temps et finalement n'ajoute rien à la construction. Y a-t'il une manière de le désactiver?

Répondre

12

Chaque put implique une get de la version qui a été créée. La raison principale de ceci est que la ressource nouvellement créée peut être utilisée par des étapes ultérieures dans le plan de construction. Sans le get, il n'y a aucun moyen d'introduire de "nouvelles" ressources lors de l'exécution d'une construction, car elles sont toutes résolues à récupérer une version particulière au démarrage de la construction.

Il y a également des avantages secondaires à cela. Pour un, il réchauffe immédiatement le cache sur un travailleur. Donc, ce n'est pas totalement sans valeur; les travaux ultérieurs n'auront pas à le récupérer. Il agit également comme validation que le put avait effectivement l'effet désiré.

Dans ce cas particulier, comme c'est la dernière étape du plan de construction, la raison principale ne s'applique pas vraiment. Mais nous n'avons pas pris la peine de l'optimiser, car dans la plupart des cas, les avantages secondaires valent la peine de ne pas susciter la question secondaire ("pourquoi certaines étapes impliquent-elles seulement ?"). Il est également possible de désactiver le en désactivant l'ajout de nombreux boutons que vous souhaitez activer un jour, puis de revenir en arrière et de le désactiver dès que vous en avez réellement besoin.

Docs: https://concourse.ci/put-step.html

+0

n'est pas le paramètre 'skip_download' déjà un "bouton" pour cela? Est-ce qu'il évite le fetch redondant? Si non, pourrait-il? – timbod

+1

Oui. La différence est que 'skip_download' est implémenté par la ressource Docker Image en particulier, et n'est pas un concept général pour toutes les ressources. Il a également été ajouté pour une raison différente: parfois, les gens ne font que propager un identifiant d'image. Cela peut être utile dans ce cas, si vous connaissez cette ressource, mais ce n'est pas quelque chose qui vous préoccupe constamment dans tout le Concourse. –