我们有两个环境(开发、生产(。默认情况下,我们部署到生产环境,但如果分支名称或提交消息以dev开头,我们将部署到开发环境。
我通过gitlab GUI创建变量(app_url和app_url_dev(:
我使用gitlab规则来更改deployement的app_url变量。脚本deploy.py(以及许多其他脚本(正在使用app_url变量。
gitlab ci代码为:
Tags:
stage: Deploy code
rules:
# - if: $CI_COMMIT_REF_NAME == "main" && $CI_COMMIT_MESSAGE =~ /^dev/
- if: $CI_COMMIT_REF_NAME == "main" && $CI_COMMIT_BRANCH =~ /^dev/
variables:
app_url: $app_url_dev
script:
- Python deploy.py
问题是我从来没有在app_url中得到app_url_dev的值。我尝试了其他组合,但我总是得到生产url,而不是开发url:
app_url: ${app_url_dev}
app_url: app_url_dev
但我总是得到app_url,而不是app_url_dev。有人能帮忙吗?
正如Brennan在上面的评论中所说,随着变量扩展现在在rules:variables
块中工作,有些事情可能已经发生了变化。
以下是对我有效的方法:
variables:
DEPLOY_KEY: "$DEPLOY_KEY_DEV" # global fallback
deploy:
stage: deploy
script:
- bash ./deploy.sh
rules:
- if: $DEPLOY_ENV == "production" # can use trigger variables for evaluation
variables:
DEPLOY_KEY: "$DEPLOY_KEY_PROD" # can expand project variables into other variables
- if: $DEPLOY_ENV == "staging"
variables:
DEPLOY_KEY: "$DEPLOY_KEY_STAGING"
rules:variables:
部分中没有进行变量扩展。您只能为变量设置一个简单的文本值。
对于app_url
,您可以考虑使用environment:url:
部分,这是变量展开的工作方式。但是你不能在rules:
内部使用它。
或者在script:
部分中有一些条件逻辑。