Continuous integration 如何在';脚本';gitlab-ci.yml文件的一节

Continuous integration 如何在';脚本';gitlab-ci.yml文件的一节,continuous-integration,gitlab,yaml,Continuous Integration,Gitlab,Yaml,我正试图根据提交源的分支为我的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 in

我正试图根据提交源的分支为我的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

因此,从我可以看出变量正在设置中,但是脚本退出了。我已经看到了几个与这个问题相关的问题,但是没有关于如何设置一个变量然后继续编写脚本的内容。如何解决这个问题?

上面的评论帮助我解决了这个问题。因此,我使用了一个版本文件,该文件现在包含
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}"

只需使用
ENVIRONMENT=“production”
来分配变量,而不是
$ENVIRONMENT=…
。$VAR和VAR之间有什么区别?“$VAR”
VAR
在yaml语法中使用
$VAR
“$VAR”
是bash语法(在脚本部分使用)。有/没有报价?请参阅注释:我们目前正在测试,这就是为什么我要将“master”分支部署到“qa”环境中。我们还有其他分支,它们匹配与其他环境对应的关键字。