如何在config.ini文件中使用Jenkins环境变量?
实现方法
你可以通过以下两种常见方案完成凭据注入:
方案1:sed 原地替换占位符
不需要修改现有占位符格式,操作最简单:
- 先确认你的config.ini文件中已保留预设的占位符:
DB_USERNAME = {DATABASE_USER} DB_PASSWORD = {DATABASE_PASSWORD}
- 在Jenkinsfile的
withCredentials代码块内,执行bash命令时加入替换逻辑即可,示例如下:
withCredentials([usernamePassword(credentialsId: 'database', usernameVariable: 'DATABASE_USER', passwordVariable: 'DATABASE_PASSWORD')]) { sh ''' export CONFIG_FILE='config.ini' # 替换用户名占位符 sed -i "s/{DATABASE_USER}/$DATABASE_USER/g" $CONFIG_FILE # 替换密码占位符 sed -i "s/{DATABASE_PASSWORD}/$DATABASE_PASSWORD/g" $CONFIG_FILE # 此处添加你的后续业务脚本逻辑 ''' }
注意:如果你的构建节点是macOS系统,sed命令需调整为
sed -i "" "s/{DATABASE_USER}/$DATABASE_USER/g" $CONFIG_FILE。
方案2:envsubst 自动替换变量
适合占位符多的场景,不用逐条写sed规则:
- 先调整config.ini模板的占位符为Shell变量格式,你可以单独存为模板文件(比如命名为
config.ini.template)避免污染原配置:
DB_USERNAME = $DATABASE_USER DB_PASSWORD = $DATABASE_PASSWORD
- 在
withCredentials块内调用envsubst生成最终配置文件:
withCredentials([usernamePassword(credentialsId: 'database', usernameVariable: 'DATABASE_USER', passwordVariable: 'DATABASE_PASSWORD')]) { sh ''' export CONFIG_FILE='config.ini' # 读取模板替换变量后输出到最终配置文件 envsubst '$DATABASE_USER $DATABASE_PASSWORD' < config.ini.template > $CONFIG_FILE # 此处添加你的后续业务脚本逻辑 ''' }
注意:envsubst属于gettext软件包的组件,绝大多数Linux发行版默认预装,无特殊环境无需额外配置。
安全提示
构建任务结束后如果不需要留存config.ini文件,建议在脚本末尾主动删除该文件,避免敏感凭据泄露,Jenkins默认会对withCredentials导出的变量做日志掩码,不用担心构建日志中出现明文凭据。
内容的提问来源于stack exchange,提问作者jipot
相关产品推荐
相关产品推荐

