GitLab 18中如何用Inputs替代分支专属部署变量?
GitLab 18 用 Inputs 实现分支对应环境部署
核心实现方案
通过定义流水线inputs参数,结合分支/MR的规则判断,动态传递部署所需的SSH_USER、SSH_HOST信息,实现不同分支合并时自动部署到对应环境。
具体配置示例
- 先在
.gitlab-ci.yml中定义基础inputs参数:
inputs: - name: SSH_USER description: 部署目标主机的SSH登录用户名 type: string default: "dev-user" # 默认适配开发环境 - name: SSH_HOST description: 部署目标主机地址 type: string default: "dev.example.com"
- 通过
workflow规则根据分支/MR目标分支自动覆盖inputs值:
workflow: rules: # 合并到main分支时,自动使用生产环境配置 - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'main' inputs: SSH_USER: "prod-user" SSH_HOST: "prod.example.com" # 合并到develop分支时,自动使用开发环境配置 - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop' inputs: SSH_USER: "dev-user" SSH_HOST: "dev.example.com" # 特性分支直接提交时,使用测试环境配置 - if: $CI_COMMIT_BRANCH =~ /^feature\// inputs: SSH_USER: "test-user" SSH_HOST: "test.example.com" # 其他情况使用默认配置 - when: always
- 编写部署Job,调用
inputs参数(GitLab中inputs变量前缀为INPUT_):
deploy: stage: deploy script: - echo "开始部署到主机:$INPUT_SSH_HOST,用户:$INPUT_SSH_USER" - ssh $INPUT_SSH_USER@$INPUT_SSH_HOST "cd /your/project/path && git pull && systemctl restart your-service" rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH when: always
Inputs 与 Variables 的差异(确实无法完全替代)
- 作用域不同:Variables支持项目/群组/实例级全局配置,还能设置受保护、掩码属性;Inputs是流水线级参数,仅当前流水线生效,无法全局复用(除非通过CI模板传递)。
- 安全性侧重不同:Variables适合存储敏感信息(如SSH密钥、数据库密码),支持掩码、受保护防止泄露;Inputs主要用于流水线触发时的动态参数调整,敏感信息仍建议用Variables管理。
- 使用场景互补:Variables适合通用、固定、敏感的配置;Inputs适合需要灵活调整的流水线参数(如部署环境、版本号),二者搭配使用更合理。
内容的提问来源于stack exchange,提问作者jerome2710
相关产品推荐
相关产品推荐

