input from block steps not passed in env
secureoptions opened this issue · 1 comments
Hi Team,
I'm trying to understand the best way to pass user input fields from block steps into the docker plugin. Something like this for example:
steps:
- block: "Get import details"
fields:
- text: "What is your name?"
key: username
- label: "Print username from container"
env:
USERNAME: $(buildkite-agent meta-data get "username")
plugins:
- docker#v3.5.0:
image: ubuntu:latest
propagate-environment: true
propagate-aws-auth-tokens: true
mount-ssh-agent: true
The problem I run into is that ${USERNAME} is interpreted literally as $(buildkite-agent meta-data get "username")
instead of the actual username. Do you have any other suggestions for adding more vars from block input?
Hi @secureoptions!
This happens because the environment in the YML is being evaluated on upload, so the value of "username" is empty because the build doesn't actually run that input step yet.
Meta-data cannot be interpolated directly from the pipeline.yml at runtime. The meta-data store can only be accessed from within a command step.
We suggest uploading the first part of that pipeline then have another pipeline upload steps that upload the remaining of the pipeline because then it would get the value.
For example like this:
steps:
- block: "Get import details"
fields:
- text: "What is your name?"
key: myvar
- command: >
export USERNAME="$(buildkite-agent meta-data get 'myvar')" && echo '
steps:
- env:
USERNAME: \$USERNAME
command: echo \\\$USERNAME' | buildkite-agent pipeline upload
label: upload
I would recommend running the shell command with a script, but this would be the idea.
You can find more information about this here.
Cheers,