Jenkins Git插件:如何传递环境变量至检出后钩子?
解决Git检出后钩子无法读取Jenkins环境变量的问题
方法1:用Git插件内置的PostCheckout扩展(推荐)
如果不需要依赖Git原生钩子,直接用Jenkins Git插件提供的PostCheckout扩展,脚本会在Jenkins构建环境中执行,能直接获取你设置的环境变量:
environment { MY_ENV = '1' } stage('检出代码') { steps { checkout scmGit( branches: [[name: 'stable-3.x']], userRemoteConfigs: [[url: 'https://github.com/jenkinsci/git-plugin.git']], extensions: [ [ $class: 'PostCheckout', postCheckoutScript: '''#!/bin/sh echo "MY_ENV的值: $MY_ENV" # 在这里编写你的检出后处理逻辑 ''' ] ] ) } }
方法2:给Git原生post-checkout钩子传递环境变量
如果必须用Git原生的post-checkout钩子,需要先生成钩子脚本并确保环境变量能被继承:
withEnv(['MY_ENV=1']) { stage('准备Git钩子') { steps { sh 'mkdir -p .git/hooks' writeFile file: '.git/hooks/post-checkout', text: '''#!/bin/sh echo "Git钩子中获取到的MY_ENV: $MY_ENV" # 这里写你的Git钩子逻辑 ''' sh 'chmod +x .git/hooks/post-checkout' } } stage('检出代码') { steps { checkout scmGit( branches: [[name: 'stable-3.x']], userRemoteConfigs: [[url: 'https://github.com/jenkinsci/git-plugin.git']], extensions: [ [ $class: 'LocalBranch', localBranch: '**' ] ] ) } } }
方法3:直接用Git命令检出
放弃scmGit步骤,用原生git命令执行检出,环境变量会直接传递给Git进程,钩子脚本可直接读取:
withEnv(['MY_ENV=1']) { stage('用Git命令检出') { steps { sh ''' rm -rf ./* git clone -b stable-3.x https://github.com/jenkinsci/git-plugin.git . # Git原生post-checkout钩子会自动运行,可获取MY_ENV ''' } } }
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

