Как установить переменную в разделе 'script' файла gitlab-ci.yml - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь установить переменную окружения для моего GitLab Runner на основе ветви, из которой происходит принятие.

У меня есть 4 кластера kubernetes: подготовка, интеграция, производство и qa.По сути, я хочу развернуть свое приложение в соответствующем кластере на основе ветви, к которой я обращаюсь.

image: google/cloud-sdk:latest
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
services:
  - docker:dind
before_script:
  - docker info
stages:
  - publish
publish:
stage: publish
script:
  - if [ "$CI_COMMIT_REF_NAME" = "master" ]; then $ENVIRONMENT="production"; else $ENVIRONMENT="$CI_COMMIT_REF_NAME"; fi
  - echo $ENVIRONMENT
   .
   .
   .
  - kubectl apply -f cfg/${ENVIRONMENT}/web-deployment.yaml
only:
 - master
 - integration
 - qa
 - staging

Каждый раз, когда я запускаю свой сценарий с другой формой оператора if, я получаю следующую ошибку:

/bin/bash: line 83: =integration: command not found
ERROR: Job failed: exit code 1

Итак, насколько я могу судить, переменная устанавливается, но сценарий завершается.Я видел несколько SO вопросов, связанных с этой проблемой, но ничего о том, как установить переменную и затем продолжить сценарий.Как я могу исправить эту проблему?

1 Ответ

0 голосов
/ 29 января 2019

Комментарий выше помог мне разобраться.Поэтому я использую файл VERSION, который сейчас содержит 0.0.0, которым я манипулирую для создания других переменных

  # determine what branch I am on
  - if [ "$CI_COMMIT_REF_NAME" = "master" ]; then ENVIRONMENT="qa"; else ENVIRONMENT="$CI_COMMIT_REF_NAME"; fi

  # determine patch number for semver
  - PATCH=`git log --pretty=oneline | wc -l | sed -e 's/^[[:space:]]*//'`
  - VERSION=`cat VERSION`

  # drop trailing 0 from VERSION
  - VERSION=${VERSION%?}

  # set all env variables
  - TAG="${VERSION}${PATCH}"
  - IMAGE="${TAG}-${ENVIRONMENT}" # used for Kubernetes
  - API_HOST="https://api.${ENVIRONMENT}.my-app.com/"
  - WEB_HOST="https://www.${ENVIRONMENT}.my-app.com/"

  # pass enviornment variables to make 
  - ENVIRONMENT="$ENVIRONMENT" IMAGE="$IMAGE" API_HOST="$API_HOST" WEB_HOST="$WEB_HOST" make

  # make has a step that calls sed and replaces text inline in this file to prepare Kubernetes
  - kubectl apply -f cfg/web-deployment.yaml

  # create a tag in the repo after deployment is done
  - curl -X POST --silent --insecure --show-error --fail "https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/repository/tags?tag_name=${TAG}&ref=${CI_COMMIT_SHA}&private_token=${GITLAB_TOKEN}"
...