Hi,
I would like to set a pipeline-wide environment variable VERSION
equal to bash command output, e.g. git describe --tags
.
Moreover when I export a variable in command, I can’t seem to consume it as the next command:
commands:
- export VERSION=$(git describe --tags)
- echo ${VERSION?} # buildkite throws an error saying VERSION is not available
If I understand correctly:
env
only allows to set static values.
command
export VERSION… would only set the value for the current step
BUILDKITE_TAG
works only on tagged builds and does not contain hash.
benmc
August 8, 2023, 1:55am
2
Hey there @sublimeye !
Have you considered using meta-data
for this?
Something like the below should work for you:
steps:
- label: Set the VERSION
command: |
buildkite-agent meta-data set version "$(git describe --tags)"
key: set_version
- label: Get the version
command: |
echo $(buildkite-agent meta-data get version)
depends_on: set_version
- wait: ~
- label: Do more stuff...
command: |
echo "Doing the things :allthethings:"
Hope it helps!
Another option would be to run those commands like this:
commands: |
export VERSION=$(git describe --tags)
echo ${VERSION?}
This won’t make the VERSION variable available for other steps tho.
2 Likes
I would consider using the environment agent hook, Managing pipeline secrets | Buildkite Documentation .
Conversely, if you dynamically generate pipelines, Dynamic pipelines: Define CI/CD pipelines in code at runtime , you can generate and set it that way. For example,
- command: “.buildkite/script.sh | buildkite-agent pipeline upload”
where your script.sh
might look like,
#!/usr/bin/bash
VERSION=$(git describe --tags)
echo "env:"
echo " VERSION: $VERSION"
echo "steps:"
echo " - command: \"echo $$VERSION\""
1 Like