2017-09-01 1 views
0

J'expérimente avec la construction d'une application java gradle. Mon pipeline ressemble à ceci:Le dossier d'entrée de tâche Concourse est vide

--- 
resources: 
- name: hello-concourse-repo 
    type: git 
    source: 
    uri: https://github.com/ractive/hello-concourse.git 

jobs: 
- name: gradle-build 
    public: true 
    plan: 
    - get: hello-concourse-repo 
    trigger: true 
    - task: build 
    file: hello-concourse-repo/ci/build.yml 
    - task: find 
    file: hello-concourse-repo/ci/find.yml 

Le build.yml ressemble:

--- 
platform: linux 

image_resource: 
    type: docker-image 
    source: 
    repository: java 
    tag: openjdk-8 

inputs: 
- name: hello-concourse-repo 
outputs: 
- name: output 

run: 
    path: hello-concourse-repo/ci/build.sh 

caches: 
- path: .gradle/ 

Et le build.sh:

#!/bin/bash 

export ROOT_FOLDER=$(pwd) 
export GRADLE_USER_HOME="${ROOT_FOLDER}/.gradle" 

export TERM=${TERM:-dumb} 
cd hello-concourse-repo 
./gradlew --no-daemon build 

mkdir -p output 
cp build/libs/*.jar output 
cp src/main/docker/* output 
ls -l output 

Et enfin find.yml

--- 
platform: linux 

image_resource: 
    type: docker-image 
    source: {repository: busybox} 

inputs: 
- name: output 

run: 
    path: ls 
    args: ['-alR'] 

La sortie de ls à la fin du fichier bash.sh s cript me montre que le dossier de sortie contient les fichiers attendus, mais la tâche de trouver affiche uniquement les dossiers vides:

concourse ui

Qu'est-ce que je fais mal que le dossier output que j'utilise comme une entrée dans la découverte la tâche est vide?

L'exemple complet peut être trouvé here avec les fichiers de concours dans le sous-dossier ci.

Répondre

2

Vous devez vous rappeler certaines choses:

  1. Il y a un répertoire de travail initial pour vos tâches, Appelons cela. ' (Sauf si vous spécifiez 'dir'). Dans ce répertoire initial, vous trouverez un répertoire pour toutes vos entrées et sorties.

    à savoir

    ./hello-concourse-repo 
    ./output 
    
  2. Lorsque vous déclarez une sortie, il n'y a pas besoin de créer un dossier « sortie » de votre script, il sera créé automatiquement.

  3. Si vous accédez à un autre dossier dans votre script, vous devez revenir au répertoire de travail initial ou utiliser des chemins d'accès relatifs pour rechercher d'autres dossiers.

Ci-dessous vous trouverez le script mis à jour avec quelques commentaires pour résoudre le problème:

#!/bin/bash 

export ROOT_FOLDER=$(pwd) 
export GRADLE_USER_HOME="${ROOT_FOLDER}/.gradle" 

export TERM=${TERM:-dumb} 
cd hello-concourse-repo #You changed directory here, so your 'output' folder is in ../output 
./gradlew --no-daemon build 

# Add this line to return to the initial working directory or use ../output or $ROOT_FOLDER/output when compiling. 

#mkdir -p output <- This line is not required, you already defined an output with this name 

cp build/libs/*.jar ../output 
cp src/main/docker/* ../output 
ls -l ../output 

Puisque vous définissez variable dossier_racine vous pouvez l'utiliser pour naviguer.

+0

Cela a du sens. Je comprends maintenant que le bonjour-concours-repo est juste le répertoire de caisse du repo git. J'ai toujours eu l'impression que c'était un répertoire qui avait été créé pour cette tâche spécifique. – James

0

Vous êtes toujours à hello-concourse-repo et vous devez déplacer output d'un niveau.