簡體   English   中英

如何將 Terraform output 變量保存到 Github Action 的環境變量中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM