如何在YAML中将Shell脚本输出存入变量?
解决YAML中Shell输出存入变量的问题
你的错误出在variables字段的写法上:variables要求是键值对(哈希)结构,但你把rpackval定义成了数组(用-开头),而且variables本身只能用来定义静态变量,没办法直接在这里执行Shell命令并捕获输出,所以才会报variables config should be a hash of key value pairs的错误。
根据你原来的Groovy逻辑(Jenkins Pipeline语法),对应的YAML实现分两种常见场景:
场景1:Jenkins声明式Pipeline(YAML格式)
需要在steps里用script块执行Groovy代码,和原逻辑保持一致:
pipeline: agent any stages: - stage: 获取SFDX命令输出 steps: - script: # 执行sfdx命令并捕获标准输出,trim()去除首尾空白字符 rpackval = sh(script: 'some sfdx command', returnStdout: true).trim() # 验证变量值 echo "获取到的值:${rpackval}"
场景2:GitLab CI/CD YAML
直接用Shell的变量赋值语法在script里处理:
stages: - 获取值 获取SFDX值: stage: 获取值 script: # 捕获命令输出到变量 - rpackval=$(some sfdx command) # 使用变量 - echo "获取到的值:$rpackval"
如果需要跨Job传递这个变量,GitLab可以用dotenv报告实现:
stages: - 获取值 - 使用值 获取SFDX值: stage: 获取值 script: - rpackval=$(some sfdx command) - echo "rpackval=$rpackval" > variables.env artifacts: reports: dotenv: variables.env 使用值: stage: 使用值 script: - echo "使用上一个Job传递的值:$rpackval"
内容的提问来源于stack exchange,提问作者Sharad Goyal
相关产品推荐
相关产品推荐

