I have a Gitlab CI job that uses one value of a variable if branch is not main
, and it uses a different value if it is main
. This is what a basic version of my job looks like (I added a bunch of echo
statements for testing:
test-job:
variables:
POST: False
COMPARE_BRANCH: main
script:
- echo "CI_COMMIT_BRANCH:$CI_COMMIT_BRANCH"
- echo "COMPARE_BRANCH:$COMPARE_BRANCH"
- if [[ $CI_COMMIT_BRANCH == $COMPARE_BRANCH ]]; then
- echo "CI_COMMIT_BRANCH == COMPARE_BRANCH"
- echo "$CI_COMMIT_BRANCH == $COMPARE_BRANCH"
- else
- echo "CI_COMMIT_BRANCH != COMPARE_BRANCH"
- echo "$CI_COMMIT_BRANCH != $COMPARE_BRANCH"
- fi
- echo "POST:$POST"
rules:
- if: $CI_COMMIT_BRANCH == $COMPARE_BRANCH
variables:
POST: True
- when: on_success
Based on the rules
, when $CI_COMMIT_BRANCH
is not main
, the $POST
variable should be false. This works as intended:
$ echo "CI_COMMIT_BRANCH:$CI_COMMIT_BRANCH"
CI_COMMIT_BRANCH:my-test-branch
$ echo "COMPARE_BRANCH:$COMPARE_BRANCH"
COMPARE_BRANCH:main
$ if [[ $CI_COMMIT_BRANCH == $COMPARE_BRANCH ]]; then
$ echo "CI_COMMIT_BRANCH != COMPARE_BRANCH"
CI_COMMIT_BRANCH != COMPARE_BRANCH
$ echo "$CI_COMMIT_BRANCH != $COMPARE_BRANCH"
my-test-branch != main
$ fi
$ echo "POST:$POST"
POST:false
But when I change $COMPARE_BRANCH
to be the same as $CI_COMMIT_BRANCH
:
test-job:
variables:
POST: False
COMPARE_BRANCH: $CI_COMMIT_BRANCH
It still doesn't change the variables:
$ echo "CI_COMMIT_BRANCH:$CI_COMMIT_BRANCH"
CI_COMMIT_BRANCH:my-test-branch
$ echo "COMPARE_BRANCH:$COMPARE_BRANCH"
COMPARE_BRANCH:my-test-branch
$ if [[ $CI_COMMIT_BRANCH == $COMPARE_BRANCH ]]; then
$ echo "CI_COMMIT_BRANCH == COMPARE_BRANCH"
CI_COMMIT_BRANCH == COMPARE_BRANCH
$ echo "$CI_COMMIT_BRANCH == $COMPARE_BRANCH"
my-test-branch == my-test-branch
$ else
$ echo "POST:$POST"
POST:false
As you can see, the if
statement within script
sees that the $CI_COMMIT_BRANCH
matches $COMPARE_BRANCH
, but the $POST
variable is still false
, meaning that the if
statement in rules
does not see that those values match.
What am I doing wrong here?
According to the documentation:
You cannot use nested variables with
if
.
So because $COMPARE_BRANCH
is supposed to resolve to $CI_COMMIT_BRANCH
that's where my problem is. There's an open issue to address this.