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

如何在Jenkins中读取输入选择并转为环境变量用于Docker Compose部署

Jenkins选择参数填充docker-compose文件问题解决

问题场景

在Jenkins流水线中添加了选择参数让用户选择部署版本,流水线代码如下:

stage('User Input') {
    steps {
        input message: 'User input required', ok: 'Release!',
            parameters: [choice(name: 'RELEASE_SCOPE', choices: '2.1\n2.2\n2.3', description: 'What is the release scope?')]
        echo "env: ${env.RELEASE_SCOPE}"
        echo "params: ${params.RELEASE_SCOPE}"
    }
}

希望将选中的版本号填充到docker-compose文件的image标签中,写法如下但无法生效:

services:
    bo:
        image: docker-new.tinder.net/bo:{params.RELEASE_SCOPE}

疑问:是否需要将参数转换为环境变量?

解决方法

不需要额外转换环境变量——Jenkins的input参数会自动同步到params对象和env环境变量中(从你echo的输出也能验证这一点)。问题核心是docker-compose不识别Jenkins的参数语法,需要用以下两种常用方式实现填充:

方式一:通过环境变量传递替换

  1. 修改docker-compose文件,使用Shell风格的环境变量占位符:
services:
    bo:
        image: docker-new.tinder.net/bo:${RELEASE_SCOPE}
  1. 在Jenkins流水线中运行docker-compose时,直接传递环境变量:
# 方式A:临时传递环境变量执行
RELEASE_SCOPE=${env.RELEASE_SCOPE} docker-compose up -d

# 方式B:用envsubst预替换文件内容(适合需要保留修改后文件的场景)
envsubst < docker-compose.yml > docker-compose-deploy.yml
docker-compose -f docker-compose-deploy.yml up -d

方式二:直接修改docker-compose文件内容

  1. 在docker-compose文件中预留占位标记:
services:
    bo:
        image: docker-new.tinder.net/bo:VERSION_PLACEHOLDER
  1. 在Jenkins流水线中添加Shell命令替换占位符:
sed -i "s/VERSION_PLACEHOLDER/${params.RELEASE_SCOPE}/g" docker-compose.yml
  1. 正常执行docker-compose命令即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:58:15