Skip to content

Task Scripts

The inputs feature of a task allows us to pass in two types of inputs:

  • requirements/dependencies to be processed/tested/compiled
  • task scripts to be executed to perform complex behavior

A common pattern is for Concourse tasks to run: complex shell scripts rather than directly invoking commands as we did in the Hello World tutorial (we ran uname command with arguments -a).

Let's refactor task-hello-world/task_ubuntu_uname.yml into a new task task-scripts/task_show_uname.yml with a separated task script task-scripts/task_show_uname.sh

cd ../task-scripts
fly -t tutorial execute -c task_show_uname.yml

The former specifies the latter as its task script:

run:
  path: /bin/sh
  args: ["./task-scripts/task_show_uname.sh"]

Where does the ./task-scripts/task_show_uname.sh file come from?

From section 2 we learned that we could pass inputs into the task. The task configuration task-scripts/task_show_uname.yml specifies one input:

inputs:
- name: task-scripts

Since input task-scripts matches the current directory task-scripts we did not need to specify fly execute -i task-scripts=..

The current directory was uploaded to the Concourse task container and placed inside the task-scripts directory.

Therefore its file task_show_uname.sh is available within the Concourse task container at task-scripts/task_show_uname.sh.

The only further requirement is that task_show_uname.sh is an executable script.

N.B. For Windows users, some may see this error uname: invalid option -- when you execute the fly command. This may have happened because when you downloaded the GitHub repo on Windows machine, Windows style line ending have been applied to the task_show_uname.sh file. One way to fix that is to open up the file in Notepad++, click on "Edit->EOL Conversion->Unix". Save the file and execute the fly command again.