[英]How to save Terraform output variable into a Github Action’s environment variable
我的項目使用 Terraform 設置基礎設施,使用 Github 操作用於 CI/CD。 After running terraform apply
I would like to save the value of a Terraform output variable as Github Action environment variable to be later used by the workflow.
根據 Github Action 的文檔, 這是使用工作流命令創建或更新環境變量的方法。
這是我簡化的 Github 操作工作流程:
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 操作 CLI Z78E6221F6393D14CE5DZFZ686
我試過單引號,雙引號。 在某些時候,我改變了策略並嘗試使用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"
}
}
The commands terraform output -json >> /tmp/tf.out.json
and jq '.vm_ip.value' /tmp/tf.out.json
work accordingly on local.
經過幾個小時的搜索,我終於弄明白了。
似乎Terraform 的 Github Action提供了一個名為terraform_wrapper
的附加參數,如果您計划在命令中使用輸出,則需要將其設置為false
。 您可以在此處閱讀更深入的文章。
否則,它們將自動暴露給步驟的輸出,並且可以像steps.<step_id>.outputs.<variable>
一樣訪問它們。 您可以在此處和此處閱讀有關它們的更多信息。
對我來說,有效的是使用terraform-bin output
而不是terraform output
。
更多信息在這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.