You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab 18中如何用Inputs替代分支专属部署变量?

GitLab 18 用 Inputs 实现分支对应环境部署

核心实现方案

通过定义流水线inputs参数,结合分支/MR的规则判断,动态传递部署所需的SSH_USER、SSH_HOST信息,实现不同分支合并时自动部署到对应环境。

具体配置示例

  1. 先在.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"
  1. 通过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
  1. 编写部署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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 06:33:23