dan*_*789 12 continuous-integration yaml gitlab
我正在尝试根据提交源自的分支为我的 GitLab Runner 设置一个环境变量。
我有 4 个 kubernetes 集群:staging、integration、production 和 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
Run Code Online (Sandbox Code Playgroud)
每当我使用不同形式的 if 语句运行脚本时,都会出现以下错误:
/bin/bash: line 83: =integration: command not found
ERROR: Job failed: exit code 1
Run Code Online (Sandbox Code Playgroud)
因此,据我所知,正在设置变量,但脚本退出了。我已经看到了几个与此问题相关的 SO 问题,但没有关于如何设置变量然后继续脚本的内容。我该如何解决这个问题?
dan*_*789 19
上面的评论帮助我弄清楚了。所以我使用了一个 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}"
Run Code Online (Sandbox Code Playgroud)