GitLab CI/CD按分支规则设置环境异常问题求助
问题原因与解决方案
问题出在GitLab CI的变量解析顺序上:environment块中的变量默认在配置初始解析阶段展开,而rules里的变量覆盖是在作业执行前才生效的,所以environment.name会优先取到最外层定义的ENVIRONMENT: staging,而非rules中针对development分支设置的值。
解决方案一:直接在rules中定义environment
把环境名称直接写在对应分支的rule里,绕过变量中转的问题,配置更直观:
authenticate: stage: authenticate image: google/cloud-sdk:debian_component_based rules: - if: $CI_COMMIT_BRANCH == "main" when: always environment: name: production - if: $CI_COMMIT_BRANCH == "staging" when: always environment: name: staging - if: $CI_COMMIT_BRANCH == "development" when: always environment: name: development
解决方案二:开启environment变量的延迟展开
如果想保留变量中转的方式,可在environment块中添加expand: true(GitLab 13.4+支持),让环境名称在作业执行阶段重新解析变量,这样就能拿到rules中覆盖后的ENVIRONMENT值:
authenticate: stage: authenticate image: google/cloud-sdk:debian_component_based variables: ENVIRONMENT: staging rules: - if: $CI_COMMIT_BRANCH == "main" when: always variables: ENVIRONMENT: production - if: $CI_COMMIT_BRANCH == "staging" when: always variables: ENVIRONMENT: staging - if: $CI_COMMIT_BRANCH == "development" when: always variables: ENVIRONMENT: development environment: name: $ENVIRONMENT expand: true
内容的提问来源于stack exchange,提问作者deagleshot
相关产品推荐
相关产品推荐

