如何在Jenkins中设置HTTP代理?代理环境变量不生效怎么办
问题原因
- Jenkins中每一个
sh步骤都会启动独立的shell子进程,进程结束后当前会话内设置的环境变量会全部销毁,不会传递到后续的sh步骤中。你前四步单独执行export操作,后续的printenv和./myScript运行在全新的shell进程里,自然读取不到之前设置的变量。
解决方案
下面三种方案均可解决,可按实际场景选择:
方案1:合并相关命令到同一个sh块
将变量导出、打印校验、脚本执行的逻辑全部放在同一个sh步骤中,保证所有操作在同一个shell会话内完成:
stage('build') { steps { echo "************ 导出变量前 ***************************" sh 'printenv | sort' sh ''' export http_proxy='http://127.0.0.1:3128' export https_proxy='http://127.0.0.1:3128' export HTTP_PROXY='http://127.0.0.1:3128' export HTTPS_PROXY='http://127.0.0.1:3128' echo "************ 导出变量后 ***************************" printenv | sort echo "**************************************************" ./myScript ''' } }
方案2:使用environment块全局配置代理变量
如果需要整个pipeline或当前stage都生效,直接在对应层级添加environment块声明变量,无需每次手动export:
// 示例为pipeline全局生效,也可将environment块放在stage内部仅对当前阶段生效 pipeline { agent any environment { http_proxy = 'http://127.0.0.1:3128' https_proxy = 'http://127.0.0.1:3128' HTTP_PROXY = 'http://127.0.0.1:3128' HTTPS_PROXY = 'http://127.0.0.1:3128' } stages { stage('build') { steps { sh 'printenv | sort' sh './myScript' } } } }
方案3:使用withEnv临时注入环境变量
仅需要给部分步骤临时添加代理变量时,用withEnv包裹需要生效的步骤即可:
stage('build') { steps { echo "************ 导出变量前 ***************************" sh 'printenv | sort' withEnv([ 'http_proxy=http://127.0.0.1:3128', 'https_proxy=http://127.0.0.1:3128', 'HTTP_PROXY=http://127.0.0.1:3128', 'HTTPS_PROXY=http://127.0.0.1:3128' ]) { echo "************ 导出变量后 ***************************" sh 'printenv | sort' echo "**************************************************" sh './myScript' } } }
内容的提问来源于stack exchange,提问作者Mouin
相关产品推荐
相关产品推荐

