我的项目使用Terraform设置基础设施,使用Github Actions进行CI/CD。运行
根据Github Action文档,这是使用工作流命令创建或更新环境变量的方式。
这是我的简化版Github Action工作流程:
terraform apply
后,我希望将Terraform输出变量的值保存为Github Action环境变量,以供后续工作流程使用。根据Github Action文档,这是使用工作流命令创建或更新环境变量的方式。
这是我的简化版Github Action工作流程:
name: Setup infrastructure
jobs:
run-terraform:
name: Apply infrastructure changes
runs-on: ubuntu-latest
steps:
...
- run: terraform output vm_ip
- run: echo TEST=$(terraform output vm_ip) >> $GITHUB_ENV
- run: echo ${{ env.TEST }}
当在本地运行命令 echo TEST_VAR=$(terraform output vm_ip)
时,输出的确切内容为 TEST="192.168.23.23"
,但从 Github Action CLI 输出时,我得到了非常奇怪的结果:
我已经尝试过使用单引号和双引号。 在某个时候,我改变了策略,并尝试使用 jq
。因此,我添加了以下步骤,以将所有Terraform输出导出到JSON文件中,并使用 jq
解析它:
- run: terraform output -json >> /tmp/tf.out.json
- run: jq '.vm_ip.value' /tmp/tf.out.json
但现在它会抛出以下错误:
parse error: Invalid numeric literal at line 1, column 9
虽然生成的JSON格式是完全有效的:
{
"cc_host": {
"sensitive": false,
"type": "string",
"value": "private.c.db.ondigitalocean.com"
},
"cc_port": {
"sensitive": false,
"type": "number",
"value": 1234
},
"db_host": {
"sensitive": false,
"type": "string",
"value": "private.b.db.ondigitalocean.com"
},
"db_name": {
"sensitive": false,
"type": "string",
"value": "XXX"
},
"db_pass": {
"sensitive": true,
"type": "string",
"value": "XXX"
},
"db_port": {
"sensitive": false,
"type": "number",
"value": 1234
},
"db_user": {
"sensitive": false,
"type": "string",
"value": "XXX"
},
"vm_ip": {
"sensitive": false,
"type": "string",
"value": "206.189.15.70"
}
}
本地环境下,terraform output -json >> /tmp/tf.out.json
和 jq '.vm_ip.value' /tmp/tf.out.json
命令可以正常工作。
terraform output -raw NAME
来访问它,这样它就不会包含引号和转义,这些是Terraform为了人类读者查看Terraform语言语法中的值而包括的,而且只会返回字面量字符串值。 - Martin Atkinsterraform_wrapper: false
以便能够获取输出变量,但是你的评论暗示可以从步骤输出中获取 terraform 输出,你有没有任何证据证明它有效? - undefined