如何在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的参数语法,需要用以下两种常用方式实现填充:
方式一:通过环境变量传递替换
- 修改docker-compose文件,使用Shell风格的环境变量占位符:
services: bo: image: docker-new.tinder.net/bo:${RELEASE_SCOPE}
- 在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文件内容
- 在docker-compose文件中预留占位标记:
services: bo: image: docker-new.tinder.net/bo:VERSION_PLACEHOLDER
- 在Jenkins流水线中添加Shell命令替换占位符:
sed -i "s/VERSION_PLACEHOLDER/${params.RELEASE_SCOPE}/g" docker-compose.yml
- 正常执行docker-compose命令即可。
内容的提问来源于stack exchange,提问作者ketter palumets
相关产品推荐
相关产品推荐

