如何在Jenkins Build iOS阶段输入参数描述中引用环境变量
解决Jenkins iOS构建中Input参数描述展示动态环境变量的问题
问题原因
Jenkins中stage级别的input参数会在stage启动前预解析,而env.APP_NUM是在第一个App Store Build Number阶段运行时才设置的,所以直接在stage的input里引用${env.APP_NUM}会无法获取到值。需要将input逻辑放到script块内部,让变量在运行时动态解析。
优化后的Jenkinsfile配置
stage('App Store Build Number') { steps { script { // 直接获取fastlane输出,无需写入临时文件,简化流程 env.APP_NUM = sh( script: "fastlane run app_store_build_number api_key_path:\"key.json\" app_identifier:\"com.projectname.app\" | grep -o 'Latest upload for live-version.*'", returnStdout: true ).trim() echo "获取到的线上版本信息:${env.APP_NUM}" slack_send("${env.APP_NUM}") } } } stage('build ios') { steps { script { // 将input放入script块内,确保env.APP_NUM已被赋值 def userInput = input( message: "是否继续构建?", ok: "确认继续", parameters: [ string( defaultValue: "", name: 'APP_NUM', trim: true, description: "当前线上版本信息:${env.APP_NUM}" ) ] ) // 可按需使用用户输入的参数,示例: // echo "用户确认的版本信息:${userInput.APP_NUM}" } } }
关键修改点
- 简化版本信息获取:去掉临时文件
test的写入和读取操作,直接通过sh命令的返回值赋值给env.APP_NUM,减少不必要的IO步骤。 - 将input移至script块:stage级别的input会提前解析变量,而script块内的
input函数是在stage运行时执行的,此时env.APP_NUM已经被第一个stage正确设置,能在参数描述中正常展示。
内容的提问来源于stack exchange,提问作者Sameed Usmani
相关产品推荐
相关产品推荐

