在 Jenkins 中传递参数到 Shell 脚本,通常可以通过 Jenkins Pipeline 的参数传递机制实现。以下是几种常见的方式:
✅ 1. 使用 Jenkins Pipeline 的 parameters 传递参数
示例:在 Jenkins Pipeline 中传递参数
pipeline {
agent any
parameters {
string(name: 'ENV', description: 'Environment (dev, test, prod)')
string(name: 'PARAM', description: 'Custom parameter')
}
stages {
stage('Build') {
steps {
sh 'echo "Environment: ${ENV}, Parameter: ${PARAM}"'
}
}
}
}
说明:
parameters中定义了两个参数:ENV和PARAM。- 在 Jenkins 的 Pipeline 中,可以通过
env.ENV和env.PARAM获取参数值。 - 可以在任意
sh或script中使用这些变量。
✅ 2. 使用 Jenkins API 传递参数(适用于自定义脚本)
如果你需要在 Jenkins 脚本中直接传递参数(比如在 sh 命令中),可以使用 Jenkins API 的 params:
#!/bin/bash
# 获取 Jenkins 参数
ENV=${JENKINS_PARAMS:ENV}
PARAM=${JENKINS_PARAMS:PARAM}
echo "Environment: $ENV, Parameter: $PARAM"
注意:
- 这种方式通常用于 Jenkins 自定义脚本(如 Jenkinsfile 中的
sh命令)。 - 需要确保 Jenkins 脚本有权限访问
JENKINS_PARAMS环境变量。
✅ 3. 使用 Jenkins 的 parameters 传递参数到外部脚本
你可以将 Jenkins 的参数通过 env 传递到外部脚本中,例如:
#!/bin/bash
# 从 Jenkins 获取参数
ENV=${env:ENV}
PARAM=${env:PARAM}
echo "Environment: $ENV, Parameter: $PARAM"
使用方式:
在 Jenkins 的 Pipeline 中,将此脚本保存为 .sh 文件,然后在 Pipeline 中调用:
stage('Run script') {
steps {
sh './my_script.sh'
}
}
✅ 4. 使用 Jenkins Pipeline 的 parameters 传递参数到 sh 命令
stage('Run Command') {
steps {
sh """
echo "Environment: ${env.ENV}, Parameter: ${env.PARAM}"
"""
}
}
✅ 5. 使用 Jenkins 的 parameters 传递参数到 script 块
stage('Run script') {
steps {
script {
ENV = env.ENV
PARAM = env.PARAM
echo "Environment: $ENV, Parameter: $PARAM"
}
}
}
✅ 6. 使用 Jenkins 的 parameters 传递参数到 docker 命令
stage('Run Docker') {
steps {
sh """
docker run --env ENV=${env.ENV} --env PARAM=${env.PARAM} myimage mycommand
"""
}
}
✅ 总结
| 方式 | 适用场景 | 优点 |
|---|---|---|
parameters |
Jenkins Pipeline 中的 sh 或 script |
简单直接,适合 Jenkins Pipeline |
Jenkins API |
自定义脚本(如 Jenkinsfile) | 可以直接访问 params |
env 变量 |
外部脚本 | 可以在任意 Shell 脚本中使用 |
docker 命令 |
Docker 容器中运行脚本 | 适合容器化环境 |
如需进一步了解 Jenkins Pipeline 参数传递机制,可以参考 Jenkins Pipeline documentation。如需 Shell 脚本示例,也可以告诉我具体需求。
