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

Jenkins Pipeline运行时如何向Shell脚本动态传参

Jenkins Pipeline向Shell脚本传参实现方案

核心注意事项

  • 密码类敏感参数禁止直接明文拼接到执行命令中,否则会明文出现在构建日志造成泄露,必须使用Jenkins凭证能力做脱敏处理
  • 不要将目录切换、脚本执行拆分为多个独立的sh步骤:每个sh步骤会启动全新的Shell会话,前序步骤的cd操作、变量赋值不会跨步骤生效,关联操作要放在同一个sh块内

方案1:环境变量注入(推荐,兼容敏感参数场景)

这种方式是官方推荐的做法,敏感参数通过凭证绑定后会自动做日志脱敏,不会泄露明文。

第一步:提前配置凭证

在Jenkins凭证管理中新增Secret Text类型的凭证,存储你的密码值,记录下你设置的凭证ID(比如user-pass-cred)。

第二步:调整Pipeline代码

通过withCredentials块绑定敏感凭证为Shell环境变量,普通参数直接在sh块内赋值注入即可:

node('abc'){
    stage('build'){
      // 绑定敏感凭证为Shell环境变量,variable为Shell中读取的变量名
      withCredentials([string(credentialsId: '你自己存储的密码凭证ID', variable: 'SHELL_PWD')]) {
        sh """
          cd ..
          // 注入普通参数USER,这里可以替换为你Pipeline里的动态变量,比如params.userName
          export USER="需要传入的用户名值"
          // 注入敏感密码,注意前面加转义符\,避免Groovy提前解析变量
          export password=\$SHELL_PWD
          chmod +x ./script.sh
          ./script.sh
        """
      }
    }
}

第三步:适配Shell脚本

脚本内直接读取注入的环境变量即可,不需要额外修改逻辑:

#!/usr/bin/env bash
....
/some code
....
# 直接读取Pipeline注入的环境变量,不需要手动赋值空值
export USER="${USER}"
export password="${password}"

如果不想修改Shell脚本里的变量名,只要在withCredentials绑定敏感变量时把variable值设为password,Pipeline里普通参数的变量名保持USER即可,脚本完全不用调整。


方案2:位置参数传递(仅适合非敏感参数场景)

这种方式通过脚本入参$1/$2的形式传值,禁止用来传递密码类敏感信息,否则参数值会明文打印在构建日志中。

第一步:调整Shell脚本读取位置参数

#!/usr/bin/env bash
....
/some code
....
# $1对应第一个入参(用户名),$2对应第二个入参(密码)
export USER="$1"
export password="$2"

第二步:Pipeline调用脚本时传入参数

node('abc'){
    stage('build'){
      sh """
        cd ..
        chmod +x ./script.sh
        # 按顺序传入参数即可
        ./script.sh "需要传入的用户名值" "非敏感的参数值"
      """
    }
}

内容的提问来源于stack exchange,提问作者kr_devops

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:01:00