Je veux configurer un pipeline de construction dans Concourse pour mon application web. L'application est construite en utilisant Node.Concourse CI - Construire des artefacts à l'intérieur de la source, passer tout à la tâche suivante
Le plan est de faire quelque chose comme ceci:
,-> build style guide -> dockerize
source code -> npm install -> npm test -|
`-> build website -> dockerize
Le problème est, après NPM installation, un nouveau conteneur est créé de sorte que le répertoire node_modules
est perdu. Je veux passer node_modules
dans les tâches ultérieures mais parce qu'il est « à l'intérieur » le code source, il ne l'aime pas et me donne
invalid task configuration:
you may not have more than one input or output when one of them has a path of '.'
Voici mes emplois créés
jobs:
- name: test
serial: true
disable_manual_trigger: false
plan:
- get: source-code
trigger: true
- task: npm-install
config:
platform: linux
image_resource:
type: docker-image
source: {repository: node, tag: "6" }
inputs:
- name: source-code
path: .
outputs:
- name: node_modules
run:
path: npm
args: [ install ]
- task: npm-test
config:
platform: linux
image_resource:
type: docker-image
source: {repository: node, tag: "6" }
inputs:
- name: source-code
path: .
- name: node_modules
run:
path: npm
args: [ test ]
Mise à jour 2016-06-14
Les entrées et sorties sont simplement des répertoires. Vous mettez donc ce que vous voulez dans un répertoire de sortie et vous pouvez ensuite le passer à une autre tâche dans le même travail. Les entrées et les sorties ne peuvent pas se chevaucher, donc pour le faire avec npm, vous devez soit copier node_modules, soit le dossier source entier du dossier d'entrée vers un dossier de sortie, puis l'utiliser dans la tâche suivante.
Cela ne fonctionne pas entre les travaux. Meilleure suggestion que j'ai vu jusqu'à présent est d'utiliser un référentiel git temporaire ou un seau pour pousser tout vers le haut. Il doit y avoir une meilleure façon de procéder car une partie de ce que j'essaie d'éviter est d'éviter d'énormes quantités d'E/S réseau.
Est-il correct si vous postez votre fichier pipeline.yml mis à jour afin de voir ce que vous avez fait parce que je Je cours dans un problème similaire et j'ai essayé pendant des jours pour le réparer! Ça me rend fou. – Fadi
Je ne peux pas poster le code mais je peux vous dire la solution. Je l'ai rebaptisé Jenkinsfile ... binned Concourse et j'ai utilisé Jenkins Blue Ocean à la place. Je suis sensiblement plus heureux. J'ai même créé un fichier Vagrantfile qui construit Jenkins dans Docker sur CoreOS et permet à n'importe lequel de nos développeurs d'exécuter exactement le même pipeline sur leur machine que sur n'importe quel test, scène ou machine live. Ce n'est pas complet, mais je vais l'ouvrir à l'avenir et j'essaierai de me souvenir de le lier ici quand je le ferai. – DanielM
Nice! J'ai une configuration Jenkins normale et je fais tout, mais dernièrement j'ai testé Concourse juste pour des coups de pied et jusqu'ici ça a été très frustrant! Je ne connaissais pas Jenkins Blue Ocean mais grâce à vous, je vais vérifier ça aussi! :) – Fadi