我正在尝试构建基于gradle的Java应用程序。我的管道看起来像这样:
---
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
build.yml看起来像:
---
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/
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
最后找到.yml
---
platform: linux
image_resource:
type: docker-image
source: {repository: busybox}
inputs:
- name: output
run:
path: ls
args: ['-alR']
bash.sh脚本末尾的ls输出显示输出文件夹包含预期的文件,但查找任务只显示空文件夹:
我在查找任务中用作输入的output
文件夹是空的,我做错了什么?
可以在ci子文件夹中找到包含大厅文件的here完整示例。
答案 0 :(得分:4)
你需要记住一些事情:
您的任务有一个初始工作目录,我们可以调用它。'。' (除非您指定' dir')。在这个初始目录中,您将找到所有输入和输出的目录。
即
./hello-concourse-repo
./output
宣布输出时,无需创建文件夹'输出'从您的脚本中,它将自动创建。
您将在下面找到更新的脚本,其中包含一些注释以解决问题:
#!/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
由于您正在定义ROOT_FOLDER变量,因此您可以使用它来导航。
答案 1 :(得分:1)
您仍在hello-concourse-repo
内,需要将output
向上移动一级。