Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use custom variables in gitlab ci/cd?

I'm struggling with gitlab ci/cd variables. I see so many conflicting examples. Anyhow, what I would like to know is how to use variables outside and within scripts.

For example, in a job config, can I assign a variable in the script section with a bash command?

some-job:
   variables:
      SOME_VAR: ''
   script:
      - SOME_VAR = $(<file_with_a_line_of_text.txt)

In the above case, I'm not sure if I can do this. But I need to populate a variable with the file contents (i.e. artifact). Also, when do I use '$' in front of the variable? Some examples I see using these formats:

"SOME_VAR" #in quotes, no dollar sign
"${SOME_VAR}" #in quotes, with dollar sign and wrapped with curly braces
${SOME_VAR} #no quotes, with dollar sign and wrapped with curly braces
$SOME_VAR #i.e. without the double quotes or curly braces
SOME_VAR #i.e. without the double quotes, dollar sign, and curly braces

So many variations of usage that I can see in examples but don't really know when to use each style. And I can't find one example online of a custom variable being set in a script using a bash command.

like image 754
u84six Avatar asked Dec 05 '25 10:12

u84six


2 Answers

When I'm setting variables in bash, I always do it without the spaces around the =:

VAR1="some string"
VAR2=23
VAR3=true
VAR4=$(cat /path/to/file.txt)

Let's go through these examples one at a time:

  1. You can set a variable as a string by using quotes around the string.
  2. You can set it to an int (probably a float too, but haven't personally used it)
  3. You can set it to a bool
  4. You can set it to the output of a command. The command is inside the command: $(#command).

Now let's use them:

echo $VAR1
# some string
echo "This is my variable $VAR1"
# This is my variable some string
echo "This is my variable ${VAR1}"
# This is my variable some string
echo ${VAR1}
# some string
echo "Error code ${VAR2}A"
# Error code 23A
echo "Error code $VAR2A"
# Error code --- Note: the variable $VAR2A dosn't exist
echo "Error code ${VAR2}${VAR1}"
# Error code 23some string
echo VAR1
# VAR1
echo "VAR1"
# VAR1

This illustrates the difference between the different forms, but in general, you reference a variable's value with $+variable-name. Doing "SOME_VAR" or SOME_VAR just prints out the string "SOME_VAR" (ie, not referencing a variable at all).

The difference between $SOME_VAR and ${SOME_VAR} is that the latter lets you use it when there is other content directly before or after the variable without erroring.

like image 190
Adam Marshall Avatar answered Dec 07 '25 01:12

Adam Marshall


How to use custom variables in gitlab ci/cd?

Normally like in any other shell.

But note that gitlab-ci.yml is a yaml file and yaml has special parsings. Because of that in script: ex. - echo bla is the same as - 'echo bla', because in yaml the content of script: is an array of strings that are later spitted by shell.

how to use variables outside and within scripts.

Normally like in any other shell script.

when to use each style

"SOME_VAR" #in quotes, no dollar sign
SOME_VAR #i.e. without the double quotes, dollar sign, and curly braces

when you want to have a string SOME_VAR literally

"${SOME_VAR}"

is the same as "$SOME_VAR". When you want to have the content of SOME_VAR variable literally.

${SOME_VAR} #no quotes, with dollar sign and wrapped with curly braces
$SOME_VAR #i.e. without the double quotes or curly braces

When you want the content of SOME_VAR variable after word splitting and filename expansion. That means that SOME_VAR='*' and then echo "$SOME_VAR" will print *, but echo $SOME_VAR will print all files in current directory. You usually always want to quote expansions.

The form ${SOME_VAR} is used if concatenated with some other string, ex. $SOME_VARbla is not ${SOME_VAR}bla.

Do not use upper case variables in your scripts - prefer lower case. Prefer using upper case variables for exported variables. Be aware of clashes - COLUMN PATH USER UID are examples of already used variables.

can I assign a variable in the script section with a bash command?

Shell is space aware. var = val will execute a command named var with two arguments = and val. var=val will assign the string val to variable named var. Do:

- SOME_VAR=$(<file_with_a_line_of_text.txt)

In gitlab-ci I would prefer to use cat in case I will want to move to alpine. $(< is a bash extension.

- SOME_VAR=$(cat file_with_a_line_of_text.txt)

There doesn't seem to be any point in setting providing SOME_VAR in environment with variables: SOME_VAR.

When do I use '$' in front of the variable?

When you want to trigger variable expansion. Variable expansion substitutes variable name for the variable value.

Check your scripts with http://shellcheck.net . Read https://mywiki.wooledge.org/BashGuide a good shell introduction and https://wiki.bash-hackers.org/scripting/obsolete .

like image 43
KamilCuk Avatar answered Dec 07 '25 02:12

KamilCuk



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!